コード例 #1
0
        public static async Task <TResult> CreateByMethodAndKeyAsync <TResult>(IRef <XIntegration> integrationRef,
                                                                               IRef <Authorization> authorizationRef, IRef <Method> methodRef,
                                                                               Guid accountId, IDictionary <string, string> parameters,
                                                                               Func <XIntegration, Authorization, TResult> onCreated,
                                                                               Func <TResult> onIntegrationAlreadyExists,
                                                                               Func <TResult> onAuthorizationAlreadyExists,
                                                                               Func <string, TResult> onFailure)
        {
            var authorization = new Authorization
            {
                authorizationRef = authorizationRef,
                parameters       = parameters,
                Method           = methodRef,
                authorized       = true,
                accountIdMaybe   = accountId,
            };

            return(await await authorization.StorageCreateAsync <Authorization, Task <TResult> >(
                       (discardId) =>
            {
                var integration = new XIntegration
                {
                    integrationRef = integrationRef,
                    accountId = accountId,
                    authorization = authorizationRef.Optional(),
                    Method = methodRef,
                };
                return CreateWithAuthorization(integration, authorization,
                                               () => onCreated(integration, authorization),
                                               () => onIntegrationAlreadyExists(),
                                               (why) => onFailure(why));
            },
                       () => onAuthorizationAlreadyExists().AsTask()));
        }
コード例 #2
0
 public static Task <TResult> CreateWithAuthorization <TResult>(
     XIntegration integration, Authorization authorization,
     Func <TResult> onCreated,
     Func <TResult> onAlreadyExists,
     Func <string, TResult> onFailure)
 {
     integration.Method = authorization.Method; // method is used in the .mappingId
     return(integration
            .StorageCreateAsync(
                discard => onCreated(),
                () => onAlreadyExists(),
                onModificationFailures:
                StorageConstraintUniqueAttribute.ModificationFailure(
                    (XIntegration x) => x.authorization,
                    () =>
     {
         // TODO: Check if mapping is to this integration and reply already created.
         return onFailure("Authorization is already mapped to another integration.");
     }).AsArray()));
 }
コード例 #3
0
        public async static Task <IHttpResponse> CreateAsync(
            [Property(Name = AccountPropertyName)] Guid accountId,
            [PropertyOptional(Name = AuthorizationPropertyName)] IRefOptional <Authorization> authorizationRefMaybe,
            [Resource] XIntegration integration,
            IAuthApplication application, EastFive.Api.SessionToken security,
            CreatedResponse onCreated,
            AlreadyExistsResponse onAlreadyExists,
            ForbiddenResponse onForbidden,
            ReferencedDocumentDoesNotExistsResponse <Authorization> onAuthorizationDoesNotExist,
            GeneralConflictResponse onFailure)
        {
            if (!await application.CanAdministerCredentialAsync(accountId, security))
            {
                return(onForbidden());
            }

            return(await await authorizationRefMaybe.StorageGetAsync(
                       async authorization =>
            {
                if (!await application.ShouldAuthorizeIntegrationAsync(integration, authorization))
                {
                    return onFailure("Authorization is not accessable to this account.");
                }

                return await CreateWithAuthorization(integration, authorization,
                                                     () => onCreated(),
                                                     () => onAlreadyExists(),
                                                     (why) => onFailure(why));
            },
                       async() =>
            {
                if (authorizationRefMaybe.HasValue)
                {
                    return onAuthorizationDoesNotExist();
                }
                return await integration.StorageCreateAsync(
                    (discard) => onCreated(),
                    () => onAlreadyExists());
            }));
        }