Beispiel #1
0
        public static async Task <IHttpResponse> PostAsync(
            [Property(Name = id_token)] string idToken,
            [Property(Name = state)] IRef <Authorization> authorization,
            IAzureApplication application, IProvideUrl urlHelper,
            IHttpRequest request, IInvokeApplication endpoints,
            RedirectResponse onRedirectResponse,
            ServiceUnavailableResponse onNoServiceResponse,
            BadRequestResponse onBadCredentials,
            GeneralConflictResponse onFailure)
        {
            var parameters = new Dictionary <string, string>
            {
                { id_token, idToken },
                { state, authorization.id.ToString("N") },
            };
            var method = EastFive.Azure.Auth.Method.ByMethodName(
                AzureADB2CProvider.IntegrationName, application);

            return(await EastFive.Azure.Auth.Redirection.ProcessRequestAsync(method, parameters,
                                                                             application, request, endpoints, urlHelper,
                                                                             (redirect, accountIdMaybe) => onRedirectResponse(redirect),
                                                                             (why) => onBadCredentials().AddReason($"Bad credentials:{why}"),
                                                                             (why) => onNoServiceResponse().AddReason(why),
                                                                             (why) => onFailure(why)));
        }
 public async static Task <HttpResponseMessage> QueryByActorId(
     [QueryParameter(Name = ActorPropertyName)] Guid actorId,
     Context context, AzureApplication application,
     EastFive.Api.SessionToken security,
     UrlHelper urlHelper,
     ContentResponse onFound,
     MultipartResponseAsync onFounds,
     ReferencedDocumentNotFoundResponse onNotFound,
     UnauthorizedResponse onUnauthorized,
     ServiceUnavailableResponse onServiceUnavailable)
 {
     return(await await context.PasswordCredentials.GetPasswordCredentialByActorAsync(
                actorId,
                security, application,
                (credentials) =>
     {
         var credentialResources = credentials
                                   .Select(
             passwordCredential =>
         {
             var resource = Convert(passwordCredential, urlHelper);
             var response = onFound(resource);
             return response;
         })
                                   .ToArray();
         return onFounds(credentialResources);
     },
                () => onNotFound().AsTask(),
                () => onUnauthorized().AsTask(),
                (why) => onServiceUnavailable().AsTask()));
 }
        public static async Task <IHttpResponse> Get(
            [OptionalQueryParameter(Name = ProvideLoginMock.extraParamState)] IRefOptional <Authorization> authorizationRef,
            [QueryParameter(Name = ProvideLoginMock.extraParamToken)] string token,
            IAzureApplication application, IProvideUrl urlHelper,
            IHttpRequest request,
            RedirectResponse redirectResponse,
            ServiceUnavailableResponse onNoServiceResponse,
            BadRequestResponse onBadCredentials,
            GeneralConflictResponse onFailure)
        {
            var authentication = EastFive.Azure.Auth.Method.ByMethodName(
                ProvideLoginMock.IntegrationName, application);
            var parameters = new Dictionary <string, string>()
            {
                { ProvideLoginMock.extraParamToken, token },
            };

            if (authorizationRef.HasValue)
            {
                parameters.Add(ProvideLoginMock.extraParamState, authorizationRef.id.ToString());
            }

            return(await Redirection.ProcessRequestAsync(authentication,
                                                         parameters,
                                                         application,
                                                         request, urlHelper,
                                                         (redirect) =>
            {
                var response = redirectResponse(redirect);
                return response;
            },
                                                         (why) => onBadCredentials().AddReason($"Bad credentials:{why}"),
                                                         (why) => onNoServiceResponse().AddReason(why),
                                                         (why) => onFailure(why)));
        }
        public static async Task <IHttpResponse> ReplayAsync(
            [QueryId(Name = AuthorizationIdPropertyName)] IRef <Authorization> authorizationRef,
            Api.Azure.AzureApplication application,
            IInvokeApplication endpoints,
            IHttpRequest request,
            ContentTypeResponse <Session> onReplayed,
            NotFoundResponse onNotFound,
            ForbiddenResponse onAuthorizationFailed,
            ServiceUnavailableResponse onServericeUnavailable,
            ForbiddenResponse onInvalidMethod,
            GeneralConflictResponse onFailure)
        {
            return(await await authorizationRef.StorageGetAsync(
                       async (authorization) =>
            {
                var methodRef = authorization.Method;
                return await await Auth.Method.ById(methodRef, application,
                                                    async(method) =>
                {
                    var paramsUpdated = authorization.parameters
                                        .Append(authorizationRef.id.ToString().PairWithKey("state"))
                                        .ToDictionary();

                    //var authorizationRequestManager = application.AuthorizationRequestManager;
                    return await await Redirection.AuthenticationAsync(
                        method,
                        paramsUpdated,
                        application, request,
                        endpoints,
                        request.RequestUri,
                        authorizationRef.Optional(),
                        async(redirect, accountIdMaybe, modifier) =>
                    {
                        var sessionRef = Ref <Session> .SecureRef();
                        var session = new Session()
                        {
                            sessionId = sessionRef,
                            account = accountIdMaybe,
                            authorization = authorizationRef.Optional(),
                        };
                        var responseCreated = await Session.CreateAsync(sessionRef, authorizationRef.Optional(),
                                                                        session,
                                                                        application,
                                                                        (sessionCreated, contentType) =>
                        {
                            var response = onReplayed(sessionCreated, contentType: contentType);
                            response.SetLocation(redirect);
                            return response;
                        },
                                                                        onAlreadyExists: default,
 public static async Task <HttpResponseMessage> DeleteByIdAsync(
     [Property(Name = IdPropertyName)] Guid passwordCredentialId,
     Context context, AzureApplication application,
     EastFive.Api.SessionToken security,
     UrlHelper urlHelper,
     NoContentResponse onDeleted,
     UnauthorizedResponse onUnauthorized,
     NotFoundResponse onNotFound,
     ServiceUnavailableResponse onServiceUnavailable)
 {
     return(await context.PasswordCredentials.DeletePasswordCredentialAsync(passwordCredentialId,
                                                                            security, application,
                                                                            () =>
     {
         var response = onDeleted();
         return response;
     },
                                                                            () => onUnauthorized(),
                                                                            () => onNotFound(),
                                                                            (why) => onServiceUnavailable().AddReason(why)));
 }
Beispiel #6
0
        public static async Task <IHttpResponse> Get(
            //[QueryParameter(Name = ProvideLoginMock.extraParamState)]IRefOptional<Authorization> authorizationRef,
            //[QueryParameter(Name = ProvideLoginMock.extraParamToken)]string token,
            IAzureApplication application, IProvideUrl urlHelper,
            IInvokeApplication endpoints,
            IHttpRequest request,
            RedirectResponse onRedirectResponse,
            ServiceUnavailableResponse onNoServiceResponse,
            BadRequestResponse onBadCredentials,
            GeneralConflictResponse onFailure)
        {
            var parameters = request.RequestUri.ParseQuery();
            var method     = EastFive.Azure.Auth.Method.ByMethodName(
                AzureADB2CProvider.IntegrationName, application);

            return(await EastFive.Azure.Auth.Redirection.ProcessRequestAsync(method, parameters,
                                                                             application, request, endpoints, urlHelper,
                                                                             (redirect, accountIdMaybe) => onRedirectResponse(redirect),
                                                                             (why) => onBadCredentials().AddReason($"Bad credentials:{why}"),
                                                                             (why) => onNoServiceResponse().AddReason(why),
                                                                             (why) => onFailure(why)));
        }
        public async static Task <IHttpResponse> AuthorizeAsync(
            [QueryParameter(Name = "session")]
            IRef <Session> sessionRef,

            [UpdateId(Name = AuthorizationIdPropertyName)]
            IRef <Authorization> authorizationRef,

            [Property(Name = ParametersPropertyName)]
            IDictionary <string, string> parameters,

            Api.Azure.AzureApplication application,
            IInvokeApplication endpoints,
            IHttpRequest request,
            CreatedBodyResponse <Session> onCreated,
            NotFoundResponse onAuthorizationDoesNotExist,
            ForbiddenResponse onAuthorizationFailed,
            ServiceUnavailableResponse onServiceUnavailable,
            ForbiddenResponse onInvalidMethod,
            GeneralConflictResponse onFailure)
        {
            return(await await authorizationRef.StorageGetAsync(
                       (authorization) =>
            {
                return AuthenticateWithSessionAsync(authorizationRef, sessionRef,
                                                    authorization.Method, parameters,
                                                    application, endpoints, request,
                                                    onAuthorized: (sessionCreated, redirect) =>
                {
                    var response = onCreated(sessionCreated, contentType: "application/json");
                    response.SetLocation(redirect);
                    return response;
                },
                                                    onAuthorizationDoesNotExist: () => onAuthorizationDoesNotExist(),
                                                    onServiceUnavailable: (why) => onServiceUnavailable().AddReason(why),
                                                    onInvalidMethod: (why) => onInvalidMethod().AddReason(why),
                                                    onAuthorizationFailed: why => onAuthorizationFailed().AddReason(why));
            },
                       () => onAuthorizationDoesNotExist().AsTask()));
        }
 public static async Task <HttpResponseMessage> QueryByIdAsync(
     [QueryParameter(Name = IdPropertyName)] Guid credentialId,
     Context context, AzureApplication application,
     EastFive.Api.SessionToken security,
     UrlHelper urlHelper,
     ContentResponse onFound,
     NotFoundResponse onNotFound,
     UnauthorizedResponse onUnauthorized,
     ServiceUnavailableResponse onServiceUnavailable)
 {
     return(await context.PasswordCredentials.GetPasswordCredentialAsync(credentialId,
                                                                         security, application,
                                                                         (passwordCredential) =>
     {
         var passwordCred = Convert(passwordCredential, urlHelper);
         var response = onFound(passwordCred);
         return response;
     },
                                                                         () => onNotFound(),
                                                                         () => onUnauthorized(),
                                                                         (why) => onServiceUnavailable().AddReason(why)));
 }
 public static Task <HttpResponseMessage> PutAsync(
     [Property(Name = IdPropertyName)] Guid credentialId,
     [PropertyOptional(Name = TokenPropertyName)] string token,
     [PropertyOptional(Name = ForceChangePropertyName)] bool forceChange,
     [PropertyOptional(Name = LastEmailSentPropertyName)] DateTime?lastEmailSent,
     Context context, AzureApplication application,
     EastFive.Api.SessionToken security,
     NoContentResponse onUpdated,
     NotFoundResponse onNotFound,
     UnauthorizedResponse onUnauthorized,
     ServiceUnavailableResponse onServiceUnavailable,
     GeneralConflictResponse onFailure)
 {
     return(context.PasswordCredentials.UpdatePasswordCredentialAsync(credentialId,
                                                                      token, forceChange, lastEmailSent,
                                                                      security, application,
                                                                      () => onUpdated(),
                                                                      () => onNotFound(),
                                                                      () => onUnauthorized(),
                                                                      () => onServiceUnavailable(),
                                                                      (why) => onFailure($"Update failed:{why}")));
 }
        public static Task <HttpResponseMessage> CreatePasswordCredentialAsync(
            [Property(Name = IdPropertyName)] Guid credentialId,
            [Property(Name = ActorPropertyName)] Guid actorId,
            [PropertyOptional(Name = DisplayNamePropertyName)] string displayName,
            [PropertyOptional(Name = UserIdPropertyName)] string userId,
            [PropertyOptional(Name = TokenPropertyName)] string token,
            [PropertyOptional(Name = IsEmailPropertyName)] bool isEmail,
            [PropertyOptional(Name = ForceChangePropertyName)] bool forceChange,
            [PropertyOptional(Name = LastEmailSentPropertyName)] DateTime?lastEmailSent,
            Context context, AzureApplication application,
            UrlHelper url,
            EastFive.Api.SessionToken security,
            CreatedResponse onCreated,
            AlreadyExistsResponse onAlreadyExists,
            GeneralConflictResponse onUsernameAlreadyInUse,
            GeneralConflictResponse onInsufficentPassword,
            GeneralConflictResponse onUsernameAlreadyMappedToActor,
            UnauthorizedResponse onUnauthorized,
            ServiceUnavailableResponse onServiceUnavailable,
            GeneralConflictResponse onFailure)
        {
            var callbackUrl = url.GetLocation <EastFive.Api.Azure.Credentials.Controllers.OpenIdResponseController>();

            return(context.PasswordCredentials.CreatePasswordCredentialsAsync(
                       credentialId, actorId,
                       displayName, userId, isEmail, token, forceChange,
                       lastEmailSent, callbackUrl,
                       security, application,
                       () => onCreated(),
                       () => onAlreadyExists(),
                       (actorUsingId) => onUsernameAlreadyInUse($"Username already in use with Actor:{actorUsingId}"),
                       () => onInsufficentPassword($"Password is insufficient."),
                       () => onUsernameAlreadyMappedToActor($"Relationship already exists"),
                       () => onUsernameAlreadyMappedToActor($"Login is already in use"),
                       () => onUnauthorized(),
                       () => onServiceUnavailable(),
                       (why) => onFailure(why)));
        }
        public static async Task <HttpResponseMessage> Get(
            AzureApplication application, UrlHelper urlHelper,
            HttpRequestMessage request,
            RedirectResponse onRedirectResponse,
            ServiceUnavailableResponse onNoServiceResponse,
            BadRequestResponse onBadCredentials,
            GeneralConflictResponse onFailure)
        {
            var parameters = request.RequestUri.ParseQuery();

            parameters.Add(CredentialProvider.referrerKey, request.RequestUri.AbsoluteUri);
            var authentication = await EastFive.Azure.Auth.Method.ByMethodName(
                CredentialProvider.IntegrationName, application);

            return(await EastFive.Azure.Auth.Redirection.ProcessRequestAsync(authentication,
                                                                             parameters,
                                                                             application,
                                                                             request, urlHelper,
                                                                             (redirect) => onRedirectResponse(redirect).AddReason("success"),
                                                                             (why) => onBadCredentials().AddReason($"Bad credentials:{why}"),
                                                                             (why) => onNoServiceResponse().AddReason(why),
                                                                             (why) => onFailure(why)));
        }
Beispiel #12
0
        public static async Task <IHttpResponse> PatchAsync(
            IAzureApplication application, IProvideUrl urlHelper,
            IHttpRequest request,
            IInvokeApplication endpoints,
            RedirectResponse onRedirectResponse,
            ServiceUnavailableResponse onNoServiceResponse,
            BadRequestResponse onBadCredentials,
            GeneralConflictResponse onFailure)
        {
            var parameters = request.RequestUri.ParseQuery();

            parameters.Add(CredentialProvider.referrerKey, request.RequestUri.AbsoluteUri);
            var authentication = EastFive.Azure.Auth.Method.ByMethodName(
                CredentialProvider.IntegrationName, application);

            return(await EastFive.Azure.Auth.Redirection.ProcessRequestAsync(authentication,
                                                                             parameters,
                                                                             application,
                                                                             request, endpoints, urlHelper,
                                                                             (redirect, accountIdMaybe) => onRedirectResponse(redirect).AddReason("success"),
                                                                             (why) => onBadCredentials().AddReason($"Bad credentials:{why}"),
                                                                             (why) => onNoServiceResponse().AddReason(why),
                                                                             (why) => onFailure(why)));
        }
        public async static Task <IHttpResponse> CreateAuthorizedAsync(
            [UpdateId(Name = AuthorizationIdPropertyName)] IRef <Authorization> authorizationRef,
            [Property(Name = MethodPropertyName)] IRef <Method> methodRef,
            [Property(Name = ParametersPropertyName)] IDictionary <string, string> parameters,
            [Resource] Authorization authorization,
            Api.Azure.AzureApplication application, IProvideUrl urlHelper,
            IInvokeApplication endpoints,
            IHttpRequest request,
            CreatedResponse onCreated,
            AlreadyExistsResponse onAlreadyExists,
            ForbiddenResponse onAuthorizationFailed,
            ServiceUnavailableResponse onServericeUnavailable,
            ForbiddenResponse onInvalidMethod)
        {
            authorization.accountIdMaybe = default;
            authorization.authorized     = false;
            return(await await Auth.Method.ById(methodRef, application,
                                                (method) =>
            {
                var paramsUpdated = parameters;
                //.Append(
                //    authorizationRef.id.ToString().PairWithKey("state"))
                //.ToDictionary();

                return Redirection.AuthenticationAsync(
                    method,
                    paramsUpdated,
                    application, request, endpoints, request.RequestUri,
                    authorizationRef.Optional(),
                    (redirect, accountIdMaybe, discardModifier) => onCreated(),
                    () => onAuthorizationFailed().AddReason("Authorization was not found"),     // Bad credentials
                    why => onServericeUnavailable().AddReason(why),
                    why => onAuthorizationFailed().AddReason(why));
            },
                                                () => onInvalidMethod().AddReason("The method was not found.").AsTask()));
        }
        public async static Task <IHttpResponse> CreateAuthorizedAsync(
            [WorkflowNewId]
            [QueryParameter(Name = "session")]
            IRef <Session> sessionRef,

            [WorkflowParameterFromVariable(
                 Value = Workflows.PasswordLoginCreateAccount.Variables.Authorization)]
            [UpdateId(Name = AuthorizationIdPropertyName)]
            IRef <Authorization> authorizationRef,

            [WorkflowParameter(Value = "80a7de99-1307-9633-a7b8-ed70578ac6ae")]
            [Property(Name = MethodPropertyName)]
            IRef <Method> methodRef,

            [WorkflowObjectParameter(
                 Key0 = "state", Value0 = "{{InternalAuthState}}",
                 Key1 = "token", Value1 = "{{InternalAuthToken}}")]
            [Property(Name = ParametersPropertyName)]
            IDictionary <string, string> parameters,

            Api.Azure.AzureApplication application,
            IInvokeApplication endpoints,
            IHttpRequest request,
            [WorkflowVariable(Workflows.PasswordLoginCreateAccount.Variables.AccountId, PropertyName = Session.AccountPropertyName)]
            CreatedBodyResponse <Session> onCreated,

            AlreadyExistsResponse onAlreadyExists,
            ForbiddenResponse onAuthorizationFailed,
            ServiceUnavailableResponse onServiceUnavailable,
            ForbiddenResponse onInvalidMethod,
            GeneralConflictResponse onFailure)
        {
            return(await AuthenticateWithSessionAsync(authorizationRef, sessionRef,
                                                      methodRef, parameters,
                                                      application, endpoints, request,
                                                      onAuthorized : (sessionCreated, redirect) =>
            {
                var response = onCreated(sessionCreated, contentType: "application/json");
                response.SetLocation(redirect);
                return response;
            },
                                                      onAuthorizationDoesNotExist : () => onAuthorizationFailed()
                                                      .AddReason("Authorization does not exists"),
                                                      onServiceUnavailable : (why) => onServiceUnavailable().AddReason(why),
                                                      onInvalidMethod : (why) => onInvalidMethod().AddReason(why),
                                                      onAuthorizationFailed : why => onAuthorizationFailed().AddReason(why)));

            //return await await Auth.Method.ById(methodRef, application,
            //    async (method) =>
            //    {
            //        var paramsUpdated = parameters
            //            .Append(
            //                authorizationRef.id.ToString().PairWithKey("state"))
            //            .ToDictionary();
            //        //var authorizationRequestManager = application.AuthorizationRequestManager;
            //        return await await Redirection.AuthenticationAsync(
            //                method,
            //                paramsUpdated,
            //                application, request,
            //                endpoints,
            //                request.RequestUri,
            //                authorizationRef.Optional(),
            //            async (redirect, accountIdMaybe, modifier) =>
            //            {
            //                var session = new Session()
            //                {
            //                    sessionId = sessionRef,
            //                    account = accountIdMaybe,
            //                    authorization = authorizationRef.Optional(),
            //                };
            //                var responseCreated = await Session.CreateAsync(sessionRef, authorizationRef.Optional(),
            //                        session,
            //                        application,
            //                    (sessionCreated, contentType) =>
            //                    {
            //                        var response = onCreated(sessionCreated, contentType: contentType);
            //                        response.SetLocation(redirect);
            //                        return response;
            //                    },
            //                    onAlreadyExists,
            //                    onAuthorizationFailed,
            //                    (why1, why2) => onServericeUnavailable(),
            //                    onFailure);
            //                var modifiedResponse = modifier(responseCreated);
            //                return modifiedResponse;
            //            },
            //            () => onAuthorizationFailed()
            //                .AddReason("Authorization was not found")
            //                .AsTask(), // Bad credentials
            //            why => onServericeUnavailable()
            //                .AddReason(why)
            //                .AsTask(),
            //            why => onAuthorizationFailed()
            //                .AddReason(why)
            //                .AsTask());
            //    },
            //    () => onInvalidMethod().AddReason("The method was not found.").AsTask());
        }