-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.php
168 lines (120 loc) · 6.11 KB
/
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<?php
require_once 'vendor/autoload.php';
// TwitterOAuth
use Abraham\TwitterOAuth\TwitterOAuth;
// Smarty
$smarty = new Smarty();
// サイトの URL (自分のサイトの URL を指定)
$site_url = 'https://tools.tsukumijima.net/twittertoken-viewer/';
$smarty->assign('site_url', $site_url);
// セッション名 (Cookie に反映される)
$session_name = 'twittertoken-viewer_session';
// セッションを削除する関数
function session_remove() {
// セッションを全て空にする
$_SESSION = [];
// セッション Cookie も削除する
setcookie(session_name(), '', time() - 42000, '/');
// セッションを破壊する
session_destroy();
}
// 認証ページ
if (isset($_REQUEST['auth'])) {
// セッション開始
session_name($session_name);
session_start();
try {
// リクエストに含まれるトークンを使って Twitter に接続
$connection = new TwitterOAuth($_REQUEST['consumer_key'], $_REQUEST['consumer_secret']);
// 認証 URL を取得するためのリクエストトークンを作成
$request_token = $connection->oauth('oauth/request_token', ['oauth_callback' => $site_url]);
// 認証 URL の取得
$auth_url = $connection->url('oauth/authenticate', ['oauth_token' => $request_token['oauth_token']]);
// Consumer Key・Consumer Secret をセッションに保存
$_SESSION['consumer_key'] = $_REQUEST['consumer_key'];
$_SESSION['consumer_secret'] = $_REQUEST['consumer_secret'];
// リクエストトークンをセッションに保存
$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
// 認証ページにリダイレクト
header('Location: '.$auth_url);
exit;
} catch (Exception $exception) {
// エラーなのでセッションを削除する
session_remove();
// エラーメッセージ
if (preg_match('/Callback URL not approved for this client application.*/', $exception)){
$error = [
'<b>エラー:Callback URL がアプリ設定で設定されていない、または一致しないため、アプリ連携ができません。</b><br>',
'Twitter Developer のアプリ設定にて、Callback URLs の項目に Callback URL ('.$site_url.') を追加し、もう一度アプリ連携し直してください。<br>',
];
} else if (preg_match('/Could not authenticate you.*/', $exception)){
$error = [
'<b>エラー:認証に失敗したため、アプリ連携ができません。</b><br>',
'指定した Consumer Key・Consumer Secret が間違っている可能性があります。<br>',
'Consumer Key・Consumer Secret が正しいかどうか確認し、もう一度アプリ連携し直してください。<br>',
];
} else {
$error = [
'<b>エラー:認証中に不明なエラーが発生したため、アプリ連携ができません。</b><br>',
'<b>'.$exception.'</b><br>',
'Consumer Key・Consumer Secret が正しいかどうか確認し、もう一度アプリ連携し直してください。<br>',
];
}
// エラーを表示
$smarty->assign('type', 'error');
$smarty->assign('error', $error);
$smarty->assign('error_title', '<i class="fas fa-sign-in-alt"></i>アプリケーション認証');
}
// 結果ページ
} else if (isset($_REQUEST['oauth_verifier']) or isset($_REQUEST['denied'])) {
// セッション開始
session_name($session_name);
session_start();
if (!isset($_GET['denied'])) { // denied でないなら
try {
// null チェック
if (empty($_SESSION['consumer_key']) or empty($_SESSION['consumer_secret']) or
empty($_SESSION['oauth_token']) or empty($_SESSION['oauth_token_secret'])) {
throw new Exception();
}
// セッションに保存しておいたリクエストトークンで Twitter に接続
$connection = new TwitterOAuth($_SESSION['consumer_key'], $_SESSION['consumer_secret'], $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
// アクセストークンを取得
$access_token = $connection->oauth('oauth/access_token', ['oauth_verifier' => $_REQUEST['oauth_verifier']]);
// $access_token['oauth_token'] がアクセストークン
// $access_token['oauth_token_secret'] がアクセストークンシークレット
// トークンを表示
$smarty->assign('type', 'result');
$smarty->assign('access_token', $access_token);
} catch (Exception $e) {
// エラーメッセージ
$error = [
'<b>エラー:セッションの期限が切れているため、アプリ連携ができません。</b><br>',
'もう一度アプリ連携し直してください。<br>',
];
// エラーを表示
$smarty->assign('type', 'error');
$smarty->assign('error', $error);
$smarty->assign('error_title', '<i class="fas fa-key"></i>アクセストークンを確認する');
}
} else {
// エラーメッセージ
$error = [
'<b>エラー:Twitter アカウントとのアプリ連携が拒否されたため、アプリ連携ができません。</b><br>',
'もう一度アプリ連携し直してください。<br>',
];
// エラーを表示
$smarty->assign('type', 'error');
$smarty->assign('error', $error);
$smarty->assign('error_title', '<i class="fas fa-key"></i>アクセストークンを確認する');
}
// セッションを削除する
session_remove();
// 通常のアクセス
} else {
// 画面表示
$smarty->assign('type', 'normal');
}
// テンプレートを表示
$smarty->display('index.tpl');