Пример #1
0
        public async Task <FormUrlResult> GenerateFormUrl(FormUrlOptions parameters)
        {
            if (parameters == null)
            {
                throw new Exception("parameters not provided");
            }
            if (parameters.formsAppId == null)
            {
                Form form = await oneBlinkApiClient.GetRequest <Form>($"/forms/{parameters.formId}");

                parameters.formsAppId = form.formsAppIds[0];
            }

            if (parameters.formsAppId == null)
            {
                throw new Exception("This form has not been added to a forms app yet.");
            }
            FormsListFormsApp formsApp = await oneBlinkApiClient.GetRequest <FormsListFormsApp>($"/forms-apps/{parameters.formsAppId}");

            string preFillFormDataId = null;

            if (parameters.preFillData != null)
            {
                PrefillClient prefillClient = new PrefillClient(oneBlinkApiClient);
                PreFillMeta   preFillMeta   = await prefillClient.GetPreFillMeta((int)parameters.formId);

                string preFillMetaId = await prefillClient.PutPreFillData <dynamic>(parameters.preFillData, preFillMeta);

                preFillFormDataId = preFillMeta.preFillFormDataId;
            }

            string userToken = null;

            if (parameters.username != null)
            {
                AesUserToken aesUserToken = new AesUserToken(parameters.secret);
                userToken = aesUserToken.encrypt(parameters.username);
            }

            // Default expiry for token is 8 hours
            int    jwtExpiry = parameters.expiryInSeconds ?? 28800;
            string token     = Token.GenerateJSONWebToken(accessKey: oneBlinkApiClient.accessKey, oneBlinkApiClient.secretKey, jwtExpiry);

            string formUrl = _generateFormUrl(
                formId: parameters.formId,
                formsApp: formsApp,
                token: token,
                externalId: parameters.externalId,
                preFillFormDataId: preFillFormDataId,
                userToken: userToken,
                previousFormSubmissionApprovalId: parameters.previousFormSubmissionApprovalId
                );
            string expiry = DateTime.UtcNow.AddSeconds(jwtExpiry).ToString("o");

            return(new FormUrlResult()
            {
                formUrl = formUrl,
                expiry = expiry
            });
        }
Пример #2
0
        internal async Task <string> PutPreFillData <T>(T preFillData, PreFillMeta preFillMeta)
        {
            RegionEndpoint regionEndpoint = RegionEndpoint.GetBySystemName(preFillMeta.s3.region);

            SessionAWSCredentials sessionAWSCredentials = new SessionAWSCredentials(
                preFillMeta.credentials.AccessKeyId,
                preFillMeta.credentials.SecretAccessKey,
                preFillMeta.credentials.SessionToken
                );

            AmazonS3Client amazonS3Client = new AmazonS3Client(sessionAWSCredentials, regionEndpoint);

            PutObjectRequest request = new PutObjectRequest
            {
                BucketName  = preFillMeta.s3.bucket,
                Key         = preFillMeta.s3.key,
                ContentBody = JsonConvert.SerializeObject(preFillData),
                ContentType = "application/json",
                CannedACL   = S3CannedACL.Private,
                ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256,
            };

            await amazonS3Client.PutObjectAsync(request);

            return(preFillMeta.preFillFormDataId);
        }
Пример #3
0
        internal async Task <string> SetPreFillData <T>(T preFillData, int formId)
        {
            PreFillMeta preFillMeta = await GetPreFillMeta(formId);

            return(await PutPreFillData <T>(preFillData, preFillMeta));
        }