SocialiteController.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Configuration;
  5. use App\Models\DiscordUser;
  6. use Illuminate\Support\Facades\Auth;
  7. use Illuminate\Support\Facades\Http;
  8. use Laravel\Socialite\Facades\Socialite;
  9. class SocialiteController extends Controller
  10. {
  11. public function redirect()
  12. {
  13. return Socialite::driver('discord')
  14. ->scopes(['guilds.join'])
  15. ->redirect();
  16. }
  17. public function callback()
  18. {
  19. if (Auth::guest()) {
  20. return abort(500);
  21. }
  22. $discord = Socialite::driver('discord')->user();
  23. $discordUser = DiscordUser::find($discord->id);
  24. $guildId = env('DISCORD_GUILD_ID', null);
  25. $botToken = env('DISCORD_BOT_TOKEN', null);
  26. //force user into discord server
  27. //TODO Add event on failure, to notify ppl involved
  28. if (!empty($guildId) && !empty($botToken)) {
  29. $response = Http::withHeaders(
  30. [
  31. 'Authorization' => 'Bot ' . $botToken,
  32. 'Content-Type' => 'application/json',
  33. ]
  34. )->put("https://discord.com/api/guilds/{$guildId}/members/{$discord->id}",
  35. ['access_token' => $discord->token]);
  36. }
  37. if (is_null($discordUser)) {
  38. //create discord user in db
  39. DiscordUser::create(array_merge($discord->user, ['user_id' => Auth::user()->id]));
  40. //update user
  41. Auth::user()->increment('credits' , Configuration::getValueByKey('CREDITS_REWARD_AFTER_VERIFY_DISCORD'));
  42. Auth::user()->increment('server_limit' , Configuration::getValueByKey('SERVER_LIMIT_REWARD_AFTER_VERIFY_DISCORD'));
  43. Auth::user()->update(['discord_verified_at' => now()]);
  44. } else {
  45. $discordUser->update($discord->user);
  46. }
  47. return redirect()->route('profile.index')->with(
  48. 'success',
  49. 'Discord account linked!'
  50. );
  51. }
  52. }