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 (); } }
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); }