예제 #1
0
 public static int CreateEmail(string bodyUrl, string emailBody,
                               string from, string to, string cc, string bcc,
                               int activityId, int tenantId, int eSpaceId, string emailDefSSKey, bool storeContent,
                               List <String> headers, List <EmailAttachment> attachments, string realHostname)
 {
     return(CreateEmail(bodyUrl, string.Empty, emailBody, from, to, cc, bcc,
                        activityId, tenantId, eSpaceId, emailDefSSKey, storeContent, headers,
                        attachments, realHostname, DeploymentZoneResolution.ByModuleKey(AppInfo.GetAppInfo().eSpaceUIDAsKey).Address));
 }
        protected HttpWebRequest BuildServiceAPIMethodRequest(HeContext context, string sapimName, object inputs)
        {
            var    zoneSettings     = DeploymentZoneResolution.ByModuleKey(ProducerModuleKey);
            var    securityProtocol = zoneSettings.EnableHttps ? "https" : "http";
            var    sapimEndpoint    = $"{securityProtocol}://{zoneSettings.Address}/{ProducerModuleName}/serviceapi/{UrlEncode(sapimName)}";
            string httpMethod       = "POST";
            var    headers          = new Dictionary <string, string>();

            headers.Add("User-Agent", "OutSystemsPlatform");
            headers.Add("Content-Type", "application/json");
            headers.Add("Content-Language", context.CurrentLocale);

            var requestPayload = new CoreServicesApiController.Payload.RequestPayload();

            requestPayload.RequestKey      = RuntimePlatformUtils.GetRequestTracer()?.RequestKey ?? Guid.NewGuid().ToString();
            requestPayload.InputParameters = JObject.FromObject(inputs);
            string payloadString = JsonConvert.SerializeObject(requestPayload, Formatting.None);

            var stringToken = SecurityTokenAPI.GenerateJWTTokenString(
                settingsProvider: RuntimeSettingsProvider.Instance,
                consumerModuleKey: ObjectKeyUtils.DatabaseValue(ConsumerModuleKey),
                producerModuleKey: ObjectKeyUtils.DatabaseValue(ProducerModuleKey),
                userId: context.Session.UserId,
                tenantId: context.Session.TenantId,
                requestHash: SecurityTokenAPI.GeneratePayloadHash(RuntimeSettingsProvider.Instance, payloadString),
                requestLifetime: RuntimePlatformSettings.ServiceAPIs.RequestLifetime.GetValue()
                );

            headers.Add(AuthorizationHeaderKey, AuthorizationTokenType + stringToken);

            var request = (HttpWebRequest)HttpWebRequest.Create(sapimEndpoint);

            request.Method = httpMethod;
            // set the timeout for the request
            request.Timeout = DefaultTimeoutInSeconds * 1000;

            // set headers in request
            foreach (var header in headers.Keys)
            {
                SetRequestHeader(request, header, headers[header]);
            }

            // set request body
            using (Stream requestStream = request.GetRequestStream()) {
                var requestBody = Encoding.UTF8.GetBytes(payloadString);
                requestStream.Write(requestBody, 0, requestBody.Length);
            }

            return(request);
        }