Load(messageid);\r
}\r
\r
+const bool Message::CheckForAdministrationBoard(const std::vector<std::string> &boards)\r
+{\r
+ std::string name;\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT BoardName FROM tblBoard INNER JOIN tblAdministrationBoard ON tblBoard.BoardID=tblAdministrationBoard.BoardID;");\r
+ st.Step();\r
+ \r
+ while(st.RowReturned())\r
+ {\r
+ st.ResultText(0,name);\r
+\r
+ if(std::find(boards.begin(),boards.end(),name)!=boards.end())\r
+ {\r
+ return true;\r
+ }\r
+ \r
+ st.Step();\r
+ }\r
+\r
+ return false;\r
+}\r
+\r
const std::string Message::GetNNTPArticleID() const\r
{\r
- return "<"+m_messageuuid+">";\r
+ return "<"+m_messageuuid+"@freenetproject.org>";\r
}\r
\r
const std::string Message::GetNNTPBody() const\r
{\r
rval+=" ";\r
}\r
- rval+="<"+(*j).second+">";\r
+ rval+="<"+(*j).second+"@freenetproject.org>";\r
}\r
rval+="\r\n";\r
}\r
return rval;\r
}\r
\r
+void Message::HandleAdministrationMessage()\r
+{\r
+ // only continue if this message was actually a reply to another message\r
+ if(m_inreplyto.size()>0)\r
+ {\r
+ int boardid=0;\r
+ std::string boardname="";\r
+ std::string identityname="";\r
+ int identityid;\r
+ int changemessagetrust=0;\r
+ int changetrustlisttrust=0;\r
+ int origmessagetrust=0;\r
+ int origtrustlisttrust=0;\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT tblBoard.BoardID,BoardName,ModifyLocalMessageTrust,ModifyLocalTrustListTrust FROM tblBoard INNER JOIN tblAdministrationBoard ON tblBoard.BoardID=tblAdministrationBoard.BoardID;");\r
+ st.Step();\r
+\r
+ while(st.RowReturned())\r
+ {\r
+ st.ResultInt(0,boardid);\r
+ st.ResultText(1,boardname);\r
+ st.ResultInt(2,changemessagetrust);\r
+ st.ResultInt(3,changetrustlisttrust);\r
+\r
+ if(std::find(m_boards.begin(),m_boards.end(),boardname)!=m_boards.end())\r
+ {\r
+ SQLite3DB::Statement origmess=m_db->Prepare("SELECT tblIdentity.IdentityID,tblIdentity.Name,tblIdentity.LocalMessageTrust,tblIdentity.LocalTrustListTrust FROM tblIdentity INNER JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.MessageUUID=?;");\r
+ origmess.Bind(0,m_inreplyto[0]);\r
+ origmess.Step();\r
+\r
+ if(origmess.RowReturned())\r
+ {\r
+ origmess.ResultInt(0,identityid);\r
+ origmess.ResultText(1,identityname);\r
+ origmess.ResultInt(2,origmessagetrust);\r
+ origmess.ResultInt(3,origtrustlisttrust);\r
+\r
+ origmessagetrust+=changemessagetrust;\r
+ origtrustlisttrust+=changetrustlisttrust;\r
+\r
+ if(origmessagetrust<0)\r
+ {\r
+ origmessagetrust=0;\r
+ }\r
+ if(origmessagetrust>100)\r
+ {\r
+ origmessagetrust=100;\r
+ }\r
+ if(origtrustlisttrust<0)\r
+ {\r
+ origtrustlisttrust=0;\r
+ }\r
+ if(origtrustlisttrust>100)\r
+ {\r
+ origtrustlisttrust=100;\r
+ }\r
+\r
+ // update new trust levels\r
+ SQLite3DB::Statement update=m_db->Prepare("UPDATE tblIdentity SET LocalMessageTrust=?, LocalTrustListTrust=? WHERE IdentityID=?;");\r
+ update.Bind(0,origmessagetrust);\r
+ update.Bind(1,origtrustlisttrust);\r
+ update.Bind(2,identityid);\r
+ update.Step();\r
+\r
+ // insert message to show what id was changed and what current levels are\r
+ int lastid=0;\r
+ std::string messagebody;\r
+ std::string messagetruststr="";\r
+ std::string trustlisttruststr="";\r
+ UUIDGenerator uuid;\r
+ DateTime now;\r
+ now.SetToGMTime();\r
+ StringFunctions::Convert(origmessagetrust,messagetruststr);\r
+ StringFunctions::Convert(origtrustlisttrust,trustlisttruststr);\r
+ messagebody="Trust Changed for "+identityname+"\r\n";\r
+ messagebody+="Local Message Trust : "+messagetruststr+"\r\n";\r
+ messagebody+="Local Trust List Trust : "+trustlisttruststr+"\r\n";\r
+ SQLite3DB::Statement insert=m_db->Prepare("INSERT INTO tblMessage(FromName,MessageDate,MessageTime,Subject,MessageUUID,ReplyBoardID,Body) VALUES('FMS',?,?,?,?,?,?);");\r
+ insert.Bind(0,now.Format("%Y-%m-%d"));\r
+ insert.Bind(1,now.Format("%H:%M:%S"));\r
+ insert.Bind(2,identityname+" Trust Changed");\r
+ insert.Bind(3,uuid.Generate());\r
+ insert.Bind(4,boardid);\r
+ insert.Bind(5,messagebody);\r
+ insert.Step(true);\r
+ lastid=insert.GetLastInsertRowID();\r
+\r
+ insert=m_db->Prepare("INSERT INTO tblMessageBoard(MessageID,BoardID) VALUES(?,?);");\r
+ insert.Bind(0,lastid);\r
+ insert.Bind(1,boardid);\r
+ insert.Step();\r
+\r
+ m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"Message::HandleAdministrationMessage updated "+identityname+" to "+messagetruststr+" , "+trustlisttruststr);\r
+\r
+ }\r
+ }\r
+\r
+ st.Step();\r
+ }\r
+ }\r
+\r
+}\r
+\r
void Message::Initialize()\r
{\r
m_messageid=-1;\r
st.ResultText(7,m_fromname);\r
st.Finalize();\r
\r
+ // strip off any \r\n in subject\r
+ m_subject=StringFunctions::Replace(m_subject,"\r\n","");\r
+\r
// get board list\r
st=m_db->Prepare("SELECT tblBoard.BoardName FROM tblBoard INNER JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID WHERE tblMessageBoard.MessageID=?;");\r
st.Bind(0,messageid);\r
\r
const bool Message::LoadNext(const long messageid, const long boardid)\r
{\r
- std::string sql="SELECT MessageID FROM tblMessage WHERE MessageID>?";\r
+ std::string sql="SELECT tblMessage.MessageID FROM tblMessage INNER JOIN tblMessageBoard ON tblMessage.MessageID=tblMessageBoard.MessageID WHERE tblMessage.MessageID>?";\r
if(boardid!=-1)\r
{\r
- sql+=" AND BoardID=?";\r
+ sql+=" AND tblMessageBoard.BoardID=?";\r
}\r
sql+=";";\r
\r
\r
const bool Message::LoadPrevious(const long messageid, const long boardid)\r
{\r
- std::string sql="SELECT MessageID FROM tblMessage WHERE MessageID<?";\r
+ std::string sql="SELECT tblMessage.MessageID FROM tblMessage INNER JOIN tblMessageBoard ON tblMessage.MessageID=tblMessageBoard.MessageID WHERE tblMessage.MessageID<?";\r
if(boardid!=-1)\r
{\r
- sql+=" AND BoardID=?";\r
+ sql+=" AND tblMessageBoard.BoardID=?";\r
}\r
- sql+=";";\r
+ sql+=" ORDER BY tblMessage.MessageID DESC;";\r
\r
SQLite3DB::Statement st=m_db->Prepare(sql);\r
\r
if(mime.GetFieldValue("From"))\r
{\r
m_fromname=mime.GetFieldValue("From");\r
+ // remove any path folding\r
+ m_fromname=StringFunctions::Replace(m_fromname,"\r\n","");\r
// strip off everything between () and <> and any whitespace\r
std::string::size_type startpos=m_fromname.find("(");\r
std::string::size_type endpos;\r
}\r
}\r
m_fromname=StringFunctions::TrimWhitespace(m_fromname);\r
+\r
+ // trim off " from beginning and end\r
+ if(m_fromname.size()>0 && m_fromname[0]=='\"')\r
+ {\r
+ m_fromname.erase(0,1);\r
+ }\r
+ if(m_fromname.size()>0 && m_fromname[m_fromname.size()-1]=='\"')\r
+ {\r
+ m_fromname.erase(m_fromname.size()-1,1);\r
+ }\r
+\r
+ m_fromname=StringFunctions::TrimWhitespace(m_fromname);\r
}\r
else\r
{\r
if(mime.GetFieldValue("Newsgroups"))\r
{\r
std::string temp=mime.GetFieldValue("Newsgroups");\r
+ // remove any path folding\r
+ temp=StringFunctions::Replace(temp,"\r\n","");\r
std::vector<std::string> parts;\r
StringFunctions::SplitMultiple(temp,", \t",parts);\r
for(std::vector<std::string>::iterator i=parts.begin(); i!=parts.end(); i++)\r
if(mime.GetFieldValue("Followup-To"))\r
{\r
m_replyboardname=mime.GetFieldValue("Followup-To");\r
+ // remove any path folding\r
+ m_replyboardname=StringFunctions::Replace(m_replyboardname,"\r\n","");\r
}\r
else\r
{\r
if(mime.GetFieldValue("Subject"))\r
{\r
m_subject=mime.GetFieldValue("Subject");\r
+ // remove any path folding\r
+ m_subject=StringFunctions::Replace(m_subject,"\r\n","");\r
}\r
else\r
{\r
if(mime.GetFieldValue("References"))\r
{\r
std::string temp=mime.GetFieldValue("References");\r
+ // remove any path folding\r
+ temp=StringFunctions::Replace(temp,"\r\n","");\r
std::vector<std::string> parts;\r
int count=0;\r
StringFunctions::SplitMultiple(temp,", \t",parts);\r
for(std::vector<std::string>::reverse_iterator i=parts.rbegin(); i!=parts.rend(); i++)\r
{\r
+ // get rid of < and > and any whitespace\r
(*i)=StringFunctions::Replace((*i),"<","");\r
(*i)=StringFunctions::Replace((*i),">","");\r
(*i)=StringFunctions::TrimWhitespace((*i));\r
+ // erase @ and everything after\r
+ if((*i).find("@")!=std::string::npos)\r
+ {\r
+ (*i).erase((*i).find("@"));\r
+ }\r
if((*i)!="")\r
{\r
m_inreplyto[count++]=(*i);\r
\r
void Message::StartFreenetInsert()\r
{\r
+\r
MessageXML xml;\r
int localidentityid=-1;\r
\r