| | @@ -41,225 +41,242 @@ |
| 41 | 41 |
|
| 42 | 42 | use Std\Lib\Tester;
|
| 43 | 43 | use Std\Lib\Auth;
|
| 44 | +use Result;
|
| 44 | 45 |
|
| 45 | | -if (AUTH_ENABLED) {
|
| 46 | | - $test = new Tester([
|
| 47 | | - 'colorOutput' => true,
|
| 48 | | - 'verboseOutput' => true
|
| 49 | | - ]);
|
| 46 | +$test = new Tester([
|
| 47 | + 'colorOutput' => true,
|
| 48 | + 'verboseOutput' => true
|
| 49 | +]);
|
| 50 | 50 |
|
| 51 | | - if (AUTH_REGISTER_ENABLED) {
|
| 52 | | - $test->describe('ユーザー登録', function($test): void {
|
| 53 | | - $test->it('アカウントを作成出来るはず', function($test): void {
|
| 54 | | - $user = "admin1234";
|
| 55 | | - $pass = "testTEST1234!#$%@[]:;";
|
| 56 | | - $passVerify = "testTEST1234!#$%@[]:;";
|
| 57 | | - $email = "test@076.co.jp";
|
| 51 | +// 本物のユーザーデータを触らない様に、一時ディレクトリを使う
|
| 52 | +$base = sys_get_temp_dir().'/lbauth_'.bin2hex(random_bytes(6));
|
| 53 | +mkdir("{$base}/user", 0700, true);
|
| 54 | +mkdir("{$base}/ass", 0700, true);
|
| 55 | +touch("{$base}/user/.kara");
|
| 58 | 56 |
|
| 59 | | - $auth = new Auth();
|
| 60 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 57 | +// メールは送らずに記録する
|
| 58 | +// メールアドレスのMXレコードを確認するので、DNSが使えない場合は登録のテストをスキップする
|
| 59 | +$dns = checkdnsrr('076.co.jp', 'MX');
|
| 60 | +$mails = new \ArrayObject();
|
| 61 | +$make = function(?string $username = null, bool $verify = false, bool $mailFails = false) use ($base, $mails): Auth {
|
| 62 | + return new class($username, $base, $verify, $mailFails, $mails) extends Auth {
|
| 63 | + public function __construct(?string $username, string $base, private bool $verify, private bool $mailFails, private \ArrayObject $mails) {
|
| 64 | + $this->dataDir = "{$base}/user/";
|
| 65 | + $this->assDir = "{$base}/ass/";
|
| 66 | + parent::__construct($username);
|
| 67 | + }
|
| 68 | + public function requiresVerification(): bool { return $this->verify; }
|
| 69 | + protected function siteUrl(): string { return 'https://example.com'; }
|
| 70 | + protected function sendVerificationMail(\stdClass $user, string $token): Result {
|
| 71 | + if ($this->mailFails) return Result::Error('送信失敗');
|
| 72 | + $this->mails[] = ['to' => $user->email, 'token' => $token];
|
| 73 | + return Result::Success();
|
| 74 | + }
|
| 75 | + };
|
| 76 | +};
|
| 77 | +$userFile = function(string $username) use ($base): ?string {
|
| 78 | + foreach (scandir("{$base}/user") as $f) if (preg_match('/^\d+\.'.preg_quote($username, '/').'\.json$/', $f)) return "{$base}/user/{$f}";
|
| 79 | + return null;
|
| 80 | +};
|
| 81 | +$read = fn(string $username) => json_decode(file_get_contents($userFile($username)));
|
| 82 | +$pass = 'testTEST1234!#$%@[]:;';
|
| 61 | 83 |
|
| 62 | | - $expect = true;
|
| 84 | +$test->describe('ユーザー登録', function($test) use ($make, $read, $userFile, $pass, $base, $dns): void {
|
| 85 | + if (!AUTH_ENABLED || !AUTH_REGISTER_ENABLED) {
|
| 86 | + $test->skipAll('AUTH_ENABLED又はAUTH_REGISTER_ENABLEDが無効');
|
| 87 | + } else if (!$dns) {
|
| 88 | + $test->skipAll('DNSが使えない(076.co.jpのMXレコードを受け取れない)');
|
| 89 | + }
|
| 63 | 90 |
|
| 64 | | - $test->assertNotNull($res);
|
| 65 | | - $test->assertEquals($res->isSuccess, $expect);
|
| 66 | | - });
|
| 91 | + $test->it('アカウントを作成出来るはず', function($test) use ($make, $read, $pass, $base): void {
|
| 92 | + $res = $make()->mkUser('admin1234', $pass, $pass, 'test@076.co.jp');
|
| 93 | + $test->assertTrue($res->isSuccess, (string)$res->message);
|
| 94 | + $test->assertFalse($res->data['verify']);
|
| 67 | 95 |
|
| 68 | | - $test->it('空フィールドでアカウントを作成出来ないはず', function($test): void {
|
| 69 | | - $user = "";
|
| 70 | | - $pass = "testTEST1234!#$%@[]:;";
|
| 71 | | - $passVerify = "testTEST1234!#$%@[]:;";
|
| 72 | | - $email = "test@076.ne.jp";
|
| 96 | + $u = $read('admin1234');
|
| 97 | + $test->assertEquals(1, $u->id);
|
| 98 | + $test->assertEquals('test@076.co.jp', $u->email);
|
| 99 | + $test->assertTrue(password_verify($pass, $u->password));
|
| 100 | + $test->assertFalse(isset($u->verified));
|
| 101 | + $test->assertTrue(is_dir("{$base}/ass/admin1234"));
|
| 102 | + });
|
| 73 | 103 |
|
| 74 | | - $auth = new Auth();
|
| 75 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 104 | + $test->it('空フィールドでアカウントを作成出来ないはず', function($test) use ($make, $pass): void {
|
| 105 | + $auth = $make();
|
| 106 | + $test->assertEquals('エラー:ユーザー名をご入力下さい。<br />', $auth->mkUser('', $pass, $pass, 'a@076.co.jp')->message);
|
| 107 | + $test->assertEquals('エラー:パスワードをご入力下さい。<br />', $auth->mkUser('admin5678', '', $pass, 'a@076.co.jp')->message);
|
| 108 | + $test->assertEquals('エラー:メールアドレスをご入力下さい。<br />', $auth->mkUser('admin5678', $pass, $pass, '')->message);
|
| 109 | + });
|
| 76 | 110 |
|
| 77 | | - $expect = 'エラー:ユーザー名をご入力下さい。'.'<br />';
|
| 111 | + $test->it('既にユーザー名やメールアドレスが存在するアカウントを作成出来ないはず', function($test) use ($make, $pass): void {
|
| 112 | + $auth = $make();
|
| 113 | + $test->assertEquals('ユーザー「admin1234」は既に存在します。<br />', $auth->mkUser('admin1234', $pass, $pass, 'b@076.co.jp')->message);
|
| 114 | + $test->assertEquals('ユーザー「test@076.co.jp」は既に存在します。<br />', $auth->mkUser('admin5678', $pass, $pass, 'test@076.co.jp')->message);
|
| 115 | + });
|
| 78 | 116 |
|
| 79 | | - $test->assertNotNull($res);
|
| 80 | | - $test->assertEquals($res->message, $expect);
|
| 117 | + $test->it('一致しない、短い、又は不安なパスワードでアカウントを作成出来ないはず', function($test) use ($make, $pass): void {
|
| 118 | + $auth = $make();
|
| 119 | + $test->assertEquals('エラー:パスワードは一致していません。<br />', $auth->mkUser('admin5678', 'testtest1234!#$%@[]:;', $pass, 'c@076.co.jp')->message);
|
| 120 | + $test->assertEquals('エラー:パスワードは20以上をご入力下さい。<br />', $auth->mkUser('admin5678', 'testTEST1234', 'testTEST1234', 'c@076.co.jp')->message);
|
| 121 | + $test->assertEquals('エラー:パスワードは2つ以上の大文字、2つ以上の小文字、2つ以上の数字、及び2つ以上の特別文字を含む事が必須です。<br />',
|
| 122 | + $auth->mkUser('admin5678', 'testTEST1234testTEST', 'testTEST1234testTEST', 'c@076.co.jp')->message);
|
| 123 | + });
|
| 81 | 124 |
|
| 82 | | - $user = "admin5678";
|
| 83 | | - $pass = "";
|
| 84 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 125 | + $test->it('不正なユーザー名とメールアドレスでアカウントを作成出来ないはず', function($test) use ($make, $pass): void {
|
| 126 | + $auth = $make();
|
| 127 | + $test->assertEquals('エラー:ユーザー名は6文字以上をご入力下さい。<br />', $auth->mkUser('abc', $pass, $pass, 'c@076.co.jp')->message);
|
| 128 | + $test->assertEquals('エラー:ユーザー名に不正な文字が含みます。<br />', $auth->mkUser('admin_../x', $pass, $pass, 'c@076.co.jp')->message);
|
| 129 | + $test->assertEquals('エラー:メールアドレスは不正です。<br />', $auth->mkUser('admin5678', $pass, $pass, 'test@076')->message);
|
| 130 | + $test->assertEquals('エラー:メールアドレスは不正です。<br />', $auth->mkUser('admin5678', $pass, $pass, 'test@nomx.invalid')->message);
|
| 131 | + });
|
| 85 | 132 |
|
| 86 | | - $expect = 'エラー:パスワードをご入力下さい。'.'<br />';
|
| 133 | + $test->it('公開プロフィールに秘密の情報を含まないはず', function($test) use ($make): void {
|
| 134 | + $u = $make()->getUser('admin1234');
|
| 135 | + $test->assertNotNull($u);
|
| 136 | + $test->assertFalse(isset($u->password));
|
| 137 | + $test->assertFalse(isset($u->tokens));
|
| 138 | + $test->assertFalse(isset($u->verifyToken));
|
| 139 | + $test->assertEquals('(秘密)', $u->email);
|
| 140 | + $test->assertNull($make()->getUser('nobody99'));
|
| 141 | + });
|
| 142 | +});
|
| 87 | 143 |
|
| 88 | | - $test->assertNotNull($res);
|
| 89 | | - $test->assertEquals($res->message, $expect);
|
| 144 | +$test->describe('メールアドレスの確認', function($test) use ($make, $read, $userFile, $pass, $mails, $base, $dns): void {
|
| 145 | + if (!AUTH_ENABLED || !AUTH_REGISTER_ENABLED) {
|
| 146 | + $test->skipAll('AUTH_ENABLED又はAUTH_REGISTER_ENABLEDが無効');
|
| 147 | + } else if (!$dns) {
|
| 148 | + $test->skipAll('DNSが使えない(076.co.jpのMXレコードを受け取れない)');
|
| 149 | + }
|
| 90 | 150 |
|
| 91 | | - $pass = "testTEST1234!#$%@[]:;";
|
| 92 | | - $email = "";
|
| 93 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 151 | + $test->it('登録すると確認メールを送り、未確認として保存するはず', function($test) use ($make, $read, $pass, $mails): void {
|
| 152 | + $res = $make(null, true)->mkUser('verify01', $pass, $pass, 'v1@076.co.jp');
|
| 153 | + $test->assertTrue($res->isSuccess);
|
| 154 | + $test->assertTrue($res->data['verify']);
|
| 155 | + $test->assertStringContains('確認メール', $res->message);
|
| 94 | 156 |
|
| 95 | | - $expect = 'エラー:メールアドレスをご入力下さい。'.'<br />';
|
| 157 | + $test->assertCount(1, $mails);
|
| 158 | + $test->assertEquals('v1@076.co.jp', $mails[0]['to']);
|
| 159 | + $test->assertTrue((bool)preg_match('/^[0-9a-f]{64}$/', $mails[0]['token']));
|
| 96 | 160 |
|
| 97 | | - $test->assertNotNull($res);
|
| 98 | | - $test->assertEquals($res->message, $expect);
|
| 99 | | - });
|
| 161 | + $u = $read('verify01');
|
| 162 | + $test->assertFalse($u->verified);
|
| 163 | + // トークンはハッシュ化して保存する
|
| 164 | + $test->assertEquals(hash('sha256', $mails[0]['token']), $u->verifyToken);
|
| 165 | + $test->assertTrue($u->verifyExpire > time());
|
| 166 | + });
|
| 100 | 167 |
|
| 101 | | - $test->it('既にユーザー名やメールアドレスが存在するアカウントを作成出来ないはず', function($test): void {
|
| 102 | | - $user = "admin1234";
|
| 103 | | - $pass = "testTEST1234!#$%@[]:;";
|
| 104 | | - $passVerify = "testTEST1234!#$%@[]:;";
|
| 105 | | - $email = "test@076.ne.jp";
|
| 168 | + $test->it('確認メールの送信に失敗したら登録を取り消すはず', function($test) use ($make, $userFile, $pass, $base): void {
|
| 169 | + $res = $make(null, true, true)->mkUser('verify02', $pass, $pass, 'v2@076.co.jp');
|
| 170 | + $test->assertFalse($res->isSuccess);
|
| 171 | + $test->assertNull($userFile('verify02'));
|
| 172 | + $test->assertFalse(is_dir("{$base}/ass/verify02"));
|
| 173 | + });
|
| 106 | 174 |
|
| 107 | | - $auth = new Auth();
|
| 108 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 175 | + $test->it('未確認のアカウントではログイン出来ないはず', function($test) use ($make, $pass, $mails): void {
|
| 176 | + $res = $make('verify01', true)->setToken('verify01', $pass);
|
| 177 | + $test->assertFalse($res->isSuccess);
|
| 178 | + $test->assertTrue($res->data['unverified'] ?? false);
|
| 179 | + // 10分以内は再送しない
|
| 180 | + $test->assertCount(1, $mails);
|
| 181 | + $test->assertFalse(str_contains($res->message, '再送'));
|
| 182 | + });
|
| 109 | 183 |
|
| 110 | | - $expect = 'ユーザー「admin1234」は既に存在します。'.'<br />';
|
| 184 | + $test->it('間違ったパスワードでは未確認かどうか教えないはず', function($test) use ($make): void {
|
| 185 | + $res = $make('verify01', true)->setToken('verify01', 'machigatta-password');
|
| 186 | + $test->assertFalse($res->isSuccess);
|
| 187 | + $test->assertFalse(isset($res->data['unverified']));
|
| 188 | + });
|
| 111 | 189 |
|
| 112 | | - $test->assertNotNull($res);
|
| 113 | | - $test->assertEquals($res->message, $expect);
|
| 190 | + $test->it('時間が経てばログインの時に確認メールを再送するはず', function($test) use ($make, $read, $userFile, $pass, $mails): void {
|
| 191 | + $path = $userFile('verify01');
|
| 192 | + $u = $read('verify01');
|
| 193 | + $u->verifySent = time() - 3600;
|
| 194 | + file_put_contents($path, json_encode($u));
|
| 114 | 195 |
|
| 115 | | - $user = "admin5678";
|
| 116 | | - $email = "test@076.co.jp";
|
| 117 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 196 | + $res = $make('verify01', true)->setToken('verify01', $pass);
|
| 197 | + $test->assertFalse($res->isSuccess);
|
| 198 | + $test->assertStringContains('再送', $res->message);
|
| 199 | + $test->assertCount(2, $mails);
|
| 200 | + $test->assertFalse($mails[0]['token'] === $mails[1]['token']);
|
| 201 | + $test->assertEquals(hash('sha256', $mails[1]['token']), $read('verify01')->verifyToken);
|
| 202 | + });
|
| 118 | 203 |
|
| 119 | | - $expect = 'ユーザー「test@076.co.jp」は既に存在します。'.'<br />';
|
| 204 | + $test->it('不正・古いトークンでは確認出来ないはず', function($test) use ($make, $read, $userFile, $mails): void {
|
| 205 | + $auth = $make();
|
| 206 | + $test->assertFalse($auth->verifyEmailToken('')->isSuccess);
|
| 207 | + $test->assertFalse($auth->verifyEmailToken('../../etc/passwd')->isSuccess);
|
| 208 | + $test->assertFalse($auth->verifyEmailToken(str_repeat('0', 64))->isSuccess);
|
| 209 | + // 再送したので、最初のトークンはもう使えない
|
| 210 | + $test->assertFalse($auth->verifyEmailToken($mails[0]['token'])->isSuccess);
|
| 120 | 211 |
|
| 121 | | - $test->assertNotNull($res);
|
| 122 | | - $test->assertEquals($res->message, $expect);
|
| 123 | | - });
|
| 212 | + // 有効期限切れ
|
| 213 | + $path = $userFile('verify01');
|
| 214 | + $u = $read('verify01');
|
| 215 | + $expire = $u->verifyExpire;
|
| 216 | + $u->verifyExpire = time() - 1;
|
| 217 | + file_put_contents($path, json_encode($u));
|
| 218 | + $test->assertFalse($auth->verifyEmailToken($mails[1]['token'])->isSuccess);
|
| 219 | + $u->verifyExpire = $expire;
|
| 220 | + file_put_contents($path, json_encode($u));
|
| 221 | + });
|
| 124 | 222 |
|
| 125 | | - $test->it('一致しない、短い、又は不安なパスワードでアカウントを作成出来ないはず', function($test): void {
|
| 126 | | - $user = "admin5678";
|
| 127 | | - $pass = "testtest1234!#$%@[]:;";
|
| 128 | | - $passVerify = "testTEST1234!#$%@[]:;";
|
| 129 | | - $email = "test@076.ne.jp";
|
| 223 | + $test->it('リンクのトークンで確認するとログイン出来るはず', function($test) use ($make, $read, $pass, $mails): void {
|
| 224 | + $res = $make()->verifyEmailToken($mails[1]['token']);
|
| 225 | + $test->assertTrue($res->isSuccess);
|
| 226 | + $test->assertEquals('verify01', $res->data['username']);
|
| 130 | 227 |
|
| 131 | | - $auth = new Auth();
|
| 132 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 228 | + $u = $read('verify01');
|
| 229 | + $test->assertTrue($u->verified);
|
| 230 | + $test->assertFalse(isset($u->verifyToken));
|
| 231 | + $test->assertFalse(isset($u->verifyExpire));
|
| 133 | 232 |
|
| 134 | | - $expect = 'エラー:パスワードは一致していません。'.'<br />';
|
| 233 | + // 2回目は使えない
|
| 234 | + $test->assertFalse($make()->verifyEmailToken($mails[1]['token'])->isSuccess);
|
| 135 | 235 |
|
| 136 | | - $test->assertNotNull($res);
|
| 137 | | - $test->assertEquals($res->message, $expect);
|
| 236 | + $_SERVER['REMOTE_ADDR'] ??= '127.0.0.1';
|
| 237 | + $res = @$make('verify01', true)->setToken('verify01', $pass);
|
| 238 | + // CLIでは出力の後なのでクッキーを設定出来ないが、トークンは保存される
|
| 239 | + $test->assertTrue($res->isSuccess || $res->message === 'エラー:クッキーを設定に失敗。', (string)$res->message);
|
| 240 | + $test->assertCount(1, $read('verify01')->tokens);
|
| 241 | + });
|
| 138 | 242 |
|
| 139 | | - $pass = "testTEST1234";
|
| 140 | | - $passVerify = "testTEST1234";
|
| 141 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 243 | + $test->it('確認機能の前に作ったアカウントは確認済みとして扱うはず', function($test) use ($make, $pass): void {
|
| 244 | + $res = @$make('admin1234', true)->setToken('admin1234', $pass);
|
| 245 | + $test->assertFalse(isset($res->data['unverified']));
|
| 246 | + $test->assertTrue($res->isSuccess || $res->message === 'エラー:クッキーを設定に失敗。', (string)$res->message);
|
| 247 | + });
|
| 142 | 248 |
|
| 143 | | - $expect = 'エラー:パスワードは20以上をご入力下さい。'.'<br />';
|
| 249 | + $test->it('古い未確認のアカウントを削除するはず', function($test) use ($make, $read, $userFile, $pass, $base): void {
|
| 250 | + $make(null, true)->mkUser('verify03', $pass, $pass, 'v3@076.co.jp');
|
| 251 | + $make(null, true)->mkUser('verify04', $pass, $pass, 'v4@076.co.jp');
|
| 252 | + $path = $userFile('verify03');
|
| 253 | + $u = $read('verify03');
|
| 254 | + $u->regDate = time() - 8 * 86400;
|
| 255 | + file_put_contents($path, json_encode($u));
|
| 144 | 256 |
|
| 145 | | - $test->assertNotNull($res);
|
| 146 | | - $test->assertEquals($res->message, $expect);
|
| 257 | + $res = $make()->purgeUnverified();
|
| 258 | + $test->assertTrue($res->isSuccess);
|
| 259 | + $test->assertEquals(['verify03'], $res->data['deleted']);
|
| 260 | + $test->assertNull($userFile('verify03'));
|
| 261 | + $test->assertFalse(is_dir("{$base}/ass/verify03"));
|
| 262 | + // 新しい未確認・確認済み・確認機能の前のアカウントは残る
|
| 263 | + $test->assertNotNull($userFile('verify04'));
|
| 264 | + $test->assertNotNull($userFile('verify01'));
|
| 265 | + $test->assertNotNull($userFile('admin1234'));
|
| 147 | 266 |
|
| 148 | | - $pass = "testTEST1234testTEST";
|
| 149 | | - $passVerify = "testTEST1234testTEST";
|
| 150 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 267 | + // 削除したので同じ名前で登録出来る
|
| 268 | + $test->assertTrue($make(null, true)->mkUser('verify03', $pass, $pass, 'v3@076.co.jp')->isSuccess);
|
| 269 | + });
|
| 270 | +});
|
| 151 | 271 |
|
| 152 | | - $expect = 'エラー:パスワードは2つ以上の大文字、2つ以上の小文字、2つ以上の数字、及び2つ以上の特別文字を含む事が必須です。'.'<br />';
|
| 153 | | -
|
| 154 | | - $test->assertNotNull($res);
|
| 155 | | - $test->assertEquals($res->message, $expect);
|
| 156 | | - });
|
| 157 | | -
|
| 158 | | - $test->it('不正なメールアドレスでアカウントを作成出来ないはず', function($test): void {
|
| 159 | | - $user = "admin5678";
|
| 160 | | - $pass = "testTEST1234!#$%@[]:;";
|
| 161 | | - $passVerify = "testTEST1234!#$%@[]:;";
|
| 162 | | - $email = "test@076.niggerballs";
|
| 163 | | -
|
| 164 | | - $auth = new Auth();
|
| 165 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 166 | | -
|
| 167 | | - $expect = 'エラー:メールアドレスは不正です。'.'<br />';
|
| 168 | | -
|
| 169 | | - $test->assertNotNull($res);
|
| 170 | | - $test->assertEquals($res->message, $expect);
|
| 171 | | -
|
| 172 | | - $email = "test@076";
|
| 173 | | - $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 174 | | -
|
| 175 | | - $expect = 'エラー:メールアドレスは不正です。'.'<br />';
|
| 176 | | -
|
| 177 | | - $test->assertNotNull($res);
|
| 178 | | - $test->assertEquals($res->message, $expect);
|
| 179 | | - });
|
| 180 | | -
|
| 181 | | - // ユーザーの削除
|
| 182 | | - $users = scandir(ROOT.'/data/user');
|
| 183 | | - $userFile = '';
|
| 184 | | - foreach ($users as $u) {
|
| 185 | | - if (str_contains($u, 'admin1234')) {
|
| 186 | | - $userFile = $u;
|
| 187 | | - break;
|
| 188 | | - }
|
| 189 | | - }
|
| 190 | | - unlink(ROOT.'/data/user/'.$userFile);
|
| 191 | | - rmdir(ROOT.'/public/static/user/admin1234');
|
| 192 | | - });
|
| 272 | +// 一時ディレクトリを削除する
|
| 273 | +$rm = function(string $dir) use (&$rm): void {
|
| 274 | + foreach (scandir($dir) ?: [] as $f) {
|
| 275 | + if ($f === '.' || $f === '..') continue;
|
| 276 | + is_dir("{$dir}/{$f}") ? $rm("{$dir}/{$f}") : @unlink("{$dir}/{$f}");
|
| 193 | 277 | }
|
| 278 | + @rmdir($dir);
|
| 279 | +};
|
| 280 | +$rm($base);
|
| 194 | 281 |
|
| 195 | | - // TODO: CLIからクッキーを設定出来ないから、「Lib\Auth::getUserData(): Return value must be of type stdClass, null returned」って発生する・・・
|
| 196 | | - // $test->describe('ログインとログアウト', function($test): void {
|
| 197 | | - // $user = "admin1234";
|
| 198 | | - // $pass = "testTEST1234!#$%@[]:;";
|
| 199 | | - // $passVerify = "testTEST1234!#$%@[]:;";
|
| 200 | | - // $email = "test@076.co.jp";
|
| 201 | | -
|
| 202 | | - // $auth = new Auth();
|
| 203 | | - // $res = $auth->mkUser($user, $pass, $passVerify, $email);
|
| 204 | | - // unset($auth);
|
| 205 | | -
|
| 206 | | - // $test->it('正しい認証情報でログイン出来るはず', function($test) use ($user, $pass): void {
|
| 207 | | - // $auth = new Auth();
|
| 208 | | - // $res = $auth->setToken($user, $pass);
|
| 209 | | -
|
| 210 | | - // $test->assertTrue($res->isSuccess);
|
| 211 | | - // $test->assertEquals('ログイン成功', $res->message);
|
| 212 | | -
|
| 213 | | - // $auth2 = new Auth();
|
| 214 | | - // $usr = $auth2->getLoggedInUser();
|
| 215 | | -
|
| 216 | | - // $test->assertNotNull($usr);
|
| 217 | | - // $test->assertEquals($user, $usr->username);
|
| 218 | | - // });
|
| 219 | | -
|
| 220 | | - // $test->it('間違ったパスワードでログイン出来ないはず', function($test) use ($user): void {
|
| 221 | | - // $auth = new Auth();
|
| 222 | | - // $res = $auth->setToken($user, 'fuseipassword');
|
| 223 | | -
|
| 224 | | - // $test->assertFalse($res->isSuccess);
|
| 225 | | - // $test->assertEquals('ユーザー名又はパスワードが一致していません', $res->message);
|
| 226 | | - // });
|
| 227 | | -
|
| 228 | | - // $test->it('存在しないユーザーでログイン出来ないはず', function($test) use ($pass): void {
|
| 229 | | - // $auth = new Auth();
|
| 230 | | - // $res = $auth->setToken('fumeiuser', $pass);
|
| 231 | | -
|
| 232 | | - // $test->assertFalse($res->isSuccess);
|
| 233 | | - // $test->assertEquals('ユーザー名又はパスワードが一致していません', $res->message);
|
| 234 | | - // });
|
| 235 | | -
|
| 236 | | - // $test->it('ログアウト出来るはず', function($test) use ($user, $pass): void {
|
| 237 | | - // $auth = new Auth();
|
| 238 | | - // $auth->setToken($user, $pass);
|
| 239 | | -
|
| 240 | | - // $res = $auth->logout();
|
| 241 | | -
|
| 242 | | - // $test->assertTrue($res->isSuccess);
|
| 243 | | - // $test->assertEquals('ログイン成功', $res->message);
|
| 244 | | -
|
| 245 | | - // $auth2 = new Auth();
|
| 246 | | - // $usr = $auth2->getLoggedInUser();
|
| 247 | | -
|
| 248 | | - // $test->assertNull($usr);
|
| 249 | | - // });
|
| 250 | | -
|
| 251 | | - // // ユーザーの削除
|
| 252 | | - // $users = scandir(ROOT.'/data/user');
|
| 253 | | - // $userFile = '';
|
| 254 | | - // foreach ($users as $u) {
|
| 255 | | - // if (str_contains($u, 'admin1234')) {
|
| 256 | | - // $userFile = $u;
|
| 257 | | - // break;
|
| 258 | | - // }
|
| 259 | | - // }
|
| 260 | | - // unlink(ROOT.'/data/user/'.$userFile);
|
| 261 | | - // rmdir(ROOT.'/public/static/user/admin1234');
|
| 262 | | - // });
|
| 263 | | -
|
| 264 | | - $test->printSummary();
|
| 265 | | -} |
| 282 | +$test->printSummary();
|