diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b801ee3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/vendor/ +/.idea +/composer.lock diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..71eaaca --- /dev/null +++ b/composer.json @@ -0,0 +1,18 @@ +{ + "name": "vohinc/km-socialite", + "type": "library", + "require": { + "laravel/socialite": "^3.0" + }, + "authors": [ + { + "name": "Casper Lai", + "email": "casper.lai@voh-design.com" + } + ], + "autoload": { + "psr-4": { + "Voh\\KmSocialite\\": "src/" + } + } +} diff --git a/src/KmSocialiteProvider.php b/src/KmSocialiteProvider.php new file mode 100644 index 0000000..c4d7224 --- /dev/null +++ b/src/KmSocialiteProvider.php @@ -0,0 +1,100 @@ +baseUrl = config('services.km.url'); + } + + + /** + * {@inheritdoc} + */ + protected function getAuthUrl($state) + { + return $this->buildAuthUrlFromBase("{$this->baseUrl}/oauth/authorize", $state); + } + + /** + * {@inheritdoc} + */ + protected function getTokenUrl() + { + return "{$this->baseUrl}/oauth/token"; + } + + /** + * {@inheritdoc} + */ + protected function getUserByToken($token) + { + $response = $this->getHttpClient()->post("{$this->baseUrl}/api/user/me", [ + 'headers' => [ + 'Authorization' => "Bearer {$token}", + ], + ]); + + return json_decode($response->getBody(), true); + } + + /** + * {@inheritdoc} + */ + protected function mapUserToObject(array $user) + { + return (new User())->setRaw($user)->map([ + 'id' => $user['id'], + 'name' => $user['name'], + 'email' => $user['email'], + 'job' => $user['job'], + 'unit' => $user['unit'], + 'class_no' => $user['classNo'], + 'seat' => $user['seat'], + 'permission' => $user['permission'], + ]); + } + + /** + * {@inheritdoc} + */ + protected function getTokenFields($code) + { + return array_merge(parent::getTokenFields($code), [ + 'grant_type' => 'authorization_code' + ]); + } +}