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);
        }
Exemplo n.º 2
0
 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);
 }