diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 2940ebf21..62a5ff829 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -2,12 +2,12 @@ namespace App\Http\Controllers; +use Laravel\Socialite\Contracts\Factory as Socialite; +use Laravel\Illuminate\Two\User as SocialiteUser; +use App\User; //use Laravel\Socialite\Contracts\Factory as Socialite; //use Laravel\Socialite\Two\User as SocialiteUser; //use Illuminate\Foundation\Auth\AuthenticatesUsers; -use Socialite; -//use SocialiteUser; - class AuthController extends Controller { @@ -28,8 +28,46 @@ class AuthController extends Controller * @return Response */ public function handleProviderCallback(Socialite $social) { - $user = $social->driver('eveonline')->user(); - Auth::login($user); + $eve_data = $social->driver('eveonline')->user(); + //Get or create the User bound to this login + $user = $this->findOrCreateUser($eve_data); + //Auth the user + auth()->login($user); + + return redirect()->to('/dashboard'); + dd($user); } + + /** + * Check if a user exists in the database, else, create and + * return the user object. + * + * @param \Laravel\Socialite\Two\User $user + */ + private function findOrCreateUser(SociateUser $eve_user): User { + //check if the user already exists in the database + if($existing = User::find($eve_user->character_id)) { + //Check the owner hash and update if necessary + if($existing->character_owner_hash !== $eve_user->character_owner_hash) { + $existing->owner_has = $eve_user->character_owner_hash; + $existing->save(); + } + + return $existing; + } + + return User::forceCreate([ + 'id' => $eve_user->character_id, + 'name' => $eve_user->name, + 'owner_hash' => $eve_user->character_owner_hash, + 'email' => null, + ]); + } + + public function loginUser(User $user): bool { + auth()->login($user, true); + + return true; + } } diff --git a/app/SSOAccount.php b/app/SSOAccount.php new file mode 100644 index 000000000..9b96f6b30 --- /dev/null +++ b/app/SSOAccount.php @@ -0,0 +1,16 @@ +belongsTo(User::class); + } +} diff --git a/app/SSOAccountService.php b/app/SSOAccountService.php new file mode 100644 index 000000000..c614fbd90 --- /dev/null +++ b/app/SSOAccountService.php @@ -0,0 +1,25 @@ +whereProviderUserId($providerUser->getId())->first(); + + if($account) { + return $account->user; + } else { + $account = new SSOAccount([ + 'provider_user_id' => $providerUser->getId(), + 'provider' => 'eveonline', + ]); + + $user = User::whereEmail($providerUser->getCharacterId())->first(); + + + } + } +} \ No newline at end of file diff --git a/app/User.php b/app/User.php index c5bcd7be4..a965c0872 100644 --- a/app/User.php +++ b/app/User.php @@ -16,7 +16,7 @@ class User extends Authenticatable * @var array */ protected $fillable = [ - 'name', 'email', 'password', 'character_id' + 'name', 'email', 'owner_hash', 'character_id', ]; /** diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 377d74c9d..21b40469c 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -17,10 +17,13 @@ class CreateUsersTable extends Migration $table->increments('id'); $table->string('name'); $table->string('character_id'); + $table->string('access_token'); + $table->string('refresh_token'); + $table->integer('expires_in'); + $table->string('owner_has'); $table->string('user_type')->default('Guest'); - $table->string('email')->unique(); + $table->string('email')->unique()->nullable(); $table->timestamp('email_verified_at')->nullable(); - $table->string('password'); $table->rememberToken(); $table->timestamps(); });