Esempio n. 1
0
        public Task <string> UploadDebugInformation(string textContent = null)
        {
            textContent = textContent ?? GetEventLog();

            return(Task.Factory.StartNew(() => {
                // ping the coapp server to tell it that a package installed
                try {
                    var hash = DateTime.Now.Ticks.ToString().MD5Hash();
                    var req = HttpWebRequest.Create("http://coapp.org/debug/");
                    req.Method = "POST";
                    UrlEncodedMessage uem = new UrlEncodedMessage();
                    uem.Add("uniqId", AnonymousId);
                    uem.Add("hash", hash);
                    uem.Add("content", textContent);

                    var buffer = new ASCIIEncoding().GetBytes(uem.ToString());
                    req.ContentType = "application/x-www-form-urlencoded";
                    req.ContentLength = buffer.Length;

                    using (var newStream = req.GetRequestStream()) {
                        newStream.Write(buffer, 0, buffer.Length);
                    }

                    req.BetterGetResponse().Close();
                    return hash;
                }
                catch {
                    // who cares...
                }
                return null;
            }, TaskCreationOptions.AttachedToParent));
        }
Esempio n. 2
0
        /// <summary>
        ///   Writes the message to the stream asyncly.
        /// </summary>
        /// <param name="message"> The request. </param>
        /// <returns> </returns>
        /// <remarks>
        /// </remarks>
        public void WriteAsync(UrlEncodedMessage message)
        {
            // bail if we're cancelling this request
            if (IsCanceled)
            {
                return;
            }

            // first, attach a request id to the message
            try {
                message.Add("rqid", Event <GetCurrentRequestId> .RaiseFirst());
            } catch {
                // no worries if we can't get that.
            }

            // next toss the message the queue
            lock (_outputQueue) {
                _outputQueue.Enqueue(message.ToString());
            }

            if (Connected)
            {
                SendQueuedMessages();
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Will attempt to load the build history from a file.
        /// If the file cannot be found, the string will be assumed to contain Xml data and an attempt will be made to parse it for history data.
        /// </summary>
        /// <param name="XmlFile"></param>
        /// <returns>True if the History object has changed.</returns>
        public bool LoadHistory(string XmlFile)
        {
            /*
             * if (File.Exists(XmlFile))
             *  return History.ImportHistory(new FileStream(XmlFile, FileMode.Open, FileAccess.Read));
             *
             * //This means we don't see a file by that name.  Maybe it's just an Xml string?
             * return History.ImportHistory(XmlFile);
             */
            if (XmlFile == null || XmlFile.Equals(String.Empty))
            {
                if (History == null)
                {
                    History = new BuildHistory();
                    History.Builds.CollectionChanged += CollectionChanged;
                    return(true);
                }
                return(false);
            }

            if (File.Exists(XmlFile))
            {
                UrlEncodedMessage uem = new UrlEncodedMessage(File.ReadAllText(XmlFile), AutoBuild.SerialSeperator, true);
                History = uem.DeserializeTo <BuildHistory>() ?? new BuildHistory();
                History.Builds.CollectionChanged += CollectionChanged;
                return(true);
            }

            History = new BuildHistory();
            UrlEncodedMessage UEM = new UrlEncodedMessage(XmlFile, AutoBuild.SerialSeperator, true);

            UEM.DeserializeTo(History);
            History.Builds.CollectionChanged += CollectionChanged;
            return(true);
        }
Esempio n. 4
0
        private static Result AddSystemFeed(string Location)
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed adding Async feed.";
            TestResult.Passed = false;
            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("add-feed", new Dictionary<string, string>());
                msg.Add("location", Location);
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                TestResult.Message += ("  Received message:\n\t" + response.ToString());
                switch (response.Command)
                {
                    case "feed-added":
                        TestResult.Passed = true;
                        break;
                    default:
                        break;
                }
            }
            catch { }

            return TestResult;
        }
Esempio n. 5
0
 /// <summary>
 /// Loads the master config file from disk.
 /// This will first check for a registry key to locate the config.conf.
 /// If the file cannot be opened or cannot be found, a default config will be loaded
 /// </summary>
 /// <returns>True if a config file was successfully loaded.  False if a default config had to be generated.</returns>
 public bool LoadConfig()
 {
     try
     {
         var regKey = Registry.LocalMachine.CreateSubKey(@"Software\CoApp\AutoBuild Service") ??
                      Registry.LocalMachine.OpenSubKey(@"Software\CoApp\AutoBuild Service");
         if (regKey == null)
         {
             throw new Exception("Unable to load registry key.");
         }
         string configfile = (string)(regKey.GetValue("ConfigFile", null));
         if (configfile == null)
         {
             configfile = @"C:\AutoBuild\config.conf";
             regKey.SetValue("ConfigFile", configfile);
         }
         UrlEncodedMessage UEM = new UrlEncodedMessage(File.ReadAllText(configfile), AutoBuild.SerialSeperator, true);
         UEM.DeserializeTo(MasterConfig);
         MasterConfig.Changed += MasterChanged;
         return(true);
     }
     catch (Exception e)
     {
         WriteEvent("Unable to load master config:\n" + e.Message + "\n\nDefault config loaded.", EventLogEntryType.Error, 0, 0);
         MasterConfig          = new AutoBuild_config();
         MasterConfig.Changed += MasterChanged;
         return(false);
     }
 }
Esempio n. 6
0
        public override void Get(HttpResponse response, string relativePath, UrlEncodedMessage message) {
            response.WriteString("<html><body>Relative Path: {0}<br>GET : <br>", relativePath);
            foreach( var key in message ) {
                response.WriteString("&nbsp;&nbsp;&nbsp;{0} = {1}<br>", key, message[key]);
            }

            Bus.SendRegenerateSiteMessage();
            response.WriteString("</body></html>");
        }
Esempio n. 7
0
        public override Task Get(HttpListenerResponse response, string relativePath, UrlEncodedMessage message)
        {
            response.WriteString("<html><body>Relative Path: {0}<br>GET : <br>", relativePath);

            foreach( var key in message ) {
                response.WriteString("&nbsp;&nbsp;&nbsp;{0} = {1}<br>", key, message[key]);
            }

            response.WriteString("</body></html>");

            return "".AsResultTask();
        }
Esempio n. 8
0
 /// <summary>
 ///   Writes the message to the stream asyncly.
 /// </summary>
 /// <param name="message"> The request. </param>
 /// <returns> </returns>
 /// <remarks>
 /// </remarks>
 private static void WriteAsync(UrlEncodedMessage message)
 {
     if (IsPipeConnected)
     {
         try {
             message.Add("rqid", Event <GetCurrentRequestId> .RaiseFirst());
             _instance._pipe.WriteLineAsync(message.ToString()).ContinueWith(antecedent => Logger.Error("Async Write Fail!? (1)"),
                                                                             TaskContinuationOptions.OnlyOnFaulted);
         } catch /* (Exception e) */ {
         }
     }
 }
Esempio n. 9
0
        private void ProcessMessage(byte[] serverInput, int numBytes)
        {
            try {
                var rawMessage     = Encoding.UTF8.GetString(serverInput, 0, numBytes);
                var requestMessage = new UrlEncodedMessage(rawMessage);

                if (string.IsNullOrEmpty(requestMessage))
                {
                    return;
                }

                if (IsCanceled)
                {
                    Event <GetResponseInterface> .RaiseFirst().OperationCanceled("Service is shutting down");
                }
                else
                {
                    Logger.Message("REQ[{2}]:#{0}:{1}".format(requestMessage["rqid"], requestMessage.ToString(), _clientId));
                    // Logger.Message("Request:[{0}]{1}".format(requestMessage["rqid"], requestMessage.ToString()));


                    var packageRequestData = new XDictionary <string, PackageRequestData>();
                    var rqid = requestMessage["rqid"];

                    CurrentTask.Events += new GetCurrentRequestId(() => rqid);
                    CurrentTask.Events += new GetResponseInterface(() => _dispatcher);
                    CurrentTask.Events += new GetRequestPackageDataCache(() => packageRequestData);

                    var dispatchTask = PackageManagerImpl.Dispatcher.Dispatch(requestMessage);
                    dispatchTask.ContinueOnFail(failure => {
                        if (!IsCanceled)
                        {
                            Logger.Error(failure);
                            Event <GetResponseInterface> .RaiseFirst().UnexpectedFailure(failure.GetType().Name, failure.Message, failure.StackTrace);
                        }
                    });

                    dispatchTask.ContinueAlways(dt => Event <GetResponseInterface> .RaiseFirst().TaskComplete());
                }
            } catch (Exception e) {
                Logger.Error(e);
                throw e;
            }
            finally {
                // whatever, after this point let the messages flow!
                _bufferReady.Set();
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Loads a project configuration from disk.
        /// </summary>
        /// <param name="projectName">The name of the project to load.</param>
        /// <param name="overwrite">If true, will reload the project config data even if the project already has a configuration loaded.  (False by default)</param>
        /// <returns>True if the project was loaded successfully.  False otherwise.</returns>
        public bool LoadProject(string projectName, bool overwrite = false)
        {
            if (Projects.ContainsKey(projectName) && !overwrite)
            {
                return(false);
            }

            try
            {
                if (projectName == null)
                {
                    throw new ArgumentException("ProjectName cannot be null.");
                }

                Projects[projectName] = new ProjectData();
                if (!Projects.ContainsKey(projectName))
                {
                    throw new ArgumentException("Project not found: " + projectName);
                }

                string            file = Path.Combine(MasterConfig.ProjectRoot, projectName, "config.conf");
                UrlEncodedMessage UEM  = new UrlEncodedMessage(File.ReadAllText(file), AutoBuild.SerialSeperator, true);
                UEM.DeserializeTo(Projects[projectName]);
                Projects[projectName].SetName(projectName);
                string logPath = Path.Combine(MasterConfig.ProjectRoot, projectName, "Log.log");
                if (!File.Exists(logPath))
                {
                    logPath = String.Empty;
                }
                Projects[projectName].LoadHistory(logPath);
                Projects[projectName].Changed2 += ProjectChanged;
                return(true);
            }
            catch (Exception e)
            {
                WriteEvent("Unable to load project config (" + projectName + "):\n" + e.Message, EventLogEntryType.Error, 0, 0);
                return(false);
            }
        }
Esempio n. 11
0
        private void ProcessMessages()
        {
            var incomingMessage = new byte[BufferSize];

            _isBufferReady.Set();

            try {
                // tell others that we are indeed processing messages.
                _isProcessingMessages.Set();

                do
                {
                    // we need to wait for the buffer to become available.
                    _isBufferReady.WaitOne();


                    // now we claim the buffer
                    _isBufferReady.Reset();
                    Task <int> readTask;
                    readTask = _pipe.ReadAsync(incomingMessage, 0, BufferSize);

                    readTask.ContinueWith(
                        antecedent => {
                        if (antecedent.IsCanceled || antecedent.IsFaulted || !IsConnected)
                        {
                            if (antecedent.IsCanceled)
                            {
                                Logger.Message("Client/Session ReadTask is Cancelled");
                            }
                            if (antecedent.IsFaulted)
                            {
                                Logger.Message("Client/Session ReadTask is Faulted : {0}", antecedent.Exception.GetType());
                            }
                            Disconnect();
                            return;
                        }
                        if (antecedent.Result > 0)
                        {
                            var rawMessage      = Encoding.UTF8.GetString(incomingMessage, 0, antecedent.Result);
                            var responseMessage = new UrlEncodedMessage(rawMessage);
                            var rqid            = responseMessage["rqid"].ToInt32();

                            // lazy log the response (since we're at the end of this task)
                            Logger.Message("Response:[{0}]{1}".format(rqid, responseMessage.ToSmallerString()));

                            try {
                                var queue = ManualEventQueue.GetQueue(rqid);
                                if (queue != null)
                                {
                                    queue.Enqueue(responseMessage);
                                }
                                //else {
                                // GS01 : Need to put in protocol version detection.
                                //}
                            } catch {
                            }
                        }
                        // it's ok to let the next readTask use the buffer, we've got the data out & queued.
                        _isBufferReady.Set();
                    }).AutoManage();

                    // this wait just makes sure that we're only asking for one message at a time
                    // but does not throttle the messages themselves.
                    // readTask.Wait();
                } while (IsConnected);
            } catch (Exception e) {
                Logger.Message("Connection Terminating with Exception {0}/{1}", e.GetType(), e.Message);
            } finally {
                Logger.Message("In ProcessMessages/Finally");
                Disconnect();
            }
        }
Esempio n. 12
0
 static Session()
 {
     UrlEncodedMessage.AddTypeSubstitution <IPackage>((message, objectName, expectedType) => Package.GetPackage(message[objectName + ".CanonicalName"]));
 }
Esempio n. 13
0
        private static Result VerifySig(string FileName, bool isValid)
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to verify signature.";
            TestResult.Passed = false;

            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("verify-file-signature", new Dictionary<string, string>());
                msg.Add("filename", FileName);
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                TestResult.Message += ("  Received message:\n\t" + response.ToString());
                if (response.Command.Equals("signature-validation"))
                {
                    bool? validValue = (response["is-valid"]);
                    bool valid = validValue ?? false;
                    TestResult.Passed = (valid == isValid);
                }
            }
            catch { }

            return TestResult;
        }
Esempio n. 14
0
        private static Result FindFirstUninstalledPackage(out UrlEncodedMessage package)
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to find any uninstalled packages.";
            TestResult.Passed = false;
            package = null;
            bool Loop = true;

            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("find-packages", new Dictionary<string, string>());
                msg.Add("installed", "false");
                msg.Add("rqid", TestResult.Name);
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                TestResult.Message += "  Received message(s):";
                while (Loop)
                {
                    UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                    TestResult.Message += ("\n\t" + response.ToString());
                    switch (response.Command)
                    {
                        case "found-package":
                            TestResult.Passed = true;
                            package = package ?? response;
                            break;
                        case "task-complete":
                            if (response["rqid"] == TestResult.Name)
                                Loop = false;
                            break;
                        default:
                            TestResult.Success += "\n\tUnexpected Message: " + response.ToString();
                            break;
                    }
                }
            }
            catch (Exception e)
            {
                if (Loop)
                {
                    TestResult.Passed = false;
                    TestResult.Message += "\n\tException thrown before operation completed.";
                }
            }

            return TestResult;
        }
Esempio n. 15
0
        private static Result InstallImmaginaryPackage()
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to fail properly on installing an invalid package.";
            TestResult.Passed = false;
            bool Loop = true;

            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("install-package", new Dictionary<string, string>());
                msg.Add("canonical-name", "IAm_A_nonExistant_package-1.0.0.0-any-da642a7e5cd46921");
                msg.Add("rqid", TestResult.Name);
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                while (Loop)
                {
                    UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                    TestResult.Message += ("  Received message:\n\t" + response.ToString());
                    switch (response.Command)
                    {
                        case "unknown-package":
                            TestResult.Passed = true;
                            break;
                        case "task-complete":
                            if (response["rqid"] == TestResult.Name)
                                Loop = false;
                            break;
                        default:
                            TestResult.Success += "\n\tUnexpected Message: " + response.ToString();
                            break;
                    }
                }
            }
            catch { }

            return TestResult;
        }
Esempio n. 16
0
        public override void Post(HttpResponse response, string relativePath, UrlEncodedMessage message) {
            var payload = message["payload"];
            if( payload == null ) {
                response.StatusCode = 500;
                response.Close();
                return;
            }
            Logger.Message("payload = {0}",payload);
                try {
                    dynamic json = JObject.Parse(payload);
                    Logger.Message("MSG Process begin {0}", json.commits.Count);
                    
                    var count = json.commits.Count;
                    var doSiteRebuild = false;
                    for (int i = 0; i < count; i++) {
                        string username = json.commits[i].author.email.Value;
                        var atSym = username.IndexOf('@');
                        if( atSym > -1 ) {
                            username = username.Substring(0, atSym);
                        }

                        var commitMessage = json.commits[i].message.Value;
                        var repository = json.repository.name.Value;
                        
                        var url = (string)json.commits[i].url.Value;
                        if (repository == "coapp.org") {
                            doSiteRebuild = true;
                        }

                        Bitly.Shorten(url).ContinueWith( (bitlyAntecedent) => {
                            var commitUrl = bitlyAntecedent.Result;

                            var handle = _aliases.ContainsKey(username) ? _aliases[username] : username;
                            var sz = repository.Length + handle.Length + commitUrl.Length + commitMessage.Length + 10;
                            var n = 140 - sz;

                            if (n < 0) {
                                commitMessage = commitMessage.Substring(0, (commitMessage.Length + n) - 1) + "\u2026";
                            }

                            _tweeter.Tweet("{0} => {1} via {2} {3}", repository, commitMessage, handle, commitUrl);
                            Logger.Message("{0} => {1} via {2} {3}", repository, commitMessage, handle, commitUrl);
                        });
                    }
                    // just rebuild the site once for a given batch of rebuild commit messages.
                    if( doSiteRebuild) {
                        Task.Factory.StartNew(() => {
                            try {
                                Logger.Message("Rebuilding website.");
                                Bus.SendRegenerateSiteMessage();

                            } catch( Exception e ) {
                                HandleException(e);
                            }
                        });
                    }    
                } catch(Exception e) {
                    Logger.Error("Error handling uploaded package: {0} -- {1}\r\n{2}", e.GetType(), e.Message, e.StackTrace);
                    HandleException(e);
                    response.StatusCode = 500;
                    response.Close();
                }
         }
Esempio n. 17
0
        public override Task Post(HttpListenerResponse response, string relativePath, UrlEncodedMessage message)
        {
            var payload = message["payload"];
            if( payload == null ) {
                response.StatusCode = 500;
                response.Close();
                return "".AsResultTask();
            }

            var result = Task.Factory.StartNew( () => {
                try {
                    dynamic json = JObject.Parse(payload);
                    Console.WriteLine("MSG Process begin {0}", json.commits.Count);

                    var count = json.commits.Count;
                    var doSiteRebuild = false;
                    for (int i = 0; i < count; i++) {
                        var username = json.commits[i].author.username.Value;
                        var commitMessage = json.commits[i].message.Value;
                        var repository = json.repository.name.Value;

                        var url = (string)json.commits[i].url.Value;
                        if (repository == "coapp.org") {
                            doSiteRebuild = true;
                        }

                        Bitly.Shorten(url).ContinueWith( (bitlyAntecedent) => {
                            var commitUrl = bitlyAntecedent.Result;

                            var handle = _aliases.ContainsKey(username) ? _aliases[username] : username;
                            var sz = repository.Length + handle.Length + commitUrl.Length + commitMessage.Length + 10;
                            var n = 140 - sz;

                            if (n < 0) {
                                commitMessage = commitMessage.Substring(0, (commitMessage.Length + n) - 3) + "...";
                            }
                            _tweeter.Tweet("{0} => {1} via {2} {3}", repository, commitMessage, handle, commitUrl);
                            Console.WriteLine("{0} => {1} via {2} {3}", repository, commitMessage, handle, commitUrl);
                        });

                    }
                    // just rebuild the site once for a given batch of rebuild commit messages.
                    if( doSiteRebuild) {
                        Task.Factory.StartNew(() => {
                            try {
                                Console.WriteLine("Rebuilding website.");
                                Environment.CurrentDirectory = Environment.GetEnvironmentVariable("STORAGE");
                                if (_cmdexe.Exec(@"/c rebuild_site.cmd") != 0) {
                                    Console.WriteLine("Site rebuild result:\r\n{0}", _cmdexe.StandardOut);
                                    return;
                                }

                                Console.WriteLine("Rebuilt Website.");
                            } catch( Exception e ) {
                                Listener.HandleException(e);
                            }

                        });
                    }
                } catch(Exception e) {
                    Console.WriteLine("Error handling uploaded package: {0} -- {1}\r\n{2}", e.GetType(), e.Message, e.StackTrace);
                    Listener.HandleException(e);
                    response.StatusCode = 500;
                    response.Close();
                }
            }, TaskCreationOptions.AttachedToParent);

            result.ContinueWith( antecedent => {
                if (result.IsFaulted) {
                    var e = antecedent.Exception.InnerException;
                    Console.WriteLine("Error handling commit message: {0} -- {1}\r\n{2}", e.GetType(), e.Message, e.StackTrace);
                    Listener.HandleException(e);
                    response.StatusCode = 500;
                    response.Close();
                }
            }, TaskContinuationOptions.OnlyOnFaulted);

            return result;
        }
Esempio n. 18
0
        private static Result RemoveSystemFeed(string Location)
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to remove system feed: \"" + Location + "\".";
            TestResult.Passed = false;
            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("remove-feed", new Dictionary<string, string>());
                msg.Add("location", Location);
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                TestResult.Message += ("  Received message:\n\t" + response.ToString());
                if (response.Command.Equals("feed-removed"))
                {
                    if (Location.Equals(response["location"]))
                        TestResult.Passed = true;
                }
            }
            catch (TimeoutException) { TestResult.Passed = true; }
            catch { }

            return TestResult;
        }
Esempio n. 19
0
        private static Result RemovePackage(string CanonicalName)
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to remove package: \""+CanonicalName+"\".";
            TestResult.Passed = false;
            bool Loop = true;

            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("remove-package", new Dictionary<string, string>());
                msg.Add("canonical-name", CanonicalName);
                msg.Add("rqid", TestResult.Name);
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                TestResult.Message += "  Received message(s):";
                while (Loop)
                {
                    UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                    TestResult.Message += ("\n\t" + response.ToString());
                    switch (response.Command)
                    {
                        case "removed-package":
                            TestResult.Passed = true;
                            break;
                        case "removing-package":
                            //do nothing
                            break;
                        case "failed-install-package":
                            TestResult.Passed = false;
                            break;
                        case "package-is-blocked":
                            TestResult.Passed = false;
                            break;
                        case "unknown-package":
                            TestResult.Passed = false;
                            break;
                        case "operation-requires-permission":
                            TestResult.Passed = false;
                            break;
                        case "message-argument-error":
                            TestResult.Passed = false;
                            break;
                        case "task-complete":
                            if (response["rqid"] == TestResult.Name)
                                Loop = false;
                            break;
                        default:
                            break;
                    }
                }
            }
            catch
            {
                if (Loop)
                {
                    TestResult.Passed = false;
                    TestResult.Message += "\n\tException thrown before operation completed.";
                }
            }

            return TestResult;
        }
Esempio n. 20
0
        private static Result RecognizeFile(string Location, string Remote = null, bool valid = true, bool? isPackage = true)
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to recognize file.";
            TestResult.Passed = false;
            bool Loop = true;

            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("recognize-file", new Dictionary<string, string>());
                msg.Add("local-location", Location);
                if (Remote != null)
                    msg.Add("remote-location", Remote);
                msg.Add("rqid", TestResult.Name);
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                                TestResult.Message += "  Received message(s):";
                while (Loop)
                {
                    UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                    TestResult.Message += ("  Received message:\n\t" + response.ToString());
                    switch (response.Command)
                    {
                        case "found-package":
                            if (isPackage ?? true)
                                TestResult.Passed = true;
                            else
                                TestResult.Passed = false;
                            break;
                        case "found-feed":
                            if (!(isPackage ?? false))
                                TestResult.Passed = true;
                            else
                                TestResult.Passed = false;
                            break;
                        case "unable-to-recognize-file":
                            if (!valid)
                                TestResult.Passed = true;
                            else
                                TestResult.Passed = false;
                            break;
                        case "task-complete":
                            if (response["rqid"] == TestResult.Name)
                                Loop = false;
                            break;
                        default:
                            break;
                    }
                }
            }
            catch
            {
                if (Loop)
                {
                    TestResult.Passed = false;
                    TestResult.Message += "\n\tException thrown before operation completed.";
                }
            }

            return TestResult;
        }
Esempio n. 21
0
        private static Result FindPackage_Failure()
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to fail properly when finding an invalid package.";
            TestResult.Passed = false;

            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("find-packages", new Dictionary<string, string>());
                msg.Add("name", "IAm_A_nonExistant_package_NaMe");
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                TestResult.Message += ("  Received message:\n\t" + response.ToString());
                if (response.Command.Equals("require-remote-file"))
                {
                    bool KeepGoing = true;
                    int remoteNum = 0;
                    string destination = Path.Combine(response["destination"], response["canonical-name"]);
                    while (KeepGoing)
                    {
                        if (!(response["remote-locations[" + remoteNum + "]"].Equals(String.Empty)))
                            try
                            {
                                System.Net.WebClient WC = new System.Net.WebClient();
                                WC.DownloadFile(response["remote-locations[" + remoteNum++ + "]"], destination);
                                if (File.Exists(destination))
                                    KeepGoing = false;
                            }
                            catch (Exception E)
                            {
                                KeepGoing = false;
                            }
                        else
                            KeepGoing = false;
                    }

                    UrlEncodedMessage msg2;
                    if (File.Exists(destination))
                    {
                        msg2 = new UrlEncodedMessage("recognize-file", new Dictionary<string, string>());
                        msg2.Add("local-location", destination);
                    }
                    else
                    {
                        msg2 = new UrlEncodedMessage("unable-to-acquire", new Dictionary<string, string>());
                    }
                    msg2.Add("canonical-name", response["canonical-name"].ToString());
                    asyncServer.Write(msg2.ToString());

                    response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                    TestResult.Message += ("  Received message:\n\t" + response.ToString());
                }
                if (response.Command.Equals("no-packages-found"))
                    TestResult.Passed = true;
            }
            catch { }

            return TestResult;
        }
Esempio n. 22
0
        private static Result PackageDetails(string CanonicalName)
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to get package details.";
            TestResult.Passed = false;

            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("get-package-details", new Dictionary<string, string>());
                msg.Add("canonical-name", CanonicalName);
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                TestResult.Message += ("  Received message:\n\t" + response.ToString());
                if (response.Command.Equals("package-details"))
                {
                    TestResult.Passed = true;
                }
            }
            catch { }

            return TestResult;
        }
Esempio n. 23
0
        public override void Get(HttpResponse response, string relativePath, UrlEncodedMessage message) {
            if (string.IsNullOrEmpty(message["action"])) {
                response.StatusCode = 200;
                response.Write("No Action Specified."); 
            }

            switch (message["action"]) {
                case "add":
                    if (!string.IsNullOrEmpty(message["location"])) {
                        try {
                            var uri = new Uri(message["location"]);
                            if (Peek(uri)) {
                                var filename = "UploadedFile.bin".GenerateTemporaryFilename();
                                var rf = new RemoteFile(uri, filename);
                                rf.Get();
                                if (File.Exists(filename)) {
                                    HandleFile(filename).ContinueWith(antecedent => {
                                        if (antecedent.IsFaulted) {
                                            var e = antecedent.Exception.InnerException;
                                            HandleException(e);
                                            response.StatusCode = 500;
                                            response.Close();
                                        } else {
                                            response.StatusCode = antecedent.Result;
                                            response.Close();
                                        }
                                    }).Wait();
                                    return;
                                }
                            }
                        } catch {
                        }
                    }
                    break;

                case "validate":
                    Validate().ContinueWith(antecedent => {
                        if (antecedent.IsFaulted) {
                            var e = antecedent.Exception.InnerException;
                            HandleException(e);
                            response.StatusCode = 500;
                            response.Close();
                        } else {
                            response.StatusCode = antecedent.Result;
                            response.Close();
                        }
                    }).Wait();
                    return;
                    break;
                case "makewebpi":
                    var txt = RegenerateWebPI();
                    response.ContentType = "application/xml";
                    response.StatusCode = 200;
                    response.Write(txt);
                    // response.Close();
                    return;
                case "test":
                    var txt2 = "Hello World";
                    // response.ContentType = "application/text";
                    response.StatusCode = 200;
                    response.Write(txt2);
                    // response.Close();
                    return;
            }

            response.StatusCode = 500;
            response.Close();
        }
Esempio n. 24
0
        /** Example of test method to be called by Main()

        private static Result TestMethod()
        {
            Result TestResult = new Result();
            TestResult.Message = "Message for if I fail.";
            //Do stuff here.
            TestResult.Passed = false;
            return TestResult;
        }

        **/
        private static Result Connect()
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed async connection.";
            TestResult.Passed = false;
            try
            {
                //Send the connection message
                asyncServer.Connect(Timeout); // 5 second maximum wait time for initial connect.
                asyncServer.pipe.ReadMode = PipeTransmissionMode.Message;
                UrlEncodedMessage msg = new UrlEncodedMessage("start-session", new Dictionary<string, string>());
                msg.Add("client","AsyncTestClient");
                msg.Add("id","MyUniqueID");
                asyncServer.Write(msg.ToString());

                //Receive the response
                UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                TestResult.Message += ("  Received message:\n\t" + response.ToString());
                // check the command and data to make sure it's correct;
                switch (response.Command.ToLower())
                {
                    case "session-started":
                        TestResult.Passed = true;
                        break;
                    default:
                        break;
                }
            }
            catch (TimeoutException)
                { TestResult.Message += "  Timeout expired."; }
            catch {}

            return TestResult;
        }
Esempio n. 25
0
 /// <summary>
 /// Loads the master config file from disk.
 /// This will first check for a registry key to locate the config.conf.
 /// If the file cannot be opened or cannot be found, a default config will be loaded
 /// </summary>
 /// <returns>True if a config file was successfully loaded.  False if a default config had to be generated.</returns>
 public bool LoadConfig()
 {
     try
     {
         var regKey = Registry.LocalMachine.CreateSubKey(@"Software\CoApp\AutoBuild Service") ??
                      Registry.LocalMachine.OpenSubKey(@"Software\CoApp\AutoBuild Service");
         if (regKey == null)
             throw new Exception("Unable to load registry key.");
         string configfile = (string)(regKey.GetValue("ConfigFile", null));
         if (configfile == null)
         {
             configfile = @"C:\AutoBuild\config.conf";
             regKey.SetValue("ConfigFile", configfile);
         }
         UrlEncodedMessage UEM = new UrlEncodedMessage(File.ReadAllText(configfile), AutoBuild.SerialSeperator, true);
         UEM.DeserializeTo(MasterConfig);
         MasterConfig.Changed += MasterChanged;
         return true;
     }
     catch (Exception e)
     {
         WriteEvent("Unable to load master config:\n" + e.Message + "\n\nDefault config loaded.", EventLogEntryType.Error, 0, 0);
         MasterConfig = new AutoBuild_config();
         MasterConfig.Changed += MasterChanged;
         return false;
     }
 }
Esempio n. 26
0
        /// <summary>
        /// Attempts to set the attributes of a package.
        /// </summary>
        /// <param name="CanonicalName">Canonical Name of the package to alter.</param>
        /// <param name="Active">Set to True or False.  Pass 'null' to leave unchanged.</param>
        /// <param name="Required">Set to True or False.  Pass 'null' to leave unchanged.</param>
        /// <param name="Blocked">Set to True or False.  Pass 'null' to leave unchanged.</param>
        /// <returns></returns>
        private static Result SetPackageAttribs(string CanonicalName, bool? Active, bool? Required, bool? Blocked)
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to set package attributes for package: \"" + CanonicalName + "\".";
            TestResult.Passed = false;

            UrlEncodedMessage check = null;
            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("set-package", new Dictionary<string, string>());
                msg.Add("canonical-name", CanonicalName);
                if (Active != null)
                {
                    bool _val = Active ?? false; // Active should never be null at this point in the code.
                    msg.Add("active", _val ? "true" : "false");
                }
                if (Required != null)
                {
                    bool _val = Required ?? false; // Active should never be null at this point in the code.
                    msg.Add("required", _val ? "true" : "false");
                }
                if (Blocked != null)
                {
                    bool _val = Blocked ?? false; // Active should never be null at this point in the code.
                    msg.Add("blocked", _val ? "true" : "false");
                }
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                check = new UrlEncodedMessage(asyncServer.Read(Timeout));
                TestResult.Message += ("  Received message:\n\t" + check.ToString());
                if (check.Command.Equals("found-package"))
                    TestResult.Passed = true;
            }
            catch {}

            //verify that the change occurred
            //UrlEncodedMessage check = GetPackage(CanonicalName);
            if (check != null)
            {
                if (Active != null)
                    if (Active != ((bool?) check["active"] ?? false))
                        TestResult.Passed = false;
                if (Required != null)
                    if (Required != ((bool?) check["required"] ?? false))
                        TestResult.Passed = false;
                if (Blocked != null)
                    if (Blocked != ((bool?) check["blocked"] ?? false))
                        TestResult.Passed = false;
            }
            else
            {
                TestResult.Message += "\n\tUnable to confirm successful settings change.";
                TestResult.Passed = false;
            }

            return TestResult;
        }
Esempio n. 27
0
        private static UrlEncodedMessage GetPackage(string CanonicalName, bool? Installed = null)
        {
            UrlEncodedMessage ret = null;
            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("find-packages", new Dictionary<string, string>());
                msg.Add("canonical-name", CanonicalName);
                msg.Add("installed", (Installed != null ? ((Installed ?? false) ? "true" : "false") : "all"));
                asyncServer.Write(msg.ToString());

                while (true)
                {
                    UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                    if (response.Command.Equals("found-package"))
                    {
                        ret = ret ?? response;
                    }
                }
            }
            catch { }
            return ret;
        }
Esempio n. 28
0
        private static Result StupidLongAddFeedRequest()
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Failed to parse a stupidly long request message.";
            TestResult.Passed = false;

            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("add-feed",new Dictionary<string, string>());
                msg.Add("session",true);
                msg.Add("rant", "This is BS data that I have written here solely for the purpose of trying to break a piece of software that I have been detailed with testing.  There is no other task with which humanity has become adept at since the dawning of time than that of destruction, and I now find myself tasked with attempting to systematically pull apart software such that I can acurately and precisely describe the means by which it was broken.  As I have now reached the end of my tirade, the next value will consist solely of Lorem Ipsum text.");
                msg.Add("lorem ipsum1", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius aliquam vehicula. Nulla facilisi. Nulla pulvinar arcu non erat aliquet suscipit mollis augue molestie. Maecenas feugiat laoreet posuere. Maecenas congue ante eget lectus dignissim sit amet egestas neque congue. Vivamus dictum quam quis arcu faucibus dignissim. Duis sed massa vel nisi hendrerit rhoncus eget ac eros. Sed porttitor orci non ipsum dictum sed molestie mi egestas. Nunc pulvinar, enim in sollicitudin semper, augue quam venenatis quam, nec faucibus nibh urna nec libero. Pellentesque accumsan auctor massa, in aliquet lacus varius eu. Vestibulum nec nunc sit amet sem rutrum molestie in vel massa. Fusce sodales pharetra tortor at tempus. Nunc lorem leo, viverra ut cursus a, auctor eget magna. Vivamus vel nunc fringilla ipsum vulputate dapibus vel non quam. Nunc fringilla magna id purus imperdiet quis porttitor nisl laoreet. Vestibulum sit amet libero et tellus vestibulum vulputate. Donec venenatis lorem eu nisi tempor et rhoncus mauris scelerisque. Cras scelerisque pharetra dui sagittis feugiat. Phasellus porttitor congue lectus sit amet ullamcorper. Sed justo lorem, sagittis at fermentum id, sagittis id leo. Duis vehicula ipsum sit amet nisl accumsan dapibus. Sed accumsan, lectus eu aliquam commodo, velit urna dapibus sem, et varius nulla sapien ac purus. Curabitur luctus dictum nisi, sit amet malesuada ligula blandit vel. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Curabitur viverra tempus interdum. Etiam tincidunt dolor a mi blandit ornare. Aliquam in dolor leo. In hac habitasse platea dictumst. Cras semper urna at augue hendrerit et elementum nibh dapibus. Aenean luctus pretium purus at condimentum. Duis vulputate imperdiet neque vel varius. Nulla placerat iaculis felis. Phasellus nibh tellus, congue nec egestas in, varius iaculis augue. Nullam et urna nec est tincidunt gravida ullamcorper vel metus. Ut volutpat ullamcorper tellus nec iaculis. Duis vestibulum semper molestie. In vehicula neque ac nunc mattis adipiscing at tempus orci. Fusce non est tortor. Etiam convallis aliquet risus, eu condimentum orci molestie vel. Nunc elementum sem tempus augue volutpat rutrum. Donec vitae dui arcu. Vestibulum vel nisi diam, pretium porttitor augue. Sed dictum, magna at fermentum sodales, nulla ante iaculis est, eget cursus eros sem sed leo. Vestibulum in enim non nisl tempus cursus nec quis nulla. Cras dapibus, lectus a feugiat rhoncus, velit elit hendrerit dolor, eu scelerisque tellus quam sed velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc non mi metus, non ultrices lectus. Etiam lobortis, nisi ut rutrum iaculis, nisi mauris sodales mauris, in congue tellus sem mollis risus. Integer ut tempor felis. Nulla facilisi. Duis sed viverra mi. Donec pulvinar pulvinar vulputate. Maecenas in diam eu diam ullamcorper porttitor quis iaculis mauris. Curabitur tincidunt velit id ipsum aliquam et aliquet purus iaculis. Nulla at felis libero, vitae imperdiet ipsum. Sed vehicula, justo non mollis aliquam, felis magna fringilla tortor, et gravida mauris massa vitae sapien. Ut at tellus justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat, elit non consectetur hendrerit, sem libero fermentum felis, et convallis nisl orci sit amet erat. Nulla vitae mollis arcu. Aenean leo nisi, cursus in interdum id, congue quis arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque accumsan ante ut leo euismod non viverra massa sagittis. Donec lobortis cursus tincidunt. Sed quis nisl erat. Fusce faucibus aliquam sollicitudin. Phasellus ac auctor ligula. Aenean semper augue id nibh faucibus eu vestibulum quam tincidunt. Donec non urna orci. Maecenas nec eleifend urna. Nulla lacinia lorem in velit semper tincidunt. Proin vitae dolor nec purus pharetra congue ornare eget sem. Nulla consequat, est at dictum pulvinar, purus nibh posuere ante, et elementum lacus lacus et elit. Cras lobortis dolor vel neque tempus dapibus. Aliquam erat volutpat. Vivamus vehicula scelerisque rutrum. Integer viverra nunc nec purus vehicula accumsan. Aenean a convallis erat. Etiam orci mi, congue vel volutpat in, blandit vel nunc. Nam suscipit nunc sed lorem tempor in tempus turpis ultrices. Aliquam in nisl pretium lacus interdum tincidunt. Aliquam non erat justo, non sagittis sapien. Sed ullamcorper, elit a fringilla laoreet, urna quam commodo ligula, et ornare velit turpis in nisl. Nullam aliquet gravida interdum. Aenean eu nulla a arcu mattis auctor. Nunc aliquet sollicitudin enim iaculis facilisis. Donec faucibus purus felis. Morbi arcu diam, commodo id condimentum quis, posuere dapibus nisi. Donec rutrum, elit at bibendum sodales, erat ante tincidunt massa, ut euismod augue lectus vitae sem. Nam tempus risus sed risus consequat elementum rutrum lacus porta. Nullam id orci felis, ac luctus nunc. Donec rhoncus cursus leo non iaculis. In rutrum mauris sed quam posuere fringilla. Vestibulum hendrerit pellentesque commodo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse potenti. Ut porta arcu et lectus molestie at venenatis nunc scelerisque. Ut facilisis egestas pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis in dolor nec nunc semper lacinia et non enim. Aliquam non consequat sapien. Proin molestie egestas diam, in tempus mi eleifend nec. Aliquam ac purus nunc. Pellentesque ornare tempor nunc, eget fringilla nulla volutpat at. Proin molestie purus id lacus mattis ac vehicula urna commodo. Ut congue suscipit nibh, posuere semper purus fringilla a. Pellentesque bibendum auctor sapien in elementum. Donec tincidunt laoreet nisl, viverra consectetur dui pellentesque in. Maecenas sed diam eu augue auctor tristique eu sed dolor. Vivamus dignissim nibh et leo commodo nec pulvinar augue suscipit. Fusce viverra molestie luctus. Sed vel ante odio, viverra auctor arcu. Vestibulum faucibus, elit eu placerat tempus, arcu libero faucibus nisl, nec imperdiet neque eros ac justo. Praesent vel orci vitae tortor fringilla lobortis. Phasellus ultricies, mi id accumsan dapibus, lorem ante malesuada lorem, ut pellentesque dui est nec quam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam vestibulum congue nibh, pulvinar malesuada neque feugiat sit amet. Maecenas iaculis augue sed purus congue sit amet congue sem consectetur. Suspendisse at leo eget quam rhoncus blandit at ut nulla. Praesent a massa eu sem dictum volutpat. Aenean sit amet convallis mauris. Sed nec ipsum nulla, at viverra tortor. Integer urna nisi, ultrices quis bibendum vel, dapibus id mi. Integer facilisis vestibulum neque eget euismod. Curabitur diam lorem, lacinia sit amet eleifend quis, varius quis urna. Sed suscipit accumsan faucibus. Sed et nisl libero. Pellentesque interdum tincidunt eros, in tristique quam euismod a. Proin vel quam nec ligula tincidunt lobortis. Suspendisse blandit massa eros. Duis hendrerit elit in orci feugiat congue. In dignissim est tellus, et vehicula tellus. Phasellus in erat mauris. Pellentesque velit diam, bibendum nec varius lobortis, interdum vitae nisl. Nam sed odio sagittis nulla bibendum ornare ut sit amet diam. Nulla facilisi. Quisque quis tristique augue. Quisque dictum, lectus et vehicula iaculis, augue justo ullamcorper arcu, sed placerat mauris sapien molestie ipsum. Integer facilisis, tortor non fringilla consectetur, urna tortor porttitor risus, a accumsan enim turpis ac mi. Phasellus facilisis eros eu neque adipiscing sit amet interdum lacus venenatis. Aliquam sit amet nulla vitae nibh aliquet hendrerit eget sed sem. Duis leo lorem, dictum et vestibulum sit amet, commodo sit amet elit. Integer ac diam tortor, quis tempor magna. Ut lacinia mauris condimentum diam imperdiet pellentesque ac ac neque. Vivamus consectetur nulla vestibulum leo scelerisque lobortis. Fusce eleifend varius lacus, eget dignissim lorem dictum in. Morbi dictum, ante eu aliquet cursus, ante sapien tempus nisl, et rhoncus magna nunc sit amet lorem. Nulla magna ipsum, dapibus non pellentesque nec, interdum vitae mauris. Nam quis ante est. Nulla turpis velit, aliquet sed lacinia volutpat, ultrices quis massa. Cras convallis, risus quis porttitor eleifend, felis purus pellentesque tellus, eu commodo ipsum tellus eget dui. Phasellus viverra, lorem sit amet euismod semper, nulla mauris feugiat erat, at hendrerit massa lectus eget elit. Donec id lectus sapien, in auctor leo. Suspendisse nisl neque, venenatis in consectetur vel, pellentesque tristique tortor. Etiam viverra tempor augue, at pharetra leo luctus quis. Fusce pretium odio id enim elementum eu commodo lorem ultrices. Praesent id viverra neque. Phasellus molestie iaculis interdum. Praesent faucibus dui vitae nibh eleifend vitae sagittis purus blandit. Proin cursus venenatis nisi porta sagittis. Mauris varius accumsan mauris. Vivamus viverra condimentum accumsan. Vestibulum in nulla id eros pulvinar eleifend eleifend a diam. Phasellus ultrices porta sapien at venenatis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam quis eros volutpat tellus tincidunt posuere pretium varius sapien. Donec in felis risus, a sollicitudin erat. Sed vel cursus leo. Sed dictum turpis sed augue venenatis tempus. Morbi dapibus, diam eget consequat malesuada, dui metus posuere lorem, in suscipit metus sem consectetur sapien. Sed nisl elit, lobortis ornare pellentesque at, iaculis id magna.");
                msg.Add("lorem ipsum2", "Nunc in odio eu erat laoreet ullamcorper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur feugiat erat eu purus varius eu pulvinar quam vestibulum. Pellentesque dignissim consectetur magna. Etiam mollis dictum venenatis. Etiam commodo, neque a interdum commodo, enim nunc dapibus leo, quis semper ipsum magna sed odio. Praesent a pellentesque sem. Phasellus sagittis egestas blandit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam at ipsum purus. Ut commodo urna ac urna congue consectetur. Proin pellentesque euismod aliquam. Suspendisse turpis odio, consectetur in imperdiet at, auctor non eros. Fusce sagittis condimentum dui nec placerat. Etiam risus odio, faucibus eget feugiat vitae, condimentum ut tortor. Duis nunc tortor, pharetra non luctus vel, tincidunt eget quam. Pellentesque imperdiet lacus ut sapien condimentum ullamcorper eu vitae enim. Sed libero metus, facilisis at dignissim vitae, placerat a tortor. Duis dolor enim, ornare at pharetra at, pharetra nec nibh. Aenean id euismod elit. Cras tristique urna eget elit cursus euismod laoreet lacus blandit. Sed mattis metus ullamcorper libero aliquet sed aliquet tortor adipiscing. Nullam quam nulla, gravida vel fringilla eget, rhoncus ut metus. Quisque id viverra magna. Sed imperdiet, tortor at ultrices volutpat, augue urna molestie arcu, in egestas ante massa a arcu. Aenean consequat turpis a leo volutpat eget pulvinar nibh aliquam. Quisque faucibus ultrices libero, nec mattis diam tincidunt ut. Nam sollicitudin eleifend orci, sollicitudin posuere urna viverra ut. Phasellus sit amet neque mi, gravida vehicula quam. Duis sit amet eros mi, vel vulputate tellus. Maecenas eget auctor libero. Duis nec ornare sapien. Donec quis orci nunc. Duis eget lorem ipsum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam consequat justo et nisl elementum pharetra. Pellentesque leo massa, hendrerit a tincidunt non, feugiat id felis. Proin dictum mollis purus in hendrerit. Quisque nec metus et elit iaculis faucibus at sed ligula. Fusce condimentum scelerisque massa ac molestie. Nam tristique dictum ligula, id suscipit mauris imperdiet at. Maecenas feugiat velit vel est semper ut aliquet eros scelerisque. Mauris eget massa risus, eget pellentesque eros. Integer lectus velit, dapibus quis vestibulum non, sodales at augue. Maecenas commodo tellus sit amet elit pretium vitae lobortis justo aliquet. Fusce ligula erat, faucibus ac dapibus vel, porttitor a ipsum. Curabitur vel libero ut ipsum elementum aliquam. Praesent massa metus, vestibulum vitae porttitor sed, hendrerit id leo. Maecenas interdum adipiscing ante a tempus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin tempus tempor nisl, in lobortis velit pulvinar a. Aliquam pretium libero non metus euismod sodales eget et mi. Integer luctus eros eget erat dictum commodo. In euismod lobortis lorem, sed placerat ligula suscipit vulputate. In eu consequat dui. Aliquam dictum pellentesque iaculis. Mauris ut mattis est. In non quam mauris, sed facilisis erat. Cras aliquam, felis non tincidunt iaculis, leo ante ultricies velit, ac semper quam mi eget nunc. Cras sodales nunc eget mauris mollis sit amet tincidunt turpis ornare. Vivamus vestibulum sollicitudin tortor ac commodo. Mauris venenatis blandit arcu, non feugiat elit blandit non. Nulla pharetra augue non magna varius rhoncus. Mauris tempor mauris in nisl rhoncus suscipit. Aenean porttitor venenatis elit, nec volutpat est ornare vitae. Quisque iaculis posuere auctor. Curabitur eget auctor ante. Quisque ornare tortor id erat consectetur aliquet. Integer posuere sollicitudin sapien ut luctus. Nulla dolor quam, molestie eget placerat a, interdum ac odio. Etiam laoreet, est vel congue pretium, est elit tincidunt tortor, eu vestibulum tellus sapien et leo. Proin non varius nunc. Integer mollis velit non arcu auctor euismod cursus justo gravida. Integer augue sapien, lobortis vel ornare ac, cursus id risus. Sed dictum egestas nulla vitae vestibulum. Vivamus ac lorem in orci vestibulum convallis in ut massa. Phasellus a nisl ac mi gravida rhoncus at consequat quam. Nullam sit amet lacus ac odio aliquet gravida. Nulla facilisi. Nunc sed nisl ligula. In accumsan metus commodo ligula sodales nec malesuada nulla ornare. Aliquam nisl leo, iaculis a ultricies vitae, imperdiet eu libero. Cras urna quam, tincidunt ac ullamcorper eu, pellentesque at sapien. Ut in tortor tellus, placerat imperdiet nunc. In accumsan magna ut orci pellentesque aliquam. Donec blandit dictum lobortis. Donec consectetur mattis odio sed aliquam. Nunc id ante sed orci lobortis gravida. Integer arcu magna, tempus in tempor non, malesuada vitae eros. Ut gravida arcu suscipit sem volutpat tincidunt tincidunt neque semper. Pellentesque auctor, odio eget consectetur hendrerit, nisi nisl luctus odio, vitae tincidunt dolor lectus vel odio. Nullam consectetur nunc sapien. Donec suscipit porta ante, at pellentesque magna egestas vel. In et justo dolor, et tempor felis. Maecenas quis mi ornare ligula ornare varius eu nec nisl. Suspendisse lobortis neque non nisl pretium venenatis. In eros lacus, iaculis quis mollis vel, eleifend vel nibh. Curabitur pulvinar sollicitudin turpis eu porttitor. In aliquet neque ac nulla tempus tincidunt. Etiam vel tortor odio. Etiam suscipit est a leo tempor consequat. Nunc at luctus turpis. Donec ac hendrerit nibh. Duis molestie nisl aliquet ante convallis placerat. Pellentesque ut massa ante, non tempor sem. Fusce quis dolor non odio rutrum tincidunt. Donec quis augue ac nibh semper sodales vel sed nibh. Vestibulum vestibulum, tellus a adipiscing commodo, mi neque cursus mi, vitae condimentum libero tellus in lacus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel odio diam. Suspendisse sed mauris id nunc lobortis viverra. Etiam diam mauris, iaculis rutrum aliquet consequat, vestibulum consectetur mauris. In hac habitasse platea dictumst. Sed ut metus nulla. Duis aliquet mollis risus et tempus. Praesent sem ligula, hendrerit sed.");
                msg.Add("location", @"C:\tmp\nofeed\");
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                TestResult.Message += "  Received message(s):";
                while (true)
                {
                    UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                    TestResult.Message += ("\n\t" + response.ToString());
                    switch (response.Command)
                    {
                        case "found-feed":
                            TestResult.Passed = true;
                            break;
                        default:
                            break;
                    }
                }
            }
            catch {}

            return TestResult;
        }
Esempio n. 29
0
        private static Result UnableToAcquire(string CanonicalName = "Bad_Location-1.0.0.0-any-da642a7e5cd46921")
        {
            Result TestResult = new Result();
            TestResult.Name = System.Reflection.MethodBase.GetCurrentMethod().Name;
            TestResult.Message = "Error sending message of type: \"unable-to-acquire\".";
            TestResult.Passed = false;
            bool Loop = true;

            try
            {
                UrlEncodedMessage msg = new UrlEncodedMessage("unable-to-acquire", new Dictionary<string, string>());
                msg.Add("canonical-name", CanonicalName);
                msg.Add("rqid", TestResult.Name);
                TestResult.Command = msg;
                asyncServer.Write(msg.ToString());

                while (Loop)
                {
                    UrlEncodedMessage response = new UrlEncodedMessage(asyncServer.Read(Timeout));
                    TestResult.Message += ("  Received message:\n\t" + response.ToString());
                    switch (response.Command)
                    {
                        case "task-complete":
                            if (response["rqid"] == TestResult.Name)
                            {
                                Loop = false;
                                TestResult.Passed = true;
                            }
                            break;
                        default:
                            TestResult.Success += "\n\tUnexpected Message: " + response.ToString();
                            break;
                    }
                }
            }
            catch
            {
                if (Loop)
                {
                    TestResult.Passed = false;
                    TestResult.Message += "\n\tException thrown before operation completed.";
                }
            }

            return TestResult;
        }
Esempio n. 30
0
        /// <summary>
        /// Will attempt to load the build history from a file.
        /// If the file cannot be found, the string will be assumed to contain Xml data and an attempt will be made to parse it for history data.
        /// </summary>
        /// <param name="XmlFile"></param>
        /// <returns>True if the History object has changed.</returns>
        public bool LoadHistory(string XmlFile)
        {
            /*
            if (File.Exists(XmlFile))
                return History.ImportHistory(new FileStream(XmlFile, FileMode.Open, FileAccess.Read));

            //This means we don't see a file by that name.  Maybe it's just an Xml string?
            return History.ImportHistory(XmlFile);
             */
            if (XmlFile == null || XmlFile.Equals(String.Empty))
            {
                if (History == null)
                {
                    History = new BuildHistory();
                    History.Builds.CollectionChanged += CollectionChanged;
                    return true;
                }
                return false;
            }

            if (File.Exists(XmlFile))
            {
                UrlEncodedMessage uem = new UrlEncodedMessage(File.ReadAllText(XmlFile), AutoBuild.SerialSeperator, true);
                History = uem.DeserializeTo<BuildHistory>() ?? new BuildHistory();
                History.Builds.CollectionChanged += CollectionChanged;
                return true;
            }

            History = new BuildHistory();
            UrlEncodedMessage UEM = new UrlEncodedMessage(XmlFile, AutoBuild.SerialSeperator, true);
            UEM.DeserializeTo(History);
            History.Builds.CollectionChanged += CollectionChanged;
            return true;
        }
Esempio n. 31
0
        /// <summary>
        ///   Starts the listener.
        /// </summary>
        /// <remarks>
        /// </remarks>
        private void StartListener()
        {
            if (_cancellationTokenSource.Token.IsCancellationRequested)
            {
                return;
            }

            try {
                if (IsRunning)
                {
                    Logger.Message("Starting New Listener {0}", listenerCount++);
                    var serverPipe = new NamedPipeServerStream(PipeName, PipeDirection.InOut, Instances, PipeTransmissionMode.Message, PipeOptions.Asynchronous,
                                                               BufferSize, BufferSize, _pipeSecurity);

                    nonConnectedListeners.Add(serverPipe);

                    var listenTask = Task.Factory.FromAsync(serverPipe.BeginWaitForConnection, serverPipe.EndWaitForConnection, serverPipe);

                    listenTask.ContinueWith(t => {
                        nonConnectedListeners.Remove(serverPipe);
                        if (t.IsCanceled || _cancellationTokenSource.Token.IsCancellationRequested || Signals.ShutdownRequested || Signals.ShuttingDown)
                        {
                            return;
                        }

                        StartListener(); // spawn next one!

                        if (serverPipe.IsConnected)
                        {
                            var serverInput = new byte[BufferSize];

                            serverPipe.ReadAsync(serverInput, 0, serverInput.Length).AutoManage().ContinueWith(antecedent => {
                                var rawMessage = Encoding.UTF8.GetString(serverInput, 0, antecedent.Result);
                                if (string.IsNullOrEmpty(rawMessage))
                                {
                                    return;
                                }

                                var requestMessage = new UrlEncodedMessage(rawMessage);

                                // first command must be "startsession"
                                if (!requestMessage.Command.Equals("StartSession", StringComparison.CurrentCultureIgnoreCase))
                                {
                                    return;
                                }

                                // verify that user is allowed to connect.
                                try {
                                    var hasAccess = false;
                                    serverPipe.RunAsClient(() => {
                                        hasAccess = PermissionPolicy.Connect.HasPermission;
                                    });
                                    if (!hasAccess)
                                    {
                                        return;
                                    }
                                } catch {
                                    return;
                                }

                                // check for the required parameters.
                                // close the session if they are not here.
                                if (string.IsNullOrEmpty(requestMessage["id"]) || string.IsNullOrEmpty(requestMessage["client"]))
                                {
                                    return;
                                }
                                var isSync = requestMessage["async"].IsFalse();

                                if (isSync)
                                {
                                    StartResponsePipeAndProcessMessages(requestMessage["client"], requestMessage["id"], serverPipe);
                                }
                                else
                                {
                                    Session.Start(requestMessage["client"], requestMessage["id"], serverPipe, serverPipe);
                                }
                            }).Wait();
                        }
                    }, _cancellationTokenSource.Token, TaskContinuationOptions.AttachedToParent, TaskScheduler.Current);
                }
            } catch /* (Exception e) */ {
                RequestStop();
            }
        }
Esempio n. 32
0
 public virtual void Head(HttpResponse response, string relativePath, UrlEncodedMessage message) {
     return ;
 }
Esempio n. 33
0
        /// <summary>
        ///   Starts the listener.
        /// </summary>
        /// <remarks>
        /// </remarks>
        private void StartListener()
        {
            if (_cancellationTokenSource.Token.IsCancellationRequested) {
                return;
            }

            try {
                if (IsRunning) {
                    Logger.Message("Starting New Listener {0}", listenerCount++);
                    var serverPipe = new NamedPipeServerStream(PipeName, PipeDirection.InOut, Instances, PipeTransmissionMode.Message, PipeOptions.Asynchronous,
                        BufferSize, BufferSize, _pipeSecurity);
                    var listenTask = Task.Factory.FromAsync(serverPipe.BeginWaitForConnection, serverPipe.EndWaitForConnection, serverPipe);

                    listenTask.ContinueWith(t => {
                        if (t.IsCanceled || _cancellationTokenSource.Token.IsCancellationRequested) {
                            return;
                        }

                        StartListener(); // spawn next one!

                        if (serverPipe.IsConnected) {
                            var serverInput = new byte[BufferSize];

                            serverPipe.ReadAsync(serverInput, 0, serverInput.Length).AutoManage().ContinueWith(antecedent => {
                                var rawMessage = Encoding.UTF8.GetString(serverInput, 0, antecedent.Result);
                                if (string.IsNullOrEmpty(rawMessage)) {
                                    return;
                                }

                                var requestMessage = new UrlEncodedMessage(rawMessage);

                                // first command must be "startsession"
                                if (!requestMessage.Command.Equals("StartSession", StringComparison.CurrentCultureIgnoreCase)) {
                                    return;
                                }

                                // verify that user is allowed to connect.
                                try {
                                    var hasAccess = false;
                                    serverPipe.RunAsClient(() => {
                                        hasAccess = PermissionPolicy.Connect.HasPermission;
                                    });
                                    if (!hasAccess) {
                                        return;
                                    }
                                } catch {
                                    return;
                                }

                                // check for the required parameters.
                                // close the session if they are not here.
                                if (string.IsNullOrEmpty(requestMessage["id"]) || string.IsNullOrEmpty(requestMessage["client"])) {
                                    return;
                                }
                                var isSync = requestMessage["async"].IsFalse();

                                if (isSync) {
                                    StartResponsePipeAndProcessMesages(requestMessage["client"], requestMessage["id"], serverPipe);
                                } else {
                                    Session.Start(requestMessage["client"], requestMessage["id"], serverPipe, serverPipe);
                                }
                            }).Wait();
                        }
                    }, _cancellationTokenSource.Token, TaskContinuationOptions.AttachedToParent, TaskScheduler.Current);
                }
            } catch /* (Exception e) */ {
                RequestStop();
            }
        }
Esempio n. 34
0
        /// <summary>
        /// Loads a project configuration from disk.
        /// </summary>
        /// <param name="projectName">The name of the project to load.</param>
        /// <param name="overwrite">If true, will reload the project config data even if the project already has a configuration loaded.  (False by default)</param>
        /// <returns>True if the project was loaded successfully.  False otherwise.</returns>
        public bool LoadProject(string projectName, bool overwrite = false)
        {
            if (Projects.ContainsKey(projectName) && !overwrite)
                return false;

            try
            {
                if (projectName == null)
                    throw new ArgumentException("ProjectName cannot be null.");

                Projects[projectName] = new ProjectData();
                if (!Projects.ContainsKey(projectName))
                    throw new ArgumentException("Project not found: " + projectName);

                string file = Path.Combine(MasterConfig.ProjectRoot, projectName, "config.conf");
                UrlEncodedMessage UEM = new UrlEncodedMessage(File.ReadAllText(file), AutoBuild.SerialSeperator, true);
                UEM.DeserializeTo(Projects[projectName]);
                Projects[projectName].SetName(projectName);
                string logPath = Path.Combine(MasterConfig.ProjectRoot, projectName, "Log.log");
                if (!File.Exists(logPath))
                    logPath = String.Empty;
                Projects[projectName].LoadHistory(logPath);
                Projects[projectName].Changed2 += ProjectChanged;
                return true;
            }
            catch (Exception e)
            {
                WriteEvent("Unable to load project config (" + projectName + "):\n" + e.Message, EventLogEntryType.Error, 0, 0);
                return false;
            }
        }
Esempio n. 35
0
 public virtual Task Head(HttpListenerResponse response, string relativePath, UrlEncodedMessage message)
 {
     return(null);
 }
Esempio n. 36
0
 public virtual Task Post(HttpListenerResponse response, string relativePath, UrlEncodedMessage message)
 {
     return null;
 }
Esempio n. 37
0
        public override Task Post(HttpListenerResponse response, string relativePath, UrlEncodedMessage message)
        {
            var payload = (string)message["payload"];

            if (payload == null)
            {
                response.StatusCode = 500;
                response.Close();
                return("".AsResultTask());
            }

            var result = Task.Factory.StartNew(() =>
            {
                try
                {
                    dynamic json = JObject.Parse(payload);
                    WriteLog("MSG Process begin " + json.commits.Count);

                    string repository = (json.repository.name) ?? String.Empty;
                    string reference  = json["ref"].ToString();

                    int count         = json.commits.Count;
                    bool validTrigger = false;


                    for (int i = 0; i < count; i++)
                    {
                        string username = (json.commits[i].author.username ?? json.commits[i].author.name ?? new { Value = String.Empty }).Value;

                        if (!username.Equals((string)(AutoBuild.MasterConfig.VersionControlList["git"].Properties["username"]), StringComparison.CurrentCultureIgnoreCase))
                        {
                            validTrigger = true;
                        }
                    }

                    if (validTrigger)
                    {
                        AutoBuild.WriteVerbose("POST received: " + repository + " -- " + reference);

                        if (AutoBuild.Projects.ContainsKey(repository))
                        {
                            ProjectData project = AutoBuild.Projects[repository];
                            if (project.WatchRefs.IsNullOrEmpty() || project.WatchRefs.Contains(reference))
                            {
                                AutoBuild.StandBy(repository);
                            }
                        }
                        else
                        {
                            bool makeNew;
                            if (!Boolean.TryParse(AutoBuild.MasterConfig.VersionControlList["git"].Properties["NewFromHook"], out makeNew))
                            {
                                return;
                            }
                            if (makeNew)
                            {
                                /////Build new ProjectInfo info from commit message.
                                ProjectData project = new ProjectData();
                                project.SetName(repository);

                                project.Enabled       = true;
                                project.KeepCleanRepo = AutoBuild.MasterConfig.DefaultCleanRepo;

                                // This section constructs the repo url to use...
                                string init_url = json.repository.url;
                                string proto    = init_url.Substring(0, init_url.IndexOf("://") + 3);
                                init_url        = init_url.Substring(proto.Length);
                                string host     = init_url.Substring(0, init_url.IndexOf("/"));
                                string repo     = init_url.Substring(init_url.IndexOf("/") + 1);
                                switch (((string)(AutoBuild.MasterConfig.VersionControlList["git"].Properties["url_style"])).ToLower())
                                {
                                case "git":
                                    project.RepoURL = "git://" + host + "/" + repo;
                                    break;

                                case "http":
                                    project.RepoURL = json.url;
                                    break;

                                case "ssh":
                                    project.RepoURL = "git@" + host + ":" + repo;
                                    break;

                                default:
                                    project.RepoURL = null;
                                    break;
                                }
                                // End repo url section

                                project.WatchRefs.AddRange(AutoBuild.MasterConfig.DefaultRefs);

                                if (!(AutoBuild.MasterConfig.DefaultCommands.IsNullOrEmpty()))
                                {
                                    if (project.WatchRefs.Count > 0)
                                    {
                                        foreach (string watchRef in project.WatchRefs)
                                        {
                                            string branch = watchRef.Substring(11);  //length of @"refs/heads/"
                                            project.BuildCheckouts[branch] = new ProjectData.CheckoutInfo();

                                            List <string> strings;
                                            //prebuild
                                            strings = AutoBuild.MasterConfig.DefaultCommands["prebuild"] ??
                                                      new List <string>();
                                            foreach (string s in strings)
                                            {
                                                project.BuildCheckouts[branch].PreCmd.Add(s);
                                            }
                                            //build
                                            project.BuildCheckouts[branch].BuildCmd.Add("Checkout"); // magic name
                                            strings = AutoBuild.MasterConfig.DefaultCommands["build"] ?? new List <string>();
                                            foreach (string s in strings)
                                            {
                                                project.BuildCheckouts[branch].BuildCmd.Add(s);
                                            }
                                            //postbuild
                                            strings = AutoBuild.MasterConfig.DefaultCommands["postbuild"] ??
                                                      new List <string>();
                                            foreach (string s in strings)
                                            {
                                                project.BuildCheckouts[branch].ArchiveCmd.Add(s);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        List <string> strings;
                                        //prebuild
                                        strings = AutoBuild.MasterConfig.DefaultCommands["prebuild"] ??
                                                  new List <string>();
                                        foreach (string s in strings)
                                        {
                                            project.PreBuild.Add(s);
                                        }
                                        //build
                                        strings = AutoBuild.MasterConfig.DefaultCommands["build"] ?? new List <string>();
                                        foreach (string s in strings)
                                        {
                                            project.Build.Add(s);
                                        }
                                        //postbuild
                                        strings = AutoBuild.MasterConfig.DefaultCommands["postbuild"] ??
                                                  new List <string>();
                                        foreach (string s in strings)
                                        {
                                            project.PostBuild.Add(s);
                                        }
                                    }
                                }

                                //We're obviously adding a git repo for this project, so assign that for the project's version control
                                project.VersionControl = "git";

                                //Add the new project with the new ProjectInfo
                                AutoBuild.Instance.AddProject(repository, project);

                                //Start the wait period.
                                AutoBuild.StandBy(repository);
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    WriteLog("Error processing payload: {0} -- {1}\r\n{2}".format(e.GetType(), e.Message, e.StackTrace), EventLogEntryType.Error);
                    Listener.HandleException(e);
                    response.StatusCode = 500;
                    response.Close();
                }
            }, TaskCreationOptions.AttachedToParent);

            result.ContinueWith(antecedent =>
            {
                if (result.IsFaulted)
                {
                    var e = antecedent.Exception.InnerException;
                    WriteLog("Error handling commit message: {0} -- {1}\r\n{2}".format(e.GetType(), e.Message, e.StackTrace), EventLogEntryType.Error);
                    Listener.HandleException(e);
                    response.StatusCode = 500;
                    response.Close();
                }
            }, TaskContinuationOptions.OnlyOnFaulted);

            return(result);
        }
Esempio n. 38
0
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (ConfigTree.Nodes.Count > 0)
            {
                var ans = EditorUtil.ConfirmPrompt("Save before closing existing work?");
                if (ans == true)
                {
                    saveToolStripMenuItem_Click(sender, e);
                }
                if (ans == null)
                {
                    return;
                }
            }

            ConfigTree.Nodes.Clear();

            string loc = String.Empty;
            var regKey = Registry.LocalMachine.OpenSubKey(@"Software\CoApp\AutoBuild Service");
            if (regKey == null)
                loc = @"C:\AutoBuild";
            else
                loc = Path.GetDirectoryName((string) (regKey.GetValue("ConfigFile", @"C:\AutoBuild\config.conf")));

            var OFD = new OpenFileDialog();
            OFD.InitialDirectory = loc;
            OFD.Filter = @"AutoBuild Config files|config.conf|All Files (*.*)|*.*";
            OFD.FilterIndex = 1;
            OFD.RestoreDirectory = true;

            if (OFD.ShowDialog() != DialogResult.OK)
                return;

            try
            {
                if (!File.Exists(OFD.FileName))
                {
                    throw new FileNotFoundException("Unable to open specified file.", OFD.FileName);
                }
                TreeNode root = new TreeNode(RootNodeName);
                root.Tag = OFD.FileName;
                ConfigTree.Nodes.Add(root);

                // open file, produce and attach subnodes to root node for file
                UrlEncodedMessage UEM = new UrlEncodedMessage(File.ReadAllText(OFD.FileName),
                                                              AutoBuild.SerialSeperator, true);

                TreeNode top;

                if (UEM[".$T$"].Contains("AutoBuild_config"))
                {
                    var input = UEM.DeserializeTo<AutoBuild_config>();
                    top = new TreeNode(input.GetType().Name);
                    top.Tag = input;
                }
                else if (UEM[".$T$"].Contains("ProjectData"))
                {
                    var input = UEM.DeserializeTo<ProjectData>();
                    top = new TreeNode(input.GetType().Name);
                    top.Tag = input;
                }
                else
                {
                    Type type = Type.GetType(UEM[".$T$"]);
                    var obj = Activator.CreateInstance(type, true);
                    var input = UEM.DeserializeTo(obj);
                    top = new TreeNode(input.GetType().Name);
                    top.Tag = input;
                }

                root.AddChild(top);
                FillData(top);
            }
            catch (Exception E)
            {
                MessageBox.Show("Unable to open file.\n\n" + E.Message);
            }
        }
Esempio n. 39
0
        public override Task Post(HttpListenerResponse response, string relativePath, UrlEncodedMessage message)
        {
            var payload = (string)message["payload"];
            if (payload == null)
            {
                response.StatusCode = 500;
                response.Close();
                return "".AsResultTask();
            }

            var result = Task.Factory.StartNew(() =>
            {
                try
                {
                    dynamic json = JObject.Parse(payload);
                    WriteLog("MSG Process begin " + json.commits.Count);

                    string repository = (json.repository.name) ?? String.Empty;
                    string reference = json["ref"].ToString();

                    int count = json.commits.Count;
                    bool validTrigger = false;

                    for (int i = 0; i < count; i++)
                    {
                        string username = (json.commits[i].author.username ?? json.commits[i].author.name ?? new {Value = String.Empty}).Value;

                        if (!username.Equals((string)(AutoBuild.MasterConfig.VersionControlList["git"].Properties["username"]), StringComparison.CurrentCultureIgnoreCase))
                        {
                            validTrigger = true;
                        }
                    }

                    if (validTrigger)
                    {
                        AutoBuild.WriteVerbose("POST received: " + repository + " -- " + reference);

                        if (AutoBuild.Projects.ContainsKey(repository))
                        {
                            ProjectData project = AutoBuild.Projects[repository];
                            if (project.WatchRefs.IsNullOrEmpty() || project.WatchRefs.Contains(reference))
                                AutoBuild.StandBy(repository);
                        }
                        else
                        {
                            bool makeNew;
                            if (!Boolean.TryParse(AutoBuild.MasterConfig.VersionControlList["git"].Properties["NewFromHook"], out makeNew))
                                return;
                            if (makeNew)
                            {
                                /////Build new ProjectInfo info from commit message.
                                ProjectData project = new ProjectData();
                                project.SetName(repository);

                                project.Enabled = true;
                                project.KeepCleanRepo = AutoBuild.MasterConfig.DefaultCleanRepo;

                                // This section constructs the repo url to use...
                                string init_url = json.repository.url;
                                string proto = init_url.Substring(0, init_url.IndexOf("://") + 3);
                                init_url = init_url.Substring(proto.Length);
                                string host = init_url.Substring(0, init_url.IndexOf("/"));
                                string repo = init_url.Substring(init_url.IndexOf("/") + 1);
                                switch (((string)(AutoBuild.MasterConfig.VersionControlList["git"].Properties["url_style"])).ToLower())
                                {
                                    case "git":
                                        project.RepoURL = "git://" + host + "/" + repo;
                                        break;
                                    case "http":
                                        project.RepoURL = json.url;
                                        break;
                                    case "ssh":
                                        project.RepoURL = "git@" + host + ":" + repo;
                                        break;
                                    default:
                                        project.RepoURL = null;
                                        break;
                                }
                                // End repo url section

                                project.WatchRefs.AddRange(AutoBuild.MasterConfig.DefaultRefs);

                                if (!(AutoBuild.MasterConfig.DefaultCommands.IsNullOrEmpty()))
                                {

                                    if (project.WatchRefs.Count > 0)
                                    {
                                        foreach (string watchRef in project.WatchRefs)
                                        {
                                            string branch = watchRef.Substring(11);  //length of @"refs/heads/"
                                            project.BuildCheckouts[branch] = new ProjectData.CheckoutInfo();

                                            List<string> strings;
                                            //prebuild
                                            strings = AutoBuild.MasterConfig.DefaultCommands["prebuild"] ??
                                                      new List<string>();
                                            foreach (string s in strings)
                                            {
                                                project.BuildCheckouts[branch].PreCmd.Add(s);
                                            }
                                            //build
                                            project.BuildCheckouts[branch].BuildCmd.Add("Checkout"); // magic name
                                            strings = AutoBuild.MasterConfig.DefaultCommands["build"] ?? new List<string>();
                                            foreach (string s in strings)
                                            {
                                                project.BuildCheckouts[branch].BuildCmd.Add(s);
                                            }
                                            //postbuild
                                            strings = AutoBuild.MasterConfig.DefaultCommands["postbuild"] ??
                                                      new List<string>();
                                            foreach (string s in strings)
                                            {
                                                project.BuildCheckouts[branch].ArchiveCmd.Add(s);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        List<string> strings;
                                        //prebuild
                                        strings = AutoBuild.MasterConfig.DefaultCommands["prebuild"] ??
                                                  new List<string>();
                                        foreach (string s in strings)
                                        {
                                            project.PreBuild.Add(s);
                                        }
                                        //build
                                        strings = AutoBuild.MasterConfig.DefaultCommands["build"] ?? new List<string>();
                                        foreach (string s in strings)
                                        {
                                            project.Build.Add(s);
                                        }
                                        //postbuild
                                        strings = AutoBuild.MasterConfig.DefaultCommands["postbuild"] ??
                                                  new List<string>();
                                        foreach (string s in strings)
                                        {
                                            project.PostBuild.Add(s);
                                        }

                                    }
                                }

                                //We're obviously adding a git repo for this project, so assign that for the project's version control
                                project.VersionControl = "git";

                                //Add the new project with the new ProjectInfo
                                AutoBuild.Instance.AddProject(repository, project);

                                //Start the wait period.
                                AutoBuild.StandBy(repository);
                            }
                        }
                    }

                }
                catch (Exception e)
                {
                    WriteLog("Error processing payload: {0} -- {1}\r\n{2}".format(e.GetType(), e.Message, e.StackTrace), EventLogEntryType.Error);
                    Listener.HandleException(e);
                    response.StatusCode = 500;
                    response.Close();
                }
            }, TaskCreationOptions.AttachedToParent);

            result.ContinueWith(antecedent =>
            {
                if (result.IsFaulted)
                {
                    var e = antecedent.Exception.InnerException;
                    WriteLog("Error handling commit message: {0} -- {1}\r\n{2}".format(e.GetType(), e.Message, e.StackTrace), EventLogEntryType.Error);
                    Listener.HandleException(e);
                    response.StatusCode = 500;
                    response.Close();
                }
            }, TaskContinuationOptions.OnlyOnFaulted);

            return result;
        }