1 #include "../../../include/http/pages/announceidentitypage.h"
\r
2 #include "../../../include/stringfunctions.h"
\r
3 #include "../../../include/global.h"
\r
5 #include <Poco/DateTime.h>
\r
6 #include <Poco/DateTimeFormatter.h>
\r
12 const std::string AnnounceIdentityPage::CreateLocalIdentityDropDown(const std::string &name, const std::string &selected)
\r
14 std::string rval="";
\r
15 SQLite3DB::Statement st=m_db->Prepare("SELECT LocalIdentityID, Name, PublicKey FROM tblLocalIdentity ORDER BY Name;");
\r
18 rval+="<select name=\""+name+"\">";
\r
19 while(st.RowReturned())
\r
25 st.ResultText(0,id);
\r
26 st.ResultText(1,name);
\r
27 st.ResultText(2,pubkey);
\r
29 rval+="<option value=\""+id+"\" title=\""+pubkey+"\">"+SanitizeOutput(CreateShortIdentityName(name,pubkey))+"</option>";
\r
36 const std::string AnnounceIdentityPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
38 Poco::DateTime date;
\r
39 std::string content;
\r
41 std::string countstr="";
\r
43 std::string lastid="";
\r
44 std::string thisid="";
\r
47 bool willshow=false;
\r
49 if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="announce")
\r
51 SQLite3DB::Statement insert=m_db->Prepare("INSERT INTO tblIdentityIntroductionInserts(LocalIdentityID,Day,UUID,Solution) VALUES(?,?,?,?);");
\r
52 std::string localidentityidstr="";
\r
53 int localidentityid=0;
\r
54 std::vector<std::string> uuids;
\r
55 std::vector<std::string> days;
\r
56 std::vector<std::string> solutions;
\r
58 if(queryvars.find("localidentityid")!=queryvars.end())
\r
60 localidentityidstr=(*queryvars.find("localidentityid")).second;
\r
61 StringFunctions::Convert(localidentityidstr,localidentityid);
\r
63 CreateArgArray(queryvars,"uuid",uuids);
\r
64 CreateArgArray(queryvars,"day",days);
\r
65 CreateArgArray(queryvars,"solution",solutions);
\r
67 for(int i=0; i<solutions.size(); i++)
\r
69 if(solutions[i]!="")
\r
71 insert.Bind(0,localidentityid);
\r
72 insert.Bind(1,days[i]);
\r
73 insert.Bind(2,uuids[i]);
\r
74 insert.Bind(3,solutions[i]);
\r
82 content+="<h2>Announce Identity</h2>";
\r
83 content+="<form name=\"frmannounce\" method=\"POST\">";
\r
84 content+="<input type=\"hidden\" name=\"formaction\" value=\"announce\">";
\r
86 content+="<tr><td colspan=\"4\"><center>Select Identity : ";
\r
87 content+=CreateLocalIdentityDropDown("localidentityid","");
\r
88 content+="</td></tr>";
\r
89 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
92 date-=Poco::Timespan(1,0,0,0,0);
\r
93 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
96 if(st.RowReturned()==false)
\r
98 content+="<td colspan=\"4\"><center>You must wait for some puzzles to be downloaded. Check back later.</td>";
\r
101 while(st.RowReturned() && shown<20)
\r
103 st.ResultText(0,uuid);
\r
104 st.ResultText(1,day);
\r
105 st.ResultText(2,thisid);
\r
106 st.ResultInt(3,requestindex);
\r
108 // 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
109 // get the last index # we are inserting this day from this identity
\r
110 // 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
112 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
114 if(st2.RowReturned()==true)
\r
117 st2.ResultInt(0,index);
\r
118 if(index>=requestindex)
\r
124 if(willshow && thisid!=lastid)
\r
126 StringFunctions::Convert(shown,countstr);
\r
127 if(shown>0 && shown%4==0)
\r
129 content+="</tr>\r\n<tr>";
\r
132 content+="<img src=\"showcaptcha.htm?UUID="+uuid+"\"><br>";
\r
133 content+="<input type=\"hidden\" name=\"uuid["+countstr+"]\" value=\""+uuid+"\">";
\r
134 content+="<input type=\"hidden\" name=\"day["+countstr+"]\" value=\""+day+"\">";
\r
135 content+="<input type=\"text\" name=\"solution["+countstr+"]\">";
\r
136 content+="</td>\r\n";
\r
144 content+="</tr><td colspan=\"4\"><center><input type=\"submit\" value=\"Announce\"></td></tr>";
\r
145 content+="</table>";
\r
146 content+="</form>";
\r
148 return StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
151 const bool AnnounceIdentityPage::WillHandleURI(const std::string &uri)
\r
153 if(uri.find("announceidentity.")!=std::string::npos)
\r