public AuthenticationResult GetAuthenticationResult(Uri responseUri, OAuthRequestCode request) { QueryValues queryValues; AuthenticationResult result; if (request is OAuthRequestAuthorizationCode auth) { queryValues = QueryValues.Parse(StringUtils.RemovePrefix(responseUri.Query, "?")); this.EnsureStateEquals(queryValues, request); var accessTokenRequest = new OAuthTokenRequest(); accessTokenRequest.ClientSecret = auth.ClientSecret; accessTokenRequest.Code = queryValues.Single("code"); accessTokenRequest.GrantType = "authorization_code"; accessTokenRequest.RedirectUri = auth.RedirectUri; result = this.GetAuthenticationResult(accessTokenRequest); } else if (request is OAuthRequestTokenCode) { queryValues = QueryValues.Parse(HttpUtility.UrlDecode(StringUtils.RemovePrefix(responseUri.Fragment, "#"))); this.EnsureStateEquals(queryValues, request); result = new AuthenticationResult(queryValues); } else { throw new ArgumentException("Invalid OAuthRequest Type", nameof(request)); } return(result); }
public AuthenticationResult GetAuthenticationResult(OAuthRequestClientCredentials request) { var tokenRequest = new OAuthTokenRequest(); tokenRequest.ClientSecret = request.ClientSecret; tokenRequest.GrantType = "client_credentials"; tokenRequest.Scopes.AddRange(request.Scopes); return(this.GetAuthenticationResult(tokenRequest)); }
public AuthenticationResult GetAuthenticationResult(OAuthTokenRequest request) { var apiRequest = new TwitchAPIRequest(); apiRequest.BaseUrl = "https://id.twitch.tv/oauth2/token"; apiRequest.Method = "POST"; apiRequest.QueryValues.Add("client_id", this.Parent.ClientId); apiRequest.QueryValues.Add("client_secret", request.ClientSecret); apiRequest.QueryValues.Add("code", request.Code); apiRequest.QueryValues.Add("grant_type", request.GrantType); apiRequest.QueryValues.Add("redirect_uri", request.RedirectUri); apiRequest.QueryValues.Add("scope", string.Join(OAuthRequest.ScopeSeparater, request.Scopes)); var jToken = this.Parent.RequestAsJson(apiRequest, "status"); return(new AuthenticationResult(jToken)); }