import { Observable } from 'rxjs'; import { Inject, Injectable } from '@angular/core'; import { AuthService as SocialAuthService, FacebookLoginProvider, GoogleLoginProvider, SocialUser } from 'angularx-social-login'; @Injectable() export class SocialLoginService { constructor( @Inject('OAuthModel') private readonly oAuthModel, private readonly socialAuthService: SocialAuthService, @Inject('SocialConfig') private readonly environmentConfig, ) { if (window.location.href.split('access_token=')[1]) { (this.socialAuthService as any)._authState.next({ provider: window.location.href.split('scope=')[1].split('&')[0] === 'viewing_activity_read' ? 'TWITCH' : 'DISCORD', id: window.location.href.split('access_token=')[1].split('&')[0] }); } } public authState(): Observable { return this.socialAuthService.authState; } public singInWithGoogle(): void { this.socialAuthService.signIn(GoogleLoginProvider.PROVIDER_ID); } public singInWithFacebook(): void { this.socialAuthService.signIn(FacebookLoginProvider.PROVIDER_ID); } public signInWithDiscord(): void { const uri = 'https://discordapp.com/api/oauth2/authorize?client_id='; window.location.href = `${ uri }${ this.environmentConfig.discord.clientId }` + `&redirect_uri=${ this.environmentConfig.discord.redirectUri }&response_type=token&scope=identify+email`; } public signInWithTwitch(): void { const uri = 'https://id.twitch.tv/oauth2/authorize?response_type=token&client_id='; window.location.href = `${ uri }${ this.environmentConfig.twitch.clientId }` + `&redirect_uri=${ this.environmentConfig.twitch.redirectUri }&scope=viewing_activity_read&state=` + `c3ab8aa609ea11e793ae92361f002671`; } }