#include <vector>\r
#include "pthreadwrapper/thread.h"\r
\r
-#define FMS_VERSION "0.2.4"\r
+#define FMS_VERSION "0.2.5"\r
\r
// opens database and creates tables and initial inserts if necessary\r
void SetupDB();\r
directory as the fms binary. In the template, the string [LINKS] will be\r
replaced by a <ul> list of links and [CONTENT] will be replaced by the page\r
content. The Freesite will be inserted once a day and contain your last 10\r
-posts and your trust list if you are publishing it.\r
+posts and your trust list if you are publishing it. The site will be inserted\r
+to a USK accessible via: USK@yourpublickey.../fms/0/\r
\r
TRUST\r
-----\r
IdentityXML xml;\r
long identityid;\r
long index;\r
+ std::string name="";\r
\r
now.SetToGMTime();\r
StringFunctions::Split(message["Identifier"],"|",idparts);\r
{\r
\r
st=m_db->Prepare("UPDATE tblIdentity SET Name=?, SingleUse=?, LastSeen=?, PublishTrustList=?, PublishBoardList=? WHERE IdentityID=?");\r
- st.Bind(0,xml.GetName());\r
+ name=xml.GetName();\r
+ if(name.size()>40)\r
+ {\r
+ name.erase(40);\r
+ }\r
+ st.Bind(0,name);\r
if(xml.GetSingleUse()==true)\r
{\r
st.Bind(1,"true");\r
TrustListTrustComment TEXT\\r
);");\r
\r
+ db->Execute("CREATE INDEX IF NOT EXISTS idxPeerTrust_IdentityID ON tblPeerTrust (IdentityID);");\r
+ db->Execute("CREATE INDEX IF NOT EXISTS idxPeerTrust_TargetIdentityID ON tblPeerTrust (TargetIdentityID);");\r
+\r
db->Execute("CREATE TABLE IF NOT EXISTS tblBoard(\\r
BoardID INTEGER PRIMARY KEY,\\r
BoardName TEXT UNIQUE,\\r
MessageIndex INTEGER\\r
);");\r
\r
+ db->Execute("CREATE INDEX IF NOT EXISTS idxMessage_IdentityID ON tblMessage (IdentityID);");\r
+\r
db->Execute("CREATE TABLE IF NOT EXISTS tblMessageReplyTo(\\r
MessageID INTEGER,\\r
ReplyToMessageUUID TEXT,\\r
BoardID INTEGER\\r
);");\r
\r
+ db->Execute("CREATE INDEX IF NOT EXISTS idxMessageBoard_BoardID ON tblMessageBoard (BoardID);");\r
+\r
db->Execute("CREATE TABLE IF NOT EXISTS tblMessageListRequests(\\r
IdentityID INTEGER,\\r
Day DATE,\\r
GROUP BY tblBoard.BoardID;");\r
\r
// calculates peer trust\r
- // do the (MessageTrust+1)*LocalTrustListTrust/(MessageTrust+1)/100.0 - so it MessageTrust or TrustListTrust is NULL, the calc will be NULL and it won't be included at all in the average\r
+ // do the (MessageTrust+1)*LocalTrustListTrust/(MessageTrust+1)/100.0 - so if MessageTrust or TrustListTrust is NULL, the calc will be NULL and it won't be included at all in the average\r
// need the +1 so that when the values are 0 the result is not 0\r
db->Execute("DROP VIEW IF EXISTS vwCalculatedPeerTrust;");\r
db->Execute("CREATE VIEW IF NOT EXISTS vwCalculatedPeerTrust AS \\r
\r
date.SetToGMTime();\r
// insert SomeDude's public key\r
- db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,LocalTrustListTrust) VALUES('SSK@NuBL7aaJ6Cn4fB7GXFb9Zfi8w1FhPyW3oKgU9TweZMw,iXez4j3qCpd596TxXiJgZyTq9o-CElEuJxm~jNNZAuA,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"',51);");\r
+ db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded,LocalTrustListTrust) VALUES('SSK@NuBL7aaJ6Cn4fB7GXFb9Zfi8w1FhPyW3oKgU9TweZMw,iXez4j3qCpd596TxXiJgZyTq9o-CElEuJxm~jNNZAuA,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"',50);");\r
// insert Shadow Panther's public key\r
db->Execute("INSERT INTO tblIdentity(PublicKey,DateAdded) VALUES('SSK@~mimyB1kmH4f7Cgsd2wM2Qv2NxrZHRMM6IY8~7EWRVQ,fxTKkR0TYhgMYb-vEGAv55sMOxCGD2xhE4ZxWHxdPz4,AQACAAE/','"+date.Format("%Y-%m-%d %H:%M:%S")+"');");\r
// insert garfield's public key\r
}\r
if((*queryvars.find("formaction")).second=="remove0messages")\r
{\r
- m_db->Execute("DELETE FROM tblBoard WHERE BoardID IN (SELECT BoardID FROM vwBoardStats WHERE MessageCount=0);");\r
+ m_db->Execute("DELETE FROM tblBoard WHERE BoardID IN (SELECT BoardID FROM vwBoardStats WHERE MessageCount=0 AND BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard));");\r
}\r
if((*queryvars.find("formaction")).second=="update")\r
{\r
content+="<h2>Create Identity</h2>";\r
content+="<form name=\"frmcreateidentity\" method=\"POST\">";\r
content+="<input type=\"hidden\" name=\"formaction\" value=\"create\">";\r
- content+="Name : <input type=\"text\" name=\"name\">";\r
+ content+="Name : <input type=\"text\" name=\"name\" maxlength=\"40\">";\r
content+=" <input type=\"submit\" value=\"Create\">";\r
content+="</form>";\r
}\r
\r
content+="<hr>";\r
\r
- content+="<form name=\"frmlocalidentity\" method=\"POST\">";\r
- content+="<input type=\"hidden\" name=\"formaction\" value=\"update\">";\r
- content+="<table><tr><td></td><th>Name</th><th>Single Use</th><th>Publish Trust List</th><th>Publish Board List</th><th>Publish Freesite</th><th>Announced? *</th></tr>";\r
+// content+="<form name=\"frmlocalidentity\" method=\"POST\">";\r
+// content+="<input type=\"hidden\" name=\"formaction\" value=\"update\">";\r
+ content+="<table><tr><th>Name</th><th>Single Use</th><th>Publish Trust List</th><th>Publish Board List</th><th>Publish Freesite</th><th>Announced? *</th></tr>";\r
\r
SQLite3DB::Statement st=m_db->Prepare("SELECT LocalIdentityID,tblLocalIdentity.Name,tblLocalIdentity.PublicKey,tbLLocalIdentity.PublishTrustList,tblLocalIdentity.SingleUse,tblLocalIdentity.PublishBoardList,tblIdentity.IdentityID,tblLocalIdentity.PublishFreesite FROM tblLocalIdentity LEFT JOIN tblIdentity ON tblLocalIdentity.PublicKey=tblIdentity.PublicKey ORDER BY tblLocalIdentity.Name;");\r
st.Step();\r
}\r
\r
content+="<tr>";\r
- content+="<td><input type=\"checkbox\" name=\"chkidentityid["+countstr+"]\" value=\""+id+"\"></td>";\r
- content+="<td title=\""+publickey+"\">"+SanitizeOutput(name+keypart)+"...</td>";\r
+// content+="<td><input type=\"checkbox\" name=\"chkidentityid["+countstr+"]\" value=\""+id+"\"></td>";\r
+ content+="<td title=\""+publickey+"\"><form name=\"frmupdate\""+countstr+"\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"update\"><input type=\"hidden\" name=\"chkidentityid["+countstr+"]\" value=\""+id+"\">"+SanitizeOutput(name+keypart)+"...</td>";\r
content+="<td>"+CreateTrueFalseDropDown("singleuse["+countstr+"]",singleuse)+"</td>";\r
content+="<td>"+CreateTrueFalseDropDown("publishtrustlist["+countstr+"]",publishtrustlist)+"</td>";\r
content+="<td>"+CreateTrueFalseDropDown("publishboardlist["+countstr+"]",publishboardlist)+"</td>";\r
{\r
content+="<td>Yes</td>";\r
}\r
+ content+="<td><input type=\"submit\" value=\"Update\"></form></td>";\r
+ content+="<td><form name=\"frmdel\""+countstr+"\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"delete\"><input type=\"hidden\" name=\"chkidentityid["+countstr+"]\" value=\""+id+"\"><input type=\"submit\" value=\"Delete\"></form></td>";\r
content+="</tr>";\r
st.Step();\r
count++;\r
}\r
\r
- content+="<tr><td colspan=\"5\"><center><input type=\"submit\" value=\"Update Selected\"> <input type=\"submit\" value=\"Delete Selected\"></td></tr>";\r
+// content+="<tr><td colspan=\"5\"><center><input type=\"submit\" value=\"Update Selected\"> <input type=\"submit\" value=\"Delete Selected\" onClick=\"if(confirm('Delete Selected Identities?')){frmlocalidentity.formaction.value='delete';}else{return false;}\"></td></tr>";\r
content+="</table>";\r
content+="<p class=\"paragraph\">* An identity is considered successfully announced when you have downloaded a trust list from someone that contains the identity.</p>";\r
content+="<p class=\"paragraph\">Single Use Identities will automatically be deleted 7 days after creation.</p>";\r
#include "../../../include/http/pages/peerdetailspage.h"\r
#include "../../../include/stringfunctions.h"\r
+#include "../../../include/option.h"\r
\r
#ifdef XMEM\r
#include <xmem.h>\r
std::string lastseen="";\r
std::string dateadded="";\r
std::string addedmethod="";\r
+ std::string usk="";\r
+ std::string fcphost="";\r
\r
if(queryvars.find("identityid")!=queryvars.end() && (*queryvars.find("identityid")).second!="")\r
{\r
del.Step();\r
}\r
\r
+ Option::Instance()->Get("FCPHost",fcphost);\r
+\r
SQLite3DB::Statement st=m_db->Prepare("SELECT Name,PublicKey,DateAdded,LastSeen,AddedMethod FROM tblIdentity WHERE IdentityID=?;");\r
st.Bind(0,identityid);\r
st.Step();\r
st.ResultText(3,lastseen);\r
st.ResultText(4,addedmethod);\r
\r
+ usk=publickey;\r
+ if(usk.find("SSK@")==0)\r
+ {\r
+ usk.erase(0,3);\r
+ usk="USK"+usk+"/fms/0/";\r
+ }\r
+\r
content+="<tr><td>Name</td><td>"+SanitizeOutput(name)+"</td></tr>";\r
content+="<tr><td>Public Key</td><td class=\"smaller\">"+SanitizeOutput(publickey)+"</td></tr>";\r
+ content+="<tr><td>Freesite</td><td class=\"smaller\"><a href=\"http://"+fcphost+":8888/"+SanitizeOutput(usk)+"\">"+SanitizeOutput(usk)+"</a></td></tr>";\r
content+="<tr><td>Date Added</td><td>"+dateadded+"</td></tr>";\r
content+="<tr><td>Last Seen</td><td>"+lastseen+"</td></tr>";\r
content+="<tr><td>Added Method</td><td class=\"smaller\">"+SanitizeOutput(addedmethod)+"</td></tr>";\r
{\r
content+="<input type=\"hidden\" name=\"namesearch\" value=\""+SanitizeOutput(namesearch)+"\">";\r
}\r
- content+="<table>";\r
+ content+="<table class=\"small90\">";\r
content+="<tr><th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"Name",ReverseSort("Name",sortby,sortorder))+"\">Name</a></th>";\r
content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalMessageTrust",ReverseSort("LocalMessageTrust",sortby,sortorder))+"\">Local Message Trust</a></th>";\r
content+="<th>Message Comment</th>";\r
content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerMessageTrust",ReverseSort("PeerMessageTrust",sortby,sortorder))+"\">Peer Message Trust</a></th>";\r
content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalTrustListTrust",ReverseSort("LocalTrustListTrust",sortby,sortorder))+"\">Local Trust List Trust</a></th>";\r
content+="<th>Trust Comment</th>";\r
- content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerTrustListTrust",ReverseSort("PeerTrustListTrust",sortby,sortorder))+"\">Peer Trust List Trust</a></th></tr>";\r
+ content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerTrustListTrust",ReverseSort("PeerTrustListTrust",sortby,sortorder))+"\">Peer Trust List Trust</a></th>";\r
+ content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"MessageCount",ReverseSort("MessageCount",sortby,sortorder))+"\">Message Count</a></th>";\r
+ content+="</tr>\r\n";\r
\r
// get count of identities we are showing\r
sql="SELECT COUNT(*) FROM tblIdentity";\r
st.ResultInt(0,identitycount);\r
st.Finalize();\r
\r
- sql="SELECT IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey,MessageTrustComment,TrustListTrustComment FROM tblIdentity";\r
+ sql="SELECT tblIdentity.IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey,MessageTrustComment,TrustListTrustComment,COUNT(MessageID) AS 'MessageCount' FROM tblIdentity LEFT JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID";\r
if(namesearch!="")\r
{\r
sql+=" WHERE Name LIKE '%' || ? || '%'";\r
}\r
+ sql+=" GROUP BY tblIdentity.IdentityID";\r
sql+=" ORDER BY";\r
if(sortby=="Name")\r
{\r
std::string keypart="";\r
std::string messagetrustcomment="";\r
std::string trustlisttrustcomment="";\r
+ std::string messagecountstr="";\r
\r
StringFunctions::Convert(count,countstr);\r
\r
st.ResultText(6,publickey);\r
st.ResultText(7,messagetrustcomment);\r
st.ResultText(8,trustlisttrustcomment);\r
+ st.ResultText(9,messagecountstr);\r
\r
if(publickey.size()>8)\r
{\r
content+="</td>";\r
content+="<td "+GetClassString(localmessagetrust)+">";\r
content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";\r
- content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\"></td>";\r
+ content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\" class=\"small90\"></td>";\r
content+="<td "+GetClassString(localmessagetrust)+">";\r
content+="<input type=\"hidden\" name=\"oldmessagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\">";\r
- content+="<input type=\"text\" name=\"messagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\" maxlength=\"50\">";\r
+ content+="<input type=\"text\" name=\"messagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\" maxlength=\"50\" class=\"small90\">";\r
content+="</td>"; \r
content+="<td "+GetClassString(peermessagetrust)+">";\r
content+=peermessagetrust+"</td>";\r
content+="<td "+GetClassString(localtrustlisttrust)+">";\r
content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";\r
- content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\"></td>";\r
+ content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\" class=\"small90\"></td>";\r
content+="<td "+GetClassString(localtrustlisttrust)+">";\r
content+="<input type=\"hidden\" name=\"oldtrustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\">";\r
- content+="<input type=\"text\" name=\"trustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\" maxlength=\"50\">";\r
+ content+="<input type=\"text\" name=\"trustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\" maxlength=\"50\" class=\"small90\">";\r
content+="</td>";\r
content+="<td "+GetClassString(peertrustlisttrust)+">";\r
content+=peertrustlisttrust+"</td>";\r
- content+="</tr>";\r
+ content+="<td>"+messagecountstr+"</td>";\r
+ content+="</tr>\r\n";\r
st.Step();\r
count++;\r
}\r
}\r
if(startrow+rowsperpage<identitycount)\r
{\r
- while(cols<4)\r
+ while(cols<5)\r
{\r
content+="<td></td>";\r
cols++;\r
th { padding-left:5px; padding-right:5px; }\r
td { padding-left:5px; padding-right:5px; }\r
\r
+.small90 {\r
+ font-size:90%;\r
+ }\r
+\r
+.small80 {\r
+ font-size:80%;\r
+ }\r
+ \r
+.small70 {\r
+ font-size:70%;\r
+ }\r
+\r
</style>\r
</head>\r
\r