public CountAddressesForAvatar ( string user_identifier, bool include_already_assigned ) : int | ||
user_identifier | string | |
include_already_assigned | bool | |
return | int |
//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; } } */ }
public Hashtable BitcoinInitializePaymentPage(Hashtable request) { Dictionary<string, object> postvals = ServerUtils.ParseQueryString ((string)request["body"]); UUID txnID = new UUID ((string)postvals["txn"]); if (!m_transactionsInProgress.ContainsKey (txnID)) { Hashtable ereply = new Hashtable (); ereply["int_response_code"] = 404; // 200 OK ereply["str_response_string"] = "Invalid Transaction"; ereply["content_type"] = "text/html"; return ereply; } FreeMoneyTransaction txn = m_transactionsInProgress[txnID]; string baseUrl = m_scenes[0].RegionInfo.ExternalHostName + ":" + m_scenes[0].RegionInfo.HttpPort; bool has_errors = false; BitcoinTransaction btc_trans = InitializeBitcoinTransaction(txn, baseUrl); has_errors = btc_trans.HasErrors(); if (has_errors) { string error_message = "<p><strong>Sorry, I couldn't set up this payment.</strong></p>"; return ShowUserPage(request, baseUrl, txn, error_message); } string user_identifier = txn.From.ToString(); 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}", GetSessionKey( txn.From ).ToString()); bool is_submit = true; // TODO if (is_submit) { replacements.Add ("{BTC_ERRORS}", ""); 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_ERRORS}", ""); 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_AMOUNT}", btc_trans.GetBTCAmount().ToString()); replacements.Add ("{BTC_ADDRESS}", btc_trans.GetBTCAddress().ToString()); replacements.Add ("{BTC_COUNT_ALL_ADDRESSES}", count_all_addresses.ToString()); replacements.Add ("{BTC_COUNT_USABLE_ADDRESSES}", count_usable_addresses.ToString()); string template; string template_name = "bitcoin-pay-template.htm"; try { template = File.ReadAllText (template_name); } catch (IOException) { template = "Error: bitcoin-pay-template.htm does not exist."; //m_log.Error ("[FreeMoney] Unable to load template file."); m_log.Error("[FreeMoney] Could not load template file bitcoin-pay-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; }