Ejemplo n.º 1
0
        public static async Task <IHttpResponse> DeleteAsync(
            [UpdateId(Name = AuthorizationIdPropertyName)] IRef <Authorization> authorizationRef,
            IProvideUrl urlHelper, AzureApplication application,
            NoContentResponse onLogoutComplete,
            AcceptedBodyResponse onExternalSessionActive,
            NotFoundResponse onNotFound,
            GeneralFailureResponse onFailure)
        {
            return(await authorizationRef.StorageUpdateAsync(
                       async (authorizationToDelete, updateAsync) =>
            {
                authorizationToDelete.deleted = DateTime.UtcNow;
                if (!authorizationToDelete.authorized)
                {
                    return onLogoutComplete().AddReason("Deleted");
                }

                var locationLogout = await await Auth.Method.ById(authorizationToDelete.Method, application,
                                                                  (authentication) =>
                {
                    return authentication.GetLogoutUrlAsync(
                        application, urlHelper, authorizationRef.id);
                },
                                                                  () => default(Uri).AsTask());
                authorizationToDelete.LocationLogout = locationLogout;
                await updateAsync(authorizationToDelete);

                bool NoRedirectRequired()
                {
                    if (locationLogout.IsDefaultOrNull())
                    {
                        return true;
                    }
                    if (!locationLogout.IsAbsoluteUri)
                    {
                        return true;
                    }
                    if (locationLogout.AbsoluteUri.IsNullOrWhiteSpace())
                    {
                        return true;
                    }
                    return false;
                }

                if (NoRedirectRequired())
                {
                    return onLogoutComplete().AddReason("Logout Complete");
                }

                return onExternalSessionActive(authorizationToDelete, "application/json")
                .AddReason($"External session removal required:{locationLogout.AbsoluteUri}");
            },
                       () => onNotFound()));
        }
Ejemplo n.º 2
0
        public override Task <IHttpResponse> InstigateInternal(IApplication httpApp,
                                                               IHttpRequest request, ParameterInfo parameterInfo,
                                                               Func <object, Task <IHttpResponse> > onSuccess)
        {
            AcceptedBodyResponse responseDelegate =
                (obj, contentType) =>
            {
                var response = request.CreateResponse(HttpStatusCode.Accepted, obj);
                if (!contentType.IsNullOrWhiteSpace())
                {
                    response.SetContentType(contentType);
                }
                return(UpdateResponse(parameterInfo, httpApp, request, response));
            };

            return(onSuccess(responseDelegate));
        }