public static StartPlanEnvelope FromYaml(string yaml, bool isEncoded = false)
        {
            if (isEncoded)
            {
                yaml = CryptoHelpers.Decode(yaml);
            }

            return(YamlHelpers.Deserialize <StartPlanEnvelope>(yaml, ignoreUnmatchedProperties: false));
        }
        public static StartPlanEnvelope FromXml(string xml, bool isEncoded = false)
        {
            if (isEncoded)
            {
                xml = CryptoHelpers.Decode(xml);
            }

            return(XmlHelpers.Deserialize <StartPlanEnvelope>(xml));
        }
        public void StartPlanAsync(long planInstanceId, bool dryRun, [FromBody] string planString)
        {
            Uri uri = this.Url.Request.RequestUri;

            planString = CryptoHelpers.Decode(planString);
            Plan plan = Plan.FromYaml(new StringReader(planString));

            string context = GetContext(nameof(StartPlanAsync),
                                        nameof(plan), plan.Name, nameof(dryRun), dryRun, nameof(planInstanceId), planInstanceId, "QueryString", uri.Query);

            Impersonator runAsUser = null;

            if (SynapseServer.UseImpersonation(User?.Identity))
            {
                if (Request?.Headers?.Authorization?.Scheme?.ToLower() == "basic")
                {
                    runAsUser = new Impersonator(Request.Headers.Authorization);
                }
                else
                {
                    runAsUser = new Impersonator((WindowsIdentity)User.Identity);
                }
                runAsUser.Start(SynapseServer.Logger);
            }

            try
            {
                SynapseServer.Logger.Debug(context);
                plan.InstanceId = planInstanceId;

                ValidatePlanSignature(plan);

                Dictionary <string, string> dynamicParameters = uri.ParseQueryString();
                if (dynamicParameters.ContainsKey(nameof(dryRun)))
                {
                    dynamicParameters.Remove(nameof(dryRun));
                }
                PlanRuntimePod p = new PlanRuntimePod(plan, dryRun, dynamicParameters, plan.InstanceId, this.Url.Request.Headers.Referrer, this.Request?.Headers?.Authorization);
                _scheduler.StartPlan(p);
            }
            catch (Exception ex)
            {
                SynapseServer.Logger.Error(
                    Utilities.UnwindException(context, ex, asSingleLine: true));
                throw;
            }
            finally
            {
                runAsUser?.Stop(SynapseServer.Logger);
            }
        }
Exemple #4
0
        public void SetStatus(string planUniqueName, long planInstanceId, [FromBody] string planString)
        {
            InitPlanServer();

            string context = GetContext(nameof(SetStatus),
                                        nameof(planUniqueName), planUniqueName, nameof(planInstanceId), planInstanceId,
                                        nameof(planString), planString);

            planString = CryptoHelpers.Decode(planString);
            Plan plan = Plan.FromYaml(new StringReader(planString));

            try
            {
                SynapseServer.Logger.Debug(context);
                _server.UpdatePlanStatus(plan);
            }
            catch (Exception ex)
            {
                SynapseServer.Logger.Error(
                    Utilities.UnwindException(context, ex, asSingleLine: true));
                throw;
            }
        }
Exemple #5
0
 void p_ErrorDataReceived(object sender, DataReceivedEventArgs e)
 {
     if (e.Data != null)
     {
         string data = CryptoHelpers.Decode(e.Data);
         try
         {
             HandlerProgressCancelEventArgs args = HandlerProgressCancelEventArgs.DeserializeSimple(data, true);
             OnProgress(args);
         }
         catch
         {
             try
             {
                 LogMessageEventArgs args = LogMessageEventArgs.DeserializeSimple(data, true);
                 OnLogMessage(args);
             }
             catch
             {
                 throw new Exception("Could not deserialize output into known args type");
             }
         }
     }
 }