|  | @@ -0,0 +1,114 @@
 | 
	
		
			
			|  | 1 | +<?php
 | 
	
		
			
			|  | 2 | +
 | 
	
		
			
			|  | 3 | +namespace App\Http\Controllers\Api;
 | 
	
		
			
			|  | 4 | +
 | 
	
		
			
			|  | 5 | +use App\Http\Controllers\Api\ApiController;
 | 
	
		
			
			|  | 6 | +use App\Http\Services\Web\SeminarSignUpService;
 | 
	
		
			
			|  | 7 | +use App\Http\Requests\Api\SeminarSignUp\StoreRequest;
 | 
	
		
			
			|  | 8 | +
 | 
	
		
			
			|  | 9 | +use Log;
 | 
	
		
			
			|  | 10 | +
 | 
	
		
			
			|  | 11 | +class SeminarSignUpController extends ApiController
 | 
	
		
			
			|  | 12 | +{
 | 
	
		
			
			|  | 13 | +    
 | 
	
		
			
			|  | 14 | +    private $seminarSignUpSv;
 | 
	
		
			
			|  | 15 | +    
 | 
	
		
			
			|  | 16 | +    public function __construct()
 | 
	
		
			
			|  | 17 | +    {
 | 
	
		
			
			|  | 18 | +        $this->seminarSignUpSv = new SeminarSignUpService();
 | 
	
		
			
			|  | 19 | +
 | 
	
		
			
			|  | 20 | +    }
 | 
	
		
			
			|  | 21 | +
 | 
	
		
			
			|  | 22 | +    // save data to db
 | 
	
		
			
			|  | 23 | +    public function insertData(StoreRequest $request)
 | 
	
		
			
			|  | 24 | +    {
 | 
	
		
			
			|  | 25 | +        $name = $this->safeEncrypt($request->input('name', 'name'), 'arm');
 | 
	
		
			
			|  | 26 | +        $email = $this->safeEncrypt($request->input('email', 'email'), 'arm');
 | 
	
		
			
			|  | 27 | +        $mobile = $this->safeEncrypt($request->input('mobile', 'mobile'), 'arm');
 | 
	
		
			
			|  | 28 | +        $trackId = $request->input('trackId', 'T0052');
 | 
	
		
			
			|  | 29 | +        
 | 
	
		
			
			|  | 30 | +        $overOrNot = $this->seminarSignUpSv->overLimitOrNot($trackId);
 | 
	
		
			
			|  | 31 | +        if ($overOrNot) {
 | 
	
		
			
			|  | 32 | +
 | 
	
		
			
			|  | 33 | +            $this->seminarSignUpSv->insertData($name, $email, $mobile, $trackId);
 | 
	
		
			
			|  | 34 | +            $res = '報名成功';
 | 
	
		
			
			|  | 35 | +        } else {
 | 
	
		
			
			|  | 36 | +
 | 
	
		
			
			|  | 37 | +            $res = '已達報名上限';
 | 
	
		
			
			|  | 38 | +        }
 | 
	
		
			
			|  | 39 | +        $data = [
 | 
	
		
			
			|  | 40 | +            'res' => $res,
 | 
	
		
			
			|  | 41 | +        ];
 | 
	
		
			
			|  | 42 | +
 | 
	
		
			
			|  | 43 | +        return $this->apiResponse($data);
 | 
	
		
			
			|  | 44 | +    }
 | 
	
		
			
			|  | 45 | +
 | 
	
		
			
			|  | 46 | +    public function getData()
 | 
	
		
			
			|  | 47 | +    {
 | 
	
		
			
			|  | 48 | +        
 | 
	
		
			
			|  | 49 | +        $Data = $this->seminarSignUpSv->getData();
 | 
	
		
			
			|  | 50 | +        
 | 
	
		
			
			|  | 51 | +        $data = [
 | 
	
		
			
			|  | 52 | +            'list' => $Data
 | 
	
		
			
			|  | 53 | +        ];
 | 
	
		
			
			|  | 54 | +        
 | 
	
		
			
			|  | 55 | +        return $this->apiResponse($data);
 | 
	
		
			
			|  | 56 | +    }
 | 
	
		
			
			|  | 57 | +
 | 
	
		
			
			|  | 58 | +    /**
 | 
	
		
			
			|  | 59 | +     * 參數加解密模組: 加密部分,建議使用環境變數中的 secret key 作加解密種子
 | 
	
		
			
			|  | 60 | +     */
 | 
	
		
			
			|  | 61 | +    public function safeEncrypt(string $message, string $skey): string
 | 
	
		
			
			|  | 62 | +    {
 | 
	
		
			
			|  | 63 | +        // if (mb_strlen($key, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) {
 | 
	
		
			
			|  | 64 | +        //     throw new RangeException('Key is not the correct size (must be 32 bytes).');
 | 
	
		
			
			|  | 65 | +        // }
 | 
	
		
			
			|  | 66 | +        // $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
 | 
	
		
			
			|  | 67 | +        
 | 
	
		
			
			|  | 68 | +        // $cipher = base64_encode(
 | 
	
		
			
			|  | 69 | +        //     $nonce .
 | 
	
		
			
			|  | 70 | +        //     sodium_crypto_secretbox(
 | 
	
		
			
			|  | 71 | +        //         $message,
 | 
	
		
			
			|  | 72 | +        //         $nonce,
 | 
	
		
			
			|  | 73 | +        //         $key
 | 
	
		
			
			|  | 74 | +        //     )
 | 
	
		
			
			|  | 75 | +        // );
 | 
	
		
			
			|  | 76 | +        // sodium_memzero($message);
 | 
	
		
			
			|  | 77 | +        // sodium_memzero($key);
 | 
	
		
			
			|  | 78 | +        // return $cipher;
 | 
	
		
			
			|  | 79 | +        $strArr = str_split(base64_encode($message));
 | 
	
		
			
			|  | 80 | +        $strCount = count($strArr);
 | 
	
		
			
			|  | 81 | +        foreach (str_split($skey) as $key => $value)
 | 
	
		
			
			|  | 82 | +        $key < $strCount && $strArr[$key].=$value;
 | 
	
		
			
			|  | 83 | +        return str_replace(array('=', ' ', '/'), array('O0O0O', 'o000o', 'oo00o'), join('', $strArr));
 | 
	
		
			
			|  | 84 | +    }
 | 
	
		
			
			|  | 85 | +    
 | 
	
		
			
			|  | 86 | +    /**
 | 
	
		
			
			|  | 87 | +     * 參數加解密模組: 解密部分,建議使用環境變數中的 secret key 作加解密種子
 | 
	
		
			
			|  | 88 | +     */
 | 
	
		
			
			|  | 89 | +    public function safeDecrypt(string $encrypted, string $skey): string
 | 
	
		
			
			|  | 90 | +    {
 | 
	
		
			
			|  | 91 | +        // $decoded = base64_decode($encrypted);
 | 
	
		
			
			|  | 92 | +        // $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
 | 
	
		
			
			|  | 93 | +        // $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');
 | 
	
		
			
			|  | 94 | +        
 | 
	
		
			
			|  | 95 | +        // $plain = sodium_crypto_secretbox_open(
 | 
	
		
			
			|  | 96 | +        //     $ciphertext,
 | 
	
		
			
			|  | 97 | +        //     $nonce,
 | 
	
		
			
			|  | 98 | +        //     $key
 | 
	
		
			
			|  | 99 | +        // );
 | 
	
		
			
			|  | 100 | +        // if (!is_string($plain)) {
 | 
	
		
			
			|  | 101 | +        //     throw new Exception('Invalid MAC');
 | 
	
		
			
			|  | 102 | +        // }
 | 
	
		
			
			|  | 103 | +        // sodium_memzero($ciphertext);
 | 
	
		
			
			|  | 104 | +        // sodium_memzero($key);
 | 
	
		
			
			|  | 105 | +        
 | 
	
		
			
			|  | 106 | +        // return $plain;
 | 
	
		
			
			|  | 107 | +        $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', ' ', '/'), $encrypted), 2);
 | 
	
		
			
			|  | 108 | +        $strCount = count($strArr);
 | 
	
		
			
			|  | 109 | +        foreach (str_split($skey) as $key => $value)
 | 
	
		
			
			|  | 110 | +        $key <= $strCount && isset($strArr[$key]) && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
 | 
	
		
			
			|  | 111 | +        return base64_decode(join('', $strArr));
 | 
	
		
			
			|  | 112 | +    }
 | 
	
		
			
			|  | 113 | +    
 | 
	
		
			
			|  | 114 | +}
 |