Example #1
0
        public async Task <SendMessageResult> ApplyLeaveAsync(CreateLeaveContract leave)
        {
            // todo: why it's not clear from CreateLeaveContract
            // that we need to use DateTimeZoneHandling.Utc?
            var idToken = await authHelper.GetIdTokenAsync();

            var leaveJson = JsonConvert.SerializeObject(leave, new JsonSerializerSettings {
                DateTimeZoneHandling = DateTimeZoneHandling.Utc
            });

            return(await backchannel.PostAsync("leaves/", x => x
                                               .WithBearerToken(idToken)
                                               .WithJsonContent(leaveJson)
                                               ));
        }
Example #2
0
        public async Task <IActionResult> Create(DateTime start, DateTime end)
        {
            var leave = new CreateLeaveContract {
                Start = ConvertToUtc(start),
                End   = ConvertToUtc(end)
            };

            var applyLeaveResult = await apiClient.ApplyLeaveAsync(leave);

            if (applyLeaveResult.Response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                return(BadRequest());
            }

            return(RedirectToAction(nameof(Index)));
        }
Example #3
0
        public async Task <IActionResult> Create([FromForm] CreateLeaveContract leave)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            leave.Start = ConvertToUtc(leave.Start);
            leave.End   = ConvertToUtc(leave.End);

            var apiResult = await apiClient.ApplyLeaveAsync(leave);

            if (apiResult.Response.StatusCode == HttpStatusCode.Forbidden)
            {
                var returnUrl = Url.Action(
                    action: nameof(Create),
                    values: new {
                    start = leave.Start.ToString("O"),
                    end   = leave.End.ToString("O")
                }
                    );

                var redirectUrl = Url.Action(nameof(AcceptAccessCode), null, null, Request.Scheme);

                var authResult = await HttpContext.AuthenticateAsync();

                if (!authResult.Succeeded)
                {
                    return(BadRequest("Failed to apply a leave"));
                }

                var authProps = authResult.Properties;
                authProps.Items.Add("returnUrl", returnUrl);
                var state        = authHelper.ProtectState(authProps);
                var challengeUrl = googleOAuthHelper.BuildChallengeUrl(redirectUrl, state);

                return(Redirect(challengeUrl));
            }

            return(RedirectToAction(nameof(Index)));
        }