/n3c/N3C.Site/Handler/TrackBackHandler.ashx.cs
C# | 163 lines | 135 code | 14 blank | 14 comment | 11 complexity | 54af12bf7e2e501c0499fe6b182de678 MD5 | raw file
Possible License(s): AGPL-3.0, LGPL-2.1
- using System;
- using System.Collections.Generic;
- using System.Web;
- using System.Web.Services;
- using System.Xml;
- using N3C.DAO;
- using N3C.POCO;
- using N3C.Utils;
-
- namespace N3C.Site.Handler
- {
- /// <summary>
- /// $codebehindclassname$ ?????
- /// </summary>
- [WebService(Namespace = "http://tempuri.org/")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- public class TrackBackHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
- {
-
- public void ProcessRequest(HttpContext ctx)
- {
- ctx.Response.ContentType = "text/xml";
- XmlDocument xmlDoc;
- XmlNode root;
- XmlElement node;
- EntryCmt objEntryCmt;
- EntryCmtDAO daoEntryCmt;
-
- //ctx.Response.Write("Hello World");
- //???????
- Dictionary<string, string> customConfig = N3Cconst.LoadCustomConfig();
- xmlDoc = new XmlDocument();
- xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null));
- //????Root???
- xmlDoc.AppendChild(xmlDoc.CreateElement(null, "response", null));
- root = xmlDoc.SelectSingleNode("response");
- if (customConfig[N3Cconst.OpenTrackBack] == "true")
- {
- if (ctx.Request.RequestType == "POST")
- {
- //initialize spam session,for a session life,
- //not more than 2 trackback can be posted here
- //otherwise,deneied.
- int entryId = 0;
- Int32.TryParse(ctx.Request["id"], out entryId);
- if (entryId > 0 && null != new viewEntryDAO().Find(entryId))
- {
- if (null == ctx.Session["TBUser"]) ctx.Session["TBUser"] = 0;
- if (Convert.ToInt32(ctx.Session["TBUser"]) > 1)
- {
- node = xmlDoc.CreateElement("error");
- node.InnerText = "1";
- root.AppendChild(node);
-
- node = xmlDoc.CreateElement("message");
- node.InnerText = "??????,????SPAM";
- root.AppendChild(node);
- }
- else
- {
- string tbTitle = ctx.Request.Form["title"];
- string tbUrl = ctx.Request.Form["url"];
- string tbContent = ctx.Request.Form["excerpt"];
- string tbBlogName = ctx.Request.Form["blog_name"];
- daoEntryCmt = new EntryCmtDAO();
-
- if (!daoEntryCmt.IsExistTrackback(entryId, tbUrl))
- {
- //create a comment of entry as trackback
- objEntryCmt = new EntryCmt();
- objEntryCmt.AddTime = DateTime.Now;
- objEntryCmt.Author = tbBlogName;
- objEntryCmt.EntryId = entryId;
- objEntryCmt.IsPublic = 1;
- objEntryCmt.UserEmail = customConfig[N3Cconst.PublicEmail];
- objEntryCmt.IP = ctx.Request.UserHostAddress;
- objEntryCmt.UserSite = tbUrl;
- objEntryCmt.TrackBackUrl = tbUrl;
- objEntryCmt.Content = "<h3>" + tbTitle + "</h3>" + tbContent;
- try
- {
- daoEntryCmt.Create(objEntryCmt);
- //????????
- UtilModel.ClearCache(N3Cconst.CacheRecentCmt);
- //??????
- node = xmlDoc.CreateElement("error");
- node.InnerText = "0";
- root.AppendChild(node);
- //????TRACK URL?????,??2?
- ctx.Session["TBUser"] = 1 + Convert.ToInt32(ctx.Session["TBUser"]);
- }
- catch (Exception)
- {
- node = xmlDoc.CreateElement("error");
- node.InnerText = "1";
- root.AppendChild(node);
-
- node = xmlDoc.CreateElement("message");
- node.InnerText = "??TrackBack??";
- root.AppendChild(node);
- }
- }
- else
- {
- node = xmlDoc.CreateElement("error");
- node.InnerText = "1";
- root.AppendChild(node);
-
- node = xmlDoc.CreateElement("message");
- node.InnerText = "?URL?????TrackBack,??????";
- root.AppendChild(node);
- }
- }
- }
- else
- {
- node = xmlDoc.CreateElement("error");
- node.InnerText = "1";
- root.AppendChild(node);
-
- node = xmlDoc.CreateElement("message");
- node.InnerText = "?????ID";
- root.AppendChild(node);
-
- }
- }
- else
- {
- node = xmlDoc.CreateElement("error");
- node.InnerText = "1";
- root.AppendChild(node);
-
- node = xmlDoc.CreateElement("message");
- node.InnerText = "???????";
- root.AppendChild(node);
- }
- }
- else
- {
- node = xmlDoc.CreateElement("error");
- node.InnerText = "1";
- root.AppendChild(node);
-
- node = xmlDoc.CreateElement("message");
- node.InnerText = "?????TrackBack??";
- root.AppendChild(node);
- }
-
- //response XML
- xmlDoc.Save(ctx.Response.OutputStream);
- ctx.Response.End();
-
- }
-
- public bool IsReusable
- {
- get
- {
- return false;
- }
- }
- }
- }