public async Task StoreAuthTemporary(string userId, AuthTemporary authTemp) { var json = JsonSerializer.Serialize(authTemp, new JsonSerializerOptions().Also(j => { j.Converters.Add(new FirestoreDocumentConverter <AuthTemporary>()); })); var content = new StringContent(json, Encoding.UTF8, "application/json"); await _client.PatchAsync($"{AuthTempKey}/{userId}", content).ConfigureAwait(false); }
public string GetAuthorizeRequestURL(AuthTemporary authTemp) => new System.UriBuilder("https://access.line.me/oauth2/v2.1/authorize") { Query = System.Web.HttpUtility.ParseQueryString(String.Empty).Also(v => { v.Add("response_type", "code"); v.Add("client_id", _lineConfig.LineClientId); v.Add("redirect_uri", _lineConfig.LineRedirectUrl); v.Add("state", authTemp.State); v.Add("scope", String.Join(" ", new[] { "profile", "openid" })); v.Add("nonce", authTemp.Nonce); }).ToString() }.Uri.ToString().Replace("+", "%20");
public async Task <IActionResult> GenerateAuthorizeRequestUrlHandler( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ILogger log) { log.LogInformation("Start generating authorize request for line."); return(await( from token in ParseAuthorizationToken(req) let authTemp = AuthTemporary.GenerateRandomAuthTemporary() from _ in TryAsync(() => _authTempClient.StoreAuthTemporary(token.Uid, authTemp).ToUnit()) .ToEither(e => e.Exception.IfNone(new Exception(e.Message))) let url = _lineService.GetAuthorizeRequestURL(authTemp) select url ).Case.ConfigureAwait(false) switch { RightCase <Exception, string>(var t) => new OkObjectResult(new { Url = t }), // Todo: log exception _ => new BadRequestObjectResult("error occured, please see logs"), });
public async Task StoreAuthTemporary(string userId, AuthTemporary authTemp) { var doc = _firestoreDb.Document($"{AuthTempKey}/{userId}"); await doc.SetAsync(authTemp); }