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 }); }
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); }
internal async Task <string> SetPreFillData <T>(T preFillData, int formId) { PreFillMeta preFillMeta = await GetPreFillMeta(formId); return(await PutPreFillData <T>(preFillData, preFillMeta)); }