version 0.3.13
[fms.git] / src / http / pages / announceidentitypage.cpp
index 710904c..7858d88 100644 (file)
@@ -1,6 +1,9 @@
 #include "../../../include/http/pages/announceidentitypage.h"\r
 #include "../../../include/stringfunctions.h"\r
-#include "../../../include/datetime.h"\r
+#include "../../../include/global.h"\r
+\r
+#include <Poco/DateTime.h>\r
+#include <Poco/DateTimeFormatter.h>\r
 \r
 #ifdef XMEM\r
        #include <xmem.h>\r
@@ -23,7 +26,7 @@ const std::string AnnounceIdentityPage::CreateLocalIdentityDropDown(const std::s
                st.ResultText(1,name);\r
                st.ResultText(2,pubkey);\r
 \r
-               rval+="<option value=\""+id+"\" title=\""+pubkey+"\">"+name+"</option>";\r
+               rval+="<option value=\""+id+"\" title=\""+pubkey+"\">"+SanitizeOutput(CreateShortIdentityName(name,pubkey))+"</option>";\r
                st.Step();\r
        }\r
        rval+="</select>";\r
@@ -32,7 +35,7 @@ const std::string AnnounceIdentityPage::CreateLocalIdentityDropDown(const std::s
 \r
 const std::string AnnounceIdentityPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
 {\r
-       DateTime date;\r
+       Poco::DateTime date;\r
        std::string content;\r
        int shown=0;\r
        std::string countstr="";\r
@@ -40,8 +43,10 @@ const std::string AnnounceIdentityPage::GeneratePage(const std::string &method,
        std::string lastid="";\r
        std::string thisid="";\r
        std::string day="";\r
+       int requestindex=0;\r
+       bool willshow=false;\r
 \r
-       if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="announce")\r
+       if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="announce" && ValidateFormPassword(queryvars))\r
        {\r
                SQLite3DB::Statement insert=m_db->Prepare("INSERT INTO tblIdentityIntroductionInserts(LocalIdentityID,Day,UUID,Solution) VALUES(?,?,?,?);");\r
                std::string localidentityidstr="";\r
@@ -76,19 +81,17 @@ const std::string AnnounceIdentityPage::GeneratePage(const std::string &method,
 \r
        content+="<h2>Announce Identity</h2>";\r
        content+="<form name=\"frmannounce\" method=\"POST\">";\r
+       content+=CreateFormPassword();\r
        content+="<input type=\"hidden\" name=\"formaction\" value=\"announce\">";\r
        content+="<table>";\r
        content+="<tr><td colspan=\"4\"><center>Select Identity : ";\r
        content+=CreateLocalIdentityDropDown("localidentityid","");\r
        content+="</td></tr>";\r
-       content+="<tr><td colspan=\"4\"><center>Type the answers of a few puzzles</td></tr>";\r
+       content+="<tr><td colspan=\"4\"><center>Type the answers of a few puzzles.  The puzzles are case sensitive.  Getting announced will take some time.  DO NOT continuously solve captchas.  Solve 30 at most, wait a day, and if your identity has not been announced, repeat until it is.</td></tr>";\r
        content+="<tr>";\r
 \r
-       //TODO if we are already inserting a solution for an identity - we shouldn't select any puzzles that are older than the one we are inserting\r
-\r
-       date.SetToGMTime();\r
-       date.Add(0,0,0,-1);\r
-       SQLite3DB::Statement st=m_db->Prepare("SELECT UUID,Day,IdentityID FROM tblIntroductionPuzzleRequests WHERE UUID NOT IN (SELECT UUID FROM tblIdentityIntroductionInserts) AND UUID NOT IN (SELECT UUID FROM tblIntroductionPuzzleInserts) AND Day>='"+date.Format("%Y-%m-%d")+"' AND Found='true' ORDER BY IdentityID, Day DESC, RequestIndex DESC;");\r
+       date-=Poco::Timespan(1,0,0,0,0);\r
+       SQLite3DB::Statement st=m_db->Prepare("SELECT UUID,Day,IdentityID,RequestIndex FROM tblIntroductionPuzzleRequests WHERE UUID NOT IN (SELECT UUID FROM tblIdentityIntroductionInserts) AND UUID NOT IN (SELECT UUID FROM tblIntroductionPuzzleInserts) AND Day>='"+Poco::DateTimeFormatter::format(date,"%Y-%m-%d")+"' AND Found='true' ORDER BY IdentityID, Day DESC, RequestIndex DESC;");\r
        st.Step();\r
 \r
        if(st.RowReturned()==false)\r
@@ -101,8 +104,25 @@ const std::string AnnounceIdentityPage::GeneratePage(const std::string &method,
                st.ResultText(0,uuid);\r
                st.ResultText(1,day);\r
                st.ResultText(2,thisid);\r
+               st.ResultInt(3,requestindex);\r
+\r
+               // if we are already inserting a solution for an identity - we shouldn't show any puzzles that are older than the one we are inserting\r
+               // get the last index # we are inserting this day from this identity\r
+               // if the index here is greater than the index in the st statement, we will skip this puzzle because we are already inserting a puzzle with a greater index\r
+               willshow=true;\r
+               SQLite3DB::Statement st2=m_db->Prepare("SELECT MAX(RequestIndex) FROM tblIdentityIntroductionInserts INNER JOIN tblIntroductionPuzzleRequests ON tblIdentityIntroductionInserts.UUID=tblIntroductionPuzzleRequests.UUID WHERE tblIdentityIntroductionInserts.Day=? AND tblIdentityIntroductionInserts.UUID IN (SELECT UUID FROM tblIntroductionPuzzleRequests WHERE IdentityID=? AND Day=?) GROUP BY tblIdentityIntroductionInserts.Day;");\r
+               st2.Step();\r
+               if(st2.RowReturned()==true)\r
+               {\r
+                       int index=0;\r
+                       st2.ResultInt(0,index);\r
+                       if(index>=requestindex)\r
+                       {\r
+                               willshow=false;\r
+                       }\r
+               }\r
 \r
-               if(thisid!=lastid)\r
+               if(willshow && thisid!=lastid)\r
                {\r
                        StringFunctions::Convert(shown,countstr);\r
                        if(shown>0 && shown%4==0)\r
@@ -115,7 +135,7 @@ const std::string AnnounceIdentityPage::GeneratePage(const std::string &method,
                        content+="<input type=\"hidden\" name=\"day["+countstr+"]\" value=\""+day+"\">";\r
                        content+="<input type=\"text\" name=\"solution["+countstr+"]\">";\r
                        content+="</td>\r\n";\r
-                       thisid=lastid;\r
+                       lastid=thisid;\r
                        shown++;\r
                }\r
                \r
@@ -126,7 +146,7 @@ const std::string AnnounceIdentityPage::GeneratePage(const std::string &method,
        content+="</table>";\r
        content+="</form>";\r
 \r
-       return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);\r
+       return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
 }\r
 \r
 const bool AnnounceIdentityPage::WillHandleURI(const std::string &uri)\r