//public Hashtable HandleBitcoinRegistrationRequest(Dictionary<string, object> getvals, Dictionary<string,object> postvals)
public Hashtable HandleBitcoinRegistrationRequest(Hashtable request_hash)
{
Dictionary<string, object> postvals = ServerUtils.ParseQueryString ((string)request_hash["body"]);
//string base_url = "http://beech/TODO";
string base_url = m_scenes[0].RegionInfo.ExternalHostName + ":" + m_scenes[0].RegionInfo.HttpPort;
bool has_errors = false;
string btc_session_id = "";
if (postvals.ContainsKey("btc_session_id")) {
btc_session_id = (string)postvals["btc_session_id"];
} else if (request_hash.ContainsKey("btc_session_id")) {
btc_session_id = (string)request_hash["btc_session_id"];
}
//Console.WriteLine("btc session id is "+btc_session_id);
if (btc_session_id == "") {
has_errors = true;
}
string user_identifier = "";
UUID session_uuid = new UUID (btc_session_id);
if (m_sessionkeyuser.ContainsKey(session_uuid)) {
user_identifier = m_sessionkeyuser[session_uuid].ToString();
if (user_identifier == "") {
has_errors = true;
}
} else {
has_errors = true;
}
bool is_submit = false;
List<string> addresses_created = new List<string>();
List<string> addresses_failed = new List<string>();
if (postvals.ContainsKey("addresses")) {
is_submit = true;
string address_text = (string)postvals["addresses"];
string[] addresses = Regex.Split(address_text, "/\n/");
for (int i=0; i<addresses.Length; i++) {
BitcoinAddress btc_addr = new BitcoinAddress(m_connectionString, m_btcconfig);
if (btc_addr.Create(user_identifier, addresses[i])) {
addresses_created.Add(addresses[i]);
} else {
addresses_failed.Add(addresses[i]);
}
}
}
BitcoinAddress count_btc_addr = new BitcoinAddress(m_connectionString, m_btcconfig);
int count_all_addresses = count_btc_addr.CountAddressesForAvatar(user_identifier, true);
int count_usable_addresses = count_btc_addr.CountAddressesForAvatar(user_identifier, false);
Dictionary<string, string> replacements = new Dictionary<string, string> ();
//replacements.Add ("{BTC_SESSION_ID}", HttpUtility.HtmlEncode(btc_session_id));
//TODO put HttpUtility back
replacements.Add ("{BTC_SESSION_ID}", btc_session_id);
if (is_submit) {
replacements.Add ("{BTC_DISABLE_COMPLETE_START}", "<!--");
replacements.Add ("{BTC_DISABLE_COMPLETE_END}", "-->");
replacements.Add ("{BTC_DISABLE_INCOMPLETE_START}", "");
replacements.Add ("{BTC_DISABLE_INCOMPLETE_END}", "");
} else {
replacements.Add ("{BTC_DISABLE_INCOMPLETE_START}", "<!--");
replacements.Add ("{BTC_DISABLE_INCOMPLETE_END}", "-->");
replacements.Add ("{BTC_DISABLE_COMPLETE_START}", "");
replacements.Add ("{BTC_DISABLE_COMPLETE_END}", "");
}
replacements.Add ("{BTC_COUNT_NEW_ADDRESSES}", addresses_created.Count.ToString());
replacements.Add ("{BTC_COUNT_ALL_ADDRESSES}", count_all_addresses.ToString());
replacements.Add ("{BTC_COUNT_USABLE_ADDRESSES}", count_usable_addresses.ToString());
string template;
try {
template = File.ReadAllText ("bitcoin-register-template.htm");
} catch (IOException) {
template = "Error: bitcoin-register-template.htm does not exist.";
//m_log.Error ("[FreeMoney] Unable to load template file.");
m_log.Error("Could not load template file bitcoin-register-template.htm");
has_errors = true;
}
int response_code = has_errors ? 400 : 200;
foreach (KeyValuePair<string, string> pair in replacements) {
template = template.Replace (pair.Key, pair.Value);
}
Hashtable reply = new Hashtable ();
reply["int_response_code"] = 200;
// 200 OK
reply["str_response_string"] = template;
reply["content_type"] = "text/html";
return reply;
// TODO: Handle odd formats
/*
$giveawaystr = '"Label","Address"';
if (preg_match('/'.preg_quote($giveawaystr).'/', $addresstext)) {
$format = 'csv';
}
$lines = explode("\n", $addresstext);
$addresses = array();
foreach($lines as $line) {
$line = trim($line);
if ($format == 'csv') {
if (preg_match('/^.*?,\"(.*?)\"$/', $line, $matches)) {
if ($matches[1] == 'Address') {
continue;
}
$addresses[] = $matches[1];
}
} else {
$addresses[] = $line;
}
}
*/
}