コード例 #1
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()));
 }
コード例 #2
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());
            }));
        }