1<?php
2
3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0.
4// See the LICENCE file in the repository root for full licence text.
5
6declare(strict_types=1);
7
8namespace App\Http\Controllers;
9
10use App\Transformers\LegacyIrcKeyTransformer;
11use Auth;
12use Exception;
13
14class LegacyIrcKeyController extends Controller
15{
16 public function __construct()
17 {
18 $this->middleware('auth');
19 $this->middleware('verify-user');
20 }
21
22 public function destroy()
23 {
24 Auth::user()->legacyIrcKey?->delete();
25
26 return response(null, 204);
27 }
28
29 public function store()
30 {
31 $user = Auth::user();
32
33 priv_check('LegacyIrcKeyStore')->ensureCan();
34
35 $key = $user->legacyIrcKey;
36
37 if ($key === null) {
38 for ($i = 0; $i < 10; $i++) {
39 try {
40 $key = $user->legacyIrcKey()->make([
41 'token' => bin2hex(random_bytes(4)),
42 ]);
43 $key->saveOrExplode();
44 break;
45 } catch (Exception $e) {
46 if (!is_sql_unique_exception($e)) {
47 throw $e;
48 }
49 }
50 }
51 }
52
53 return json_item($key, new LegacyIrcKeyTransformer());
54 }
55}