Ejemplo n.º 1
0
        void loadSettings()
        {
            try {
                listLock.EnterWriteLock ();
                string configPath = ConfigPath ("UserAgent");

                if (File.Exists (configPath) == false)
                    return;

                using (TextReader reader = new StreamReader (new FileStream (configPath, FileMode.Open, FileAccess.Read))) {
                    string pattern;
                    while ((pattern = reader.ReadLine ()) != null) {
                        string[] parts = pattern.Split (new char[] { ' ' }, 3);
                        if (parts.Length != 3)
                            continue;

                        UserAgentRule rule = new UserAgentRule ();
                        rule.Domain = parts[0];
                        rule.Lang = parts[1];
                        rule.UserAgent = parts[2];
                        rule.Permanent = true;
                        if (rule.UserAgent.ToLowerInvariant () == "random") {
                            rule.Random = true;
                            rule.UserAgent = RandomUserAgent ();
                        }
                        staticAgent.Add (rule.Domain, rule);
                    }
                }
            } finally {
                listLock.ExitWriteLock ();
            }
        }
Ejemplo n.º 2
0
        public override Response Status(NameValueCollection httpGet, Request request)
        {
            Html html = Html.Format ("<p>Replaces the User-Agent and Accept-Language headers with random ones</p>");
            html += Html.Format ("<p><strong>Your: </strong> {0}</p>", request.GetHeader ("User-Agent"));
            html += Html.Format ("<p><strong>Random: </strong> {0}</p>", RandomUserAgent ());

            if (httpGet["delete"] != null) {
                try {
                    listLock.EnterWriteLock ();
                    staticAgent.Remove (httpGet["delete"]);
                } finally {
                    listLock.TryExitWriteLock ();
                }

                saveSettings ();
            }

            if (httpGet["action"] != null) {
                UserAgentRule r = new UserAgentRule ();
                r.Domain = httpGet["domain"];
                r.Lang = httpGet["lang"];
                if (httpGet["action"] == "Permanent")
                    r.Permanent = true;
                r.UserAgent = httpGet["agent"];
                if (r.UserAgent.ToLowerInvariant () == "random") {
                    r.UserAgent = RandomUserAgent ();
                    r.Random = true;
                }

                try {
                    listLock.EnterWriteLock ();
                    staticAgent.Add (r.Domain, r);
                } finally {
                    listLock.TryExitWriteLock ();
                }

                if (r.Permanent)
                    saveSettings ();
            }

            html += Html.Format (@"<form action=""?"" method=""get"">
                                <p><label for=""domain"">Domain</label>: <input type=""text"" name=""domain"" value="""" /></p>
                                <p><label for=""lang"">Language</label>: <input type=""text"" name=""lang"" value="""" /></p>
                                <p><label for=""agent"">User-Agent</label>: <input type=""text"" name=""agent"" value="""" />
                                    ""random"" = change every session.
                                    ""pass"" = pass through unmodified</p>
                                <input type=""submit"" name=""action"" value=""Permanent"" />
                                <input type=""submit"" name=""action"" value=""Temporary"" />
                            </form>");
            try {
                listLock.EnterReadLock ();

                foreach (UserAgentRule rule in staticAgent.Values) {
                    html += Html.Format ("<p>{0} <a href=\"?delete={1}\">delete</a></p>", rule, rule.Domain);
                }
            } finally {
                listLock.ExitReadLock ();
            }

            return WebUI.ResponseTemplate (ToString (), html);
        }