/** * issue token for password grant type * * 1. authentication client * 2. authentication user * 3. open session & generated access token * @param array request parameter, host * @return boolean */ public function password($request_param, $host) { //1. authentication client \Log::info(' IP PASSWORD : '******'secret'])->key($request_param['key'])->grantname($request_param['grant_type'])->ip($host)->first(); if (!$client) { $this->errors->add('Access', 'Client tidak valid'); } //2. authentication user if (!$this->errors->count()) { if (isset($request_param['email'])) { $logging_user = UserModel::where('email', $request_param['email'])->first(); $validating_password = Hash::check($request_param['password'], $logging_user['password']); } else { $logging_user = UserModel::where('username', $request_param['username'])->first(); $validating_password = Hash::check($request_param['password'], $logging_user['password']); } if (!$validating_password) { $this->errors->add('Access', 'Invalid User'); } else { $logged_user = $logging_user->toArray(); } } //3. open session & generated access token if (!$this->errors->count()) { $tokens['access_token'] = $this->generateAccessToken($client); $tokens['refresh_token'] = $this->generateRefreshToken($client); $tokens['expired_at'] = $this->generateExpiredTime(); $clients = $client->toArray(); unset($clients['key']); unset($clients['secret']); unset($clients['grants']); foreach ($client['grants'] as $key => $value) { $clients['scopes'] = $value['scopes']; } $issue_token = array_merge($tokens, ['client' => $clients]); $open_session = new SessionModel(); $open_session->fill(['tokens' => [$issue_token], 'user' => $logged_user]); if (!$open_session->save()) { $this->errors->add('Access', $open_session->getError()); } else { $tokens['whoami'] = $logged_user; $this->tokens = $tokens; } } if ($this->errors->count()) { return false; } return true; }