function main($mainmsg) { gio::output(config::$walletMessage); if (account::isCreated()) { $serv = popen("service.ecsh", 'r'); } $net = new Gnet(); $inerr = 0; while (true) { $inmsg = array(); if (account::isCreated()) { $inmsg["d"] = "Destroy Account"; $dmsg = $mainmsg + $inmsg; } else { $inmsg["c"] = "Create Bank Wallet"; $dmsg = $inmsg; } $dmsg["x"] = "Exit"; if (!$inerr) { gio::output(); foreach ($dmsg as $k => $v) { $k = strtoupper($k); gio::output("{$k} - {$v}"); } gio::output(); $msg = "Enter your choice and press enter"; } $inerr = 0; $c = gio::input("{$msg}"); if (!array_key_exists($c, $dmsg)) { $c = null; } switch ($c) { case 1: $a = account::address(); gio::output("Bank's account address is: {$a}"); break; case 2: $n = account::coins(config::$accountId, $coins); gio::output("You have {$n} coins"); if ($n && gio::confirm("Do you wish to see their Id's")) { foreach ($coins as $val => $ccs) { foreach ($ccs as $i => $coin) { gio::output("Ecash ID: {$i}"); foreach ($coin as $id => $c) { if ($id == "token") { $c = md5($c); } if ($id == "hash") { $c = sha1($c); } if ($id == "mined") { $c = date(config::$timeFormat, $c); } gio::output("{$id}=>{$c}"); } gio::output(); } } } break; case 3: $m = transaction::prequest(); gio::output($m[1]); break; case 4: transaction::pgrant(); break; case 5: $acc = gio::input("Enter the wallet number [EMPTY for bank's self]"); $o = gio::input("Enter the order id [EMPTY for all]"); $f = null; if (gio::confirm("Do you want to create a file on your desktop")) { do { $f = gio::input("Enter the file name"); } while (!$f); } transaction::reports($o, $acc, $f); break; case 6: $m = transaction::clearrequests(null, null); gio::output($m[1]); break; case 7: account::merckey(gio::input("Enter the name of the file to write to your desktop")); break; case "c": $serv = account::create(); break; case "d": gio::output("This action will irreversibly destroy your wallet and its contents"); if (gio::confirm("Are you sure you want to destroy your account")) { account::destroy(); } break; case "x": @$net->send('shutdown'); $net = null; if ($serv) { $ret = pclose($serv); } break 2; default: $inerr = 1; $msg = "Retry"; } if (!$inerr) { gio::output("\n\n\n"); } } if (isset($ret) && $ret != 0) { gio::output("An error occured while exiting..."); } gio::output(config::$exitMessage); sleep(3); }
public static function process($msg) { $status = 1; $sender = ""; $res = ""; $umsg = GsonCrypt::unseal($msg); if (!$umsg) { $ex = Gmsg::extract($msg); if ($ex && is_array($ex)) { $umsg = $msg; } else { $status = 0; $res = "Unable to decode the message"; } } if ($umsg) { $parts = self::extract($umsg); $action = $parts["op"]; $mess = $parts["msg"]; $sender = $parts["sender"]; $recipient = $parts["recipient"]; if ($recipient && !account::exists($recipient)) { $status = 0; $res = "The recipient account {$recipient} does not reside here"; $rply = Gmsg::create(array("status" => $status, "response" => $res)); } else { switch ($action) { case "mrequest": $r = transaction::request($mess['m'], $sender, $mess['k']); $rply = Gmsg::create(array("status" => $r[0], "response" => $r[1])); break; case "mstatus": $r = transaction::mercorder($mess['m'], $sender, $mess['k']); $rply = Gmsg::create(array("status" => $r[0], "response" => $r[1])); break; case "statusrequest": $r = transaction::status($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "paymentrequest": $r = transaction::request($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "pullrequests": $r = transaction::pullrequests($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "pullcoins": $r = account::pullcoins($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "clearrequests": $r = transaction::clearrequests($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "notification": $r = transaction::notification($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "acknowledgement": $r = transaction::acknowledgement($mess, config::$SRA); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "deposit": $r = account::deposit($mess, $recipient); if (!$r) { $status = 0; $res = "Deposit failed"; } else { $res = "Deposit was successful"; } break; case "revokecert": $net = new Gnet(); $rply = $net->send("{$mess}", true); $net = null; break; case "signcert": $net = new Gnet(); $rply = $net->send("{$mess}", true); $net = null; break; case "register": $k = GsonCrypt::getcert(); if (is_readable($k)) { $res = gio::readfile($k); if (!$res) { $status = 0; } } $rply = Gmsg::create(array("status" => $status, "cert" => $res, "name" => config::$accountId, "account" => account::makenew())); break; case "create": $status = gio::savetofile($mess, GsonCrypt::getkey("{$sender}")); $res = $status ? "successful" : "failed"; $rply = Gmsg::create(array("status" => $status, "response" => $res)); break; case "remove": $res = ""; $ret = array("status" => $status, "response" => $res); $rply = self::create($ret); $rply = GsonCrypt::seal("{$rply}", "{$sender}"); unlink(GsonCrypt::getkey($sender)); break; case "exchangecert": $status = 0; if (!file_exists(GsonCrypt::getcert("{$sender}"))) { $status = gio::saverawfile($mess, GsonCrypt::getcert("{$sender}")); } $k = GsonCrypt::getcert(); if ($status && is_readable($k)) { $res = gio::readfile($k); if (!$res) { $status = 0; } } $rply = Gmsg::create(array("status" => $status, "cert" => $res)); break; case "reverb": $res = $mess; break; default: $status = 0; $res = "Invalid Operation!"; } } } if (!isset($rply)) { $ret = array("status" => $status, "response" => $res); $rply = self::create($ret); $rply = $sender ? GsonCrypt::seal("{$rply}", "{$sender}") : "{$rply}"; } return $rply; }