ApiTokenKey::handle()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 7

Duplication

Lines 14
Ratio 100 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 7
nc 2
nop 0
dl 14
loc 14
ccs 0
cts 8
cp 0
crap 6
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace App\Support\Console\Commands;
4
5
use Illuminate\Console\Command;
6
7 View Code Duplication
class ApiTokenKey extends Command
8
{
9
    /**
10
     * The name and signature of the console command.
11
     *
12
     * @var string
13
     */
14
    protected $signature = 'api:token-key {--show : Display the key instead of modifying files}';
15
16
    /**
17
     * The console command description.
18
     *
19
     * @var string
20
     */
21
    protected $description = 'Set the api token key';
22
23
    /**
24
     * Execute the console command.
25
     *
26
     * @return mixed
27
     */
28
    public function handle()
29
    {
30
        $key = $this->generateRandomKey();
31
32
        if ($this->option('show')) {
33
            return $this->comment($key);
34
        }
35
36
        $this->setKeyInEnvironmentFile($key);
37
38
        $this->laravel['config']['support.api.token.key'] = $key;
39
40
        $this->info("Api token key [$key] set successfully.");
41
    }
42
43
    /**
44
     * Generate a random key for the api token.
45
     *
46
     * @return string
47
     */
48
    protected function generateRandomKey()
49
    {
50
        return str_random(32);
51
    }
52
53
    /**
54
     * Set the api token key in the environment file.
55
     *
56
     * @param  string  $key
57
     */
58
    protected function setKeyInEnvironmentFile($key)
59
    {
60
        $content = file_get_contents($this->laravel->environmentFilePath());
61
62
        $text = 'API_TOKEN_KEY='.$key;
63
64
        $content = preg_replace('#API_TOKEN_KEY=.*#', $text, $content, -1, $replaceCount);
65
66
        if (0 === $replaceCount) {
67
            $content .= $text.PHP_EOL;
68
        }
69
70
        file_put_contents($this->laravel->environmentFilePath(), $content);
71
    }
72
}
73