generateBearerToken(); }); } public function generateApiToken() { $this->api_token = hash('sha256', Str::random(80)); $this->api_token_date = now(); return $this->api_token; } public function generateBearerToken() { $this->bearer_token = hash('sha256', Str::random(80)); $this->bearer_token_date = now(); return $this->bearer_token; } /** * Undocumented function * * @param string $apiToken * @return boolean */ public static function incrementStat(string $apiToken): bool { try { $service = self::getFromApiToken($apiToken); $serviceStat = ServiceStat::firstOrNew(['date' => date('Y-m-d')]); $serviceStat->nb_calls += 1; $serviceStat->service()->associate($service); $serviceStat->brand()->associate($service->brand); $serviceStat->saveOrFail(); return true; } catch (ModelNotFoundException $e) { return false; } } /** * Get Service from apiToken with its brand * * @param string $apiToken * @return \App\Models\Service|null * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public static function getFromApiToken(string $apiToken) { return static::where('api_token', $apiToken)->with('brand')->firstOrFail(); } /** * Get Service from bearerToken with its brand * * @param string $bearerToken * @return \App\Models\Service|null * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public static function getFromBearerToken(string $bearerToken) { return static::where('bearer_token', $bearerToken)->with('brand')->firstOrFail(); } /** * Authenticate from a token string * * @param array $guards * @param string $apiToken * @return void */ public function authenticate(array $guards, string $apiToken) { if ($this->api_token !== $apiToken) { throw new AuthenticationException('Unauthenticated.', $guards); } if ((abs(strtotime($this->api_token_date) - time()) * 60) > (config('api.tokenTimeout') * 60)) { throw new AuthenticationException('Unauthenticated.', $guards); } } /** * Brand BelongsTo relation * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function brand() { return $this->belongsTo(Brand::class); } /** * ServiceStat hasMany relation * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function servicesStats() { return $this->hasMany(ServiceStat::class); } }