public async Task <IActionResult> DeployContract(DeployContractVM contractVM)
        {
            try
            {
                ContractParam  contractParam   = new ContractParam(contractVM);
                ContractAccess contractAccess  = new ContractAccess((int)contractVM.Network);
                var            transactionHash = await contractAccess.DeployContract(contractParam);


                Escrow newContract = new Escrow(transactionHash.ToString(), contractVM);

                using (var _context = new ApplicationDbContext())
                {
                    _context.DeployedContracts.Add(newContract);

                    await _context.SaveChangesAsync();

                    //contractVM.ContractList = await _context.DeployedContracts.Include(p => p.Receipt).ToListAsync();
                }
                Log.Information("Contract Deployed at network: " + contractVM.Network.ToString() + ", TxHash: " + transactionHash);
                return(new JsonResult(transactionHash));
            }
            catch (Exception e)
            {
                return(new JsonResult(e.Message));
            }
        }
示例#2
0
        public ActionResult Index(int id, string addr, decimal amount)
        {
            if (Request.IsLocal)
            {
                EscrowAccept escrowaccept = data.EscrowAccepts.GetByID(id);
                Escrow       escrow       = escrowaccept.Escrow.FirstOrDefault();
                if (escrow != null && escrowaccept.EscrowAddress == addr && escrow != null)
                {
                    escrowaccept.LastAddressBalance = escrowaccept.LastAddressBalance.HasValue
                        ? escrowaccept.LastAddressBalance.Value + amount
                        : amount;
                    data.Save();

                    Price   total   = escrow.GetTotal();
                    decimal balance = (total.BTC - amount);

                    string direction = balance >= 0 ? "<p>Looks like the payment was a little short. Try contacting the buyer and asking them to send the difference. If you cannot come to a resolution, contact support</p>"
                        : "<p>The buyer's balance has been paid, now it's time for you to fill the order!</p>";

                    string emailBodyText =
                        "<p>The user <a href=\"mailto:" + escrow.UserBuyer.Email + "\">" + escrow.UserBuyer.UserName + "</a> has sent " + amount.FormatNumber() + " BTC to the escrow address for item:</p>" +
                        "<p><i>" + escrow.Listing.Title + "</p></i><br/>" +
                        "<p>Total: " + total.BTC.FormatNumber() + " BTC</p>" +
                        "<p>Paid: " + amount.FormatNumber() + " BTC</p>" +
                        "<p><b>Balance: " + (total.BTC - amount).FormatNumber() + " BTC</b></p><br/>" +
                        direction +
                        "<p>Click <a href=\""
                        + Url.Action("view", "escrow", new { id = escrow.EscrowId.StringWithoutDashes() }, Request.Url.Scheme)
                        + "\">here</a> to view this transaction</p><br/>";

                    Globals.SendEmail(escrow.UserSeller.Email, "You've received " + amount.FormatNumber() + " BTC!", emailBodyText);
                    return(Content("Dispatched email to " + escrow.UserBuyer.Email));
                }
                else
                {
                    return(Content("Bitcoin address does not match!"));
                }
            }
            else
            {
                return(Content("Unauthorized"));
            }
        }
        public ActionResult Delete(string id)
        {
            Guid guid;

            if (!Guid.TryParse(id, out guid))
            {
                return(RedirectToAction("notfound", "error"));
            }
            Escrow es = data.Escrows.GetByID(guid);

            if ((EscrowState)es.State == EscrowState.Closed)
            {
                EscrowClosedBy closedby = (EscrowClosedBy)es.ClosedBy.Value;
                if (closedby == EscrowClosedBy.BuyerCancel || closedby == EscrowClosedBy.SellerReject)
                {
                    if (WebSecurity.CurrentUserId == es.SellerId)
                    {
                        es.SellerDeleteDt = DateTime.Now;
                        data.Save();
                    }
                    else if (WebSecurity.CurrentUserId == es.BuyerId)
                    {
                        es.BuyerDeleteDt = DateTime.Now;
                        data.Save();
                    }
                }
                else
                {
                    return(View(new FeedbackModel()
                    {
                        EscrowId = guid.StringWithoutDashes()
                    }));
                }
            }
            return(RedirectToAction("Index"));
        }
示例#4
0
        public HttpResponseMessage Put(string id, EscrowWebCreate form)
        {
            Guid listid;

            if (!string.IsNullOrEmpty(id) && Guid.TryParse(id, out listid))
            {
                Listing list = data.Listings.GetByID(listid);
                if (list != null)
                {
                    if (!form.PubKey.StartsWith("-----BEGIN PUBLIC KEY-----\nMI") ||
                        !form.PubKey.EndsWith("-----END PUBLIC KEY-----"))
                    {
                        ModelState.AddModelError("PubKey", "Invalid public key");
                    }
                    if (list.UserProfile.UserId == WebSecurity.CurrentUserId) // cant buy own item
                    {
                        ModelState.AddModelError("id", "Cannot buy own item");
                    }
                    if (list.ListingAdditions.Any(s => (ListingAdditionType)s.AdditionType == ListingAdditionType.Shipping) &&
                        (!form.ShippingId.HasValue ||
                         !list.ListingAdditions.Where(s => (ListingAdditionType)s.AdditionType == ListingAdditionType.Shipping)
                         .Any(s => s.LAId == form.ShippingId.Value))) // Bad shipping selection
                    {
                        ModelState.AddModelError("ShippingId", "Invalid shipping id");
                    }
                    if ((form.VariationId.HasValue && form.VariationId.Value > -1) &&
                        !list.ListingAdditions.Where(s => (ListingAdditionType)s.AdditionType == ListingAdditionType.SingleSelect)
                        .Any(s => s.LAId == form.VariationId.Value)) // Bad variation
                    {
                        ModelState.AddModelError("VariationId", "Invalid variation id");
                    }

                    if (!ModelState.IsValid)
                    {
                        return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
                    }
                    else
                    {
                        ListingAddition ship = form.ShippingId.HasValue
                            ? list.ListingAdditions.SingleOrDefault(s => s.LAId == form.ShippingId.Value)
                            : null;
                        ListingAddition vari = form.VariationId.HasValue && form.VariationId.Value > -1
                            ? list.ListingAdditions.SingleOrDefault(s => s.LAId == form.VariationId.Value)
                            : null;


                        EscrowCodeSet cs     = new EscrowCodeSet();
                        Escrow        escrow = new Escrow()
                        {
                            EscrowId      = Guid.NewGuid(),
                            BuyerId       = WebMatrix.WebData.WebSecurity.CurrentUserId,
                            SellerId      = list.UserId,
                            BuyerPubkey   = form.PubKey,
                            BuyerPrivkey  = form.EncPrivKey,
                            EicA          = cs.EscrowInvitationCodeA,
                            EicB          = cs.EscrowInvitationCodeB,
                            State         = (int)EscrowState.Created,
                            CreatedDate   = DateTime.Now,
                            ListingId     = list.ListingId,
                            ShippingName  = ship != null ? ship.Name : null,
                            ShippingPrice = ship != null ? ship.Price : new Nullable <decimal>(),
                            VariationName = vari != null ? vari.Name : null
                        };

                        //pubkeymd5 = MD5.Create()
                        //    .ComputeHash(Encoding.UTF8.GetBytes(form.PubKey))
                        //    .Select(x => x.ToString("x2"))
                        //    .Aggregate((i, j) => i + j)

                        try
                        {
                            data.Escrows.Insert(escrow);
                            data.Save();
                            User buyer = data.Users.GetByID(WebMatrix.WebData.WebSecurity.CurrentUserId);


                            string emailBodyText =
                                "<p>User <b>" + buyer.UserName + "</b> wants to purchase your listing for: </p>" +
                                "<p><i>" + escrow.Listing.Title + "</p></i>" +
                                "<p>Click <a href=\"https://anark.it/escrow/\">here</a> to view your transactions</p><br/>" +
                                "<p>You may contact the buyer at <a href=\"mailto:" + buyer.Email + "\">" + buyer.Email + "</a></p>" +
                                "<p>For extra security, ask for the Session Code from the buyer if he has not already emailed it to you.</p>";
                            Globals.SendEmail(list.UserProfile.Email, "You have a purchase request!", emailBodyText);
                        }
                        catch (Exception err)
                        {
                            return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Failed to save"));
                        }

                        return(Request.CreateResponse(HttpStatusCode.Created, list.UserProfile.Email));
                    }
                }
                else
                {
                    return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Not found"));
                }
            }
            else
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Not found"));
            }
        }
示例#5
0
        public HttpResponseMessage Post(Guid id, EscrowWebAccept model)
        {
            Escrow  escrow = data.Escrows.GetByID(id);
            Listing list   = escrow != null ? escrow.Listing : null;

            if (list != null && escrow != null && WebSecurity.CurrentUserId == escrow.SellerId)
            {
                if (escrow.EscrowAccept != null)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest));
                }

                if (!model.PubKey.StartsWith("-----BEGIN PUBLIC KEY-----\nMI") ||
                    !model.PubKey.EndsWith("-----END PUBLIC KEY-----"))
                {
                    ModelState.AddModelError("PubKey", "Invalid public key");
                }
                byte[] hex = Util.Base58CheckToByteArray(model.BitcoinAddr);
                if (hex == null || hex.Length != 21)
                {
                    ModelState.AddModelError("BitcoinAddr", "Address is not valid.");
                }


                if (!ModelState.IsValid)
                {
                    Request.CreateResponse(HttpStatusCode.BadRequest, ModelState);
                }

                EscrowAccept accept = new EscrowAccept()
                {
                    AutoReleaseDt = DateTime.Now.AddDays(14),
                    CreatedDate   = DateTime.Now,
                    EscrowAddress = model.BitcoinAddr,
                    PinvBuyer     = model.PinvEncBuyer,
                    PinvSeller    = model.PinvEncSeller,
                    SellerPubkey  = model.PubKey,
                    SellerPrivkey = model.EncPrivKey
                };

                escrow.State = (int)EscrowState.Accepted;

                try
                {
                    data.EscrowAccepts.Insert(accept);
                    escrow.EscrowAccept = accept;
                    //list.CurrentEscrow = escrow;
                    data.Save();

                    Thread t = new Thread(new ThreadStart(delegate()
                    {
                        try
                        {
                            AnarkRE.Communication.PipeClient pc = new Communication.PipeClient();
                            pc.SendData(accept.AcceptId + "," + accept.EscrowAddress);
                        }
                        catch (Exception err)
                        {
                            Globals.WriteError("pipeerror.log", err);
                        }
                    }));
                    t.IsBackground = true;
                    t.Start();

                    try
                    {
                        string emailBodyText =
                            "<p>The seller has accepted your request to buy the listing: </p>" +
                            "<p><i>" + escrow.Listing.Title + "</p></i>" +
                            "<p>Click <a href=\"https://anark.it/escrow/view/" + escrow.EscrowId.StringWithoutDashes() + "\">here</a> to view this transaction</p><br/>" +
                            "<p>Upon entering your transaction password, the verified escrow bitcoin address will be shown. Send your payment to this bitcoin address and notify the seller so that he may begin delivery." +
                            "<p>After you have received your order, be sure to log back in and release the funds to the seller.</p>";

                        Globals.SendEmail(escrow.UserBuyer.Email, "Purchase Request Accepted!", emailBodyText);
                    }
                    catch { }


                    return(Request.CreateResponse(HttpStatusCode.OK, new { }));
                }
                catch (Exception err)
                {
                    Globals.WriteError("accepterror.log", err);
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Save failed"));
                }
            }


            return(Request.CreateResponse(HttpStatusCode.NotFound));
        }
示例#6
0
		private static void Handle_Escrow (
					Shell Dispatch, string[] args, int index) {
			Escrow		Options = new Escrow ();

			var Registry = new Goedel.Registry.Registry ();

			Options.Quorum.Register ("quorum", Registry, (int) TagType_Escrow.Quorum);
			Options.Shares.Register ("shares", Registry, (int) TagType_Escrow.Shares);
			Options.Portal.Register ("portal", Registry, (int) TagType_Escrow.Portal);
			Options.UDF.Register ("udf", Registry, (int) TagType_Escrow.UDF);
			Options.Verbose.Register ("verbose", Registry, (int) TagType_Escrow.Verbose);
			Options.Report.Register ("report", Registry, (int) TagType_Escrow.Report);


#pragma warning disable 162
			for (int i = index; i< args.Length; i++) {
				if 	(!IsFlag (args [i][0] )) {
					throw new System.Exception ("Unexpected parameter: " + args[i]);}			
				string Rest = args [i].Substring (1);

				TagType_Escrow TagType = (TagType_Escrow) Registry.Find (Rest);

				// here have the cases for what to do with it.

				switch (TagType) {
					case TagType_Escrow.Quorum : {
						int OptionParams = Options.Quorum.Tag (Rest);
						
						if (OptionParams>0 && ((i+1) < args.Length)) {
							if 	(!IsFlag (args [i+1][0] )) {
								i++;								
								Options.Quorum.Parameter (args[i]);
								}
							}
						break;
						}
					case TagType_Escrow.Shares : {
						int OptionParams = Options.Shares.Tag (Rest);
						
						if (OptionParams>0 && ((i+1) < args.Length)) {
							if 	(!IsFlag (args [i+1][0] )) {
								i++;								
								Options.Shares.Parameter (args[i]);
								}
							}
						break;
						}
					case TagType_Escrow.Portal : {
						int OptionParams = Options.Portal.Tag (Rest);
						
						if (OptionParams>0 && ((i+1) < args.Length)) {
							if 	(!IsFlag (args [i+1][0] )) {
								i++;								
								Options.Portal.Parameter (args[i]);
								}
							}
						break;
						}
					case TagType_Escrow.UDF : {
						int OptionParams = Options.UDF.Tag (Rest);
						
						if (OptionParams>0 && ((i+1) < args.Length)) {
							if 	(!IsFlag (args [i+1][0] )) {
								i++;								
								Options.UDF.Parameter (args[i]);
								}
							}
						break;
						}
					case TagType_Escrow.Verbose : {
						int OptionParams = Options.Verbose.Tag (Rest);
						
						if (OptionParams>0 && ((i+1) < args.Length)) {
							if 	(!IsFlag (args [i+1][0] )) {
								i++;								
								Options.Verbose.Parameter (args[i]);
								}
							}
						break;
						}
					case TagType_Escrow.Report : {
						int OptionParams = Options.Report.Tag (Rest);
						
						if (OptionParams>0 && ((i+1) < args.Length)) {
							if 	(!IsFlag (args [i+1][0] )) {
								i++;								
								Options.Report.Parameter (args[i]);
								}
							}
						break;
						}
					default : throw new System.Exception ("Internal error");
					}
				}

#pragma warning restore 162
			Dispatch.Escrow (Options);

			}
示例#7
0
		public virtual void Escrow ( Escrow Options
				) {

			char UsageFlag = '-';
				{
#pragma warning disable 219
					Escrow		Dummy = new Escrow ();
#pragma warning restore 219

					Console.Write ("{0}escrow ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Quorum.Usage ("quorum", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Shares.Usage ("shares", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Create a set of key escrow shares");

				}

				Console.WriteLine ("    {0}\t{1} = [{2}]", "integer", 
							"Quorum", Options.Quorum);
				Console.WriteLine ("    {0}\t{1} = [{2}]", "integer", 
							"Shares", Options.Shares);
				Console.WriteLine ("    {0}\t{1} = [{2}]", "String", 
							"Portal", Options.Portal);
				Console.WriteLine ("    {0}\t{1} = [{2}]", "String", 
							"UDF", Options.UDF);
				Console.WriteLine ("    {0}\t{1} = [{2}]", "Flag", 
							"Verbose", Options.Verbose);
				Console.WriteLine ("    {0}\t{1} = [{2}]", "Flag", 
							"Report", Options.Report);
			Console.WriteLine ("Not Yet Implemented");
			}
示例#8
0
		private static void Usage () {

				Console.WriteLine ("brief");
				Console.WriteLine ("");

				{
#pragma warning disable 219
					Reset		Dummy = new Reset ();
#pragma warning restore 219

					Console.Write ("{0}reset ", UsageFlag);
					Console.WriteLine ();

					Console.WriteLine ("    Delete all test profiles");

				}

				{
#pragma warning disable 219
					Device		Dummy = new Device ();
#pragma warning restore 219

					Console.Write ("{0}device ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.DeviceID.Usage (null, "id", UsageFlag));
					Console.Write ("[{0}] ", Dummy.DeviceDescription.Usage (null, "dd", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Default.Usage ("default", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Create new device profile");

				}

				{
#pragma warning disable 219
					Personal		Dummy = new Personal ();
#pragma warning restore 219

					Console.Write ("{0}personal ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Portal.Usage (null, "portal", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Description.Usage (null, "pd", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Next.Usage ("next", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.DeviceNew.Usage ("new", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.DeviceUDF.Usage ("dudf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.DeviceID.Usage ("did", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.DeviceDescription.Usage ("dd", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Create new personal profile");

				}

				{
#pragma warning disable 219
					Register		Dummy = new Register ();
#pragma warning restore 219

					Console.Write ("{0}register ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.UDF.Usage (null, "udf", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage (null, "portal", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Register the specified profile at a new portal");

				}

				{
#pragma warning disable 219
					Sync		Dummy = new Sync ();
#pragma warning restore 219

					Console.Write ("{0}sync ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Synchronize local copies of Mesh profiles with the server");

				}

				{
#pragma warning disable 219
					Escrow		Dummy = new Escrow ();
#pragma warning restore 219

					Console.Write ("{0}escrow ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Quorum.Usage ("quorum", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Shares.Usage ("shares", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Create a set of key escrow shares");

				}

				{
#pragma warning disable 219
					Export		Dummy = new Export ();
#pragma warning restore 219

					Console.Write ("{0}export ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.File.Usage (null, "file", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Export the specified profile data to the specified file");

				}

				{
#pragma warning disable 219
					Import		Dummy = new Import ();
#pragma warning restore 219

					Console.Write ("{0}import ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.File.Usage (null, "file", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Import the specified profile data to the specified file");

				}

				{
#pragma warning disable 219
					List		Dummy = new List ();
#pragma warning restore 219

					Console.Write ("{0}list ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    List all profiles on the local machine");

				}

				{
#pragma warning disable 219
					Dump		Dummy = new Dump ();
#pragma warning restore 219

					Console.Write ("{0}dump ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Describe the specified profile");

				}

				{
#pragma warning disable 219
					Pending		Dummy = new Pending ();
#pragma warning restore 219

					Console.Write ("{0}pending ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Get list of pending connection requests");

				}

				{
#pragma warning disable 219
					Connect		Dummy = new Connect ();
#pragma warning restore 219

					Console.Write ("{0}connect ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Portal.Usage (null, "portal", UsageFlag));
					Console.Write ("[{0}] ", Dummy.PIN.Usage ("pin", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.DeviceNew.Usage ("new", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.DeviceUDF.Usage ("dudf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.DeviceID.Usage ("did", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.DeviceDescription.Usage ("dd", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Connect to an existing profile registered at a portal");

				}

				{
#pragma warning disable 219
					Accept		Dummy = new Accept ();
#pragma warning restore 219

					Console.Write ("{0}accept ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.DeviceUDF.Usage (null, "udf", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Accept a pending connection");

				}

				{
#pragma warning disable 219
					Complete		Dummy = new Complete ();
#pragma warning restore 219

					Console.Write ("{0}complete ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Complete a pending connection request");

				}

				{
#pragma warning disable 219
					Password		Dummy = new Password ();
#pragma warning restore 219

					Console.Write ("{0}password ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Add a web application profile to a personal profile");

				}

				{
#pragma warning disable 219
					AddPassword		Dummy = new AddPassword ();
#pragma warning restore 219

					Console.Write ("{0}pwadd ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Site.Usage (null, "site", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Username.Usage (null, "user", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Password.Usage (null, "password", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Add password entry");

				}

				{
#pragma warning disable 219
					GetPassword		Dummy = new GetPassword ();
#pragma warning restore 219

					Console.Write ("{0}pwget ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Site.Usage (null, "site", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Lookup password entry");

				}

				{
#pragma warning disable 219
					DeletePassword		Dummy = new DeletePassword ();
#pragma warning restore 219

					Console.Write ("{0}pwdelete ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Site.Usage (null, "site", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Delete password entry");

				}

				{
#pragma warning disable 219
					DumpPassword		Dummy = new DumpPassword ();
#pragma warning restore 219

					Console.Write ("{0}pwdump ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.JSON.Usage (null, "json", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Describe password entry");

				}

				{
#pragma warning disable 219
					Mail		Dummy = new Mail ();
#pragma warning restore 219

					Console.Write ("{0}mail ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.address.Usage (null, "address", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Add a mail application profile to a personal profile");

				}

				{
#pragma warning disable 219
					SSH		Dummy = new SSH ();
#pragma warning restore 219

					Console.Write ("{0}ssh ", UsageFlag);
					Console.Write ("[{0}] ", Dummy.Host.Usage (null, "host", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Client.Usage (null, "client", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Portal.Usage ("portal", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.UDF.Usage ("udf", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Verbose.Usage ("verbose", "value", UsageFlag));
					Console.Write ("[{0}] ", Dummy.Report.Usage ("report", "value", UsageFlag));
					Console.WriteLine ();

					Console.WriteLine ("    Add a ssh application profile to a personal profile");

				}

			} // Usage 
        public ActionResult Finalize(FeedbackModel model)
        {
            Guid guid;

            if (!Guid.TryParse(model.EscrowId, out guid))
            {
                return(RedirectToAction("notfound", "error"));
            }
            Escrow es = data.Escrows.GetByID(guid);

            if ((EscrowState)es.State == EscrowState.Closed)
            {
                EscrowClosedBy closedby = (EscrowClosedBy)es.ClosedBy.Value;
                if (closedby != EscrowClosedBy.BuyerCancel || closedby != EscrowClosedBy.SellerReject)
                {
                    if (WebSecurity.CurrentUserId == es.SellerId)
                    {
                        es.SellerDeleteDt = DateTime.Now;
                        Feedback fb = new Feedback()
                        {
                            AboutSeller = false,
                            AboutUserId = es.BuyerId,
                            CreatedDate = DateTime.Now,
                            FromUserId  = WebSecurity.CurrentUserId,
                            ListingId   = es.ListingId,
                            Message     = model.Message,
                            Stars       = model.Score,
                        };
                        data.Feedbacks.Insert(fb);
                        if (es.UserBuyer.FeedbacksAbout.Count > 0)
                        {
                            es.UserBuyer.TotalScore = es.UserBuyer.FeedbacksAbout
                                                      .Select(s => (decimal)s.Stars).Average();
                            if (es.UserBuyer.FeedbacksAbout.Where(s => !s.AboutSeller).Count() > 0)
                            {
                                es.UserBuyer.BuyerScore = es.UserBuyer.FeedbacksAbout.Where(s => !s.AboutSeller)
                                                          .Select(s => (decimal)s.Stars).Average();
                            }
                        }
                        data.Save();
                    }
                    else if (WebSecurity.CurrentUserId == es.BuyerId)
                    {
                        es.BuyerDeleteDt = DateTime.Now;
                        Feedback fb = new Feedback()
                        {
                            AboutSeller = true,
                            AboutUserId = es.SellerId,
                            CreatedDate = DateTime.Now,
                            FromUserId  = WebSecurity.CurrentUserId,
                            ListingId   = es.ListingId,
                            Message     = model.Message,
                            Stars       = model.Score
                        };
                        data.Feedbacks.Insert(fb);

                        if (es.UserSeller.FeedbacksAbout.Count > 0)
                        {
                            es.UserSeller.TotalScore = es.UserSeller.FeedbacksAbout
                                                       .Select(s => (decimal)s.Stars).Average();
                            if (es.UserSeller.FeedbacksAbout.Where(s => s.AboutSeller).Count() > 0)
                            {
                                es.UserSeller.SellerScore = es.UserSeller.FeedbacksAbout.Where(s => s.AboutSeller)
                                                            .Select(s => (decimal)s.Stars).Average();
                            }
                        }
                        data.Save();
                    }
                }
            }
            return(RedirectToAction("Index"));
        }
        public ActionResult View(string id)
        {
            Guid guid;

            if (!Guid.TryParse(id, out guid))
            {
                return(RedirectToAction("notfound", "error"));
            }

            Escrow  escrow = data.Escrows.GetByID(guid);
            Listing list   = escrow != null ? escrow.Listing : null;


            if (list != null && escrow != null &&
                (WebSecurity.CurrentUserId == escrow.BuyerId || WebSecurity.CurrentUserId == escrow.SellerId))
            {
                Guid listid = list.ListingId;

                EscrowView model = new EscrowView()
                {
                    Id       = listid.StringWithoutDashes(),
                    IsBuyer  = WebSecurity.CurrentUserId == escrow.BuyerId,
                    EscrowId = escrow.EscrowId.StringWithoutDashes(),
                    Item     = ListingToItem(list),
                    ClosedBy = escrow.ClosedBy != null
                        ? (EscrowClosedBy)escrow.ClosedBy
                        : new Nullable <EscrowClosedBy>(),
                    FeedBadge = WebSecurity.CurrentUserId == escrow.BuyerId ?
                                new FeedbackBadgeModel()
                    {
                        Sales    = list.UserProfile.FeedbacksAbout.Count,
                        Username = list.UserProfile.UserName,
                        Score    = list.UserProfile.SellerScore
                    }
                    :
                    new FeedbackBadgeModel()
                    {
                        Sales    = escrow.UserBuyer.FeedbacksAbout.Count,
                        Username = escrow.UserBuyer.UserName,
                        Score    = escrow.UserBuyer.BuyerScore
                    }
                };

                model.Item.Options = new PurchaseOptions()
                {
                    ShippingName    = escrow.ShippingName,
                    ShippingPrice   = escrow.ShippingPrice,
                    VariationChoice = escrow.VariationName
                };

                if (model.IsBuyer) // buyer
                {
                    if (escrow.EscrowAccept != null)
                    {
                        model.MyPubkey       = escrow.BuyerPubkey;
                        model.ThierPubkey    = escrow.EscrowAccept.SellerPubkey;
                        model.Eic            = escrow.EicB;
                        model.PivEnc         = escrow.EscrowAccept.PinvBuyer;
                        model.MyPrivkeyEnc   = escrow.BuyerPrivkey;
                        model.BitcoinAddress = escrow.EscrowAccept.EscrowAddress;

                        if (escrow.SellerReleaseDt != null)
                        {
                            model.ReleaseCode = escrow.EicA;
                        }
                    }
                    else
                    {
                        return(RedirectToAction("Index"));
                    }
                }
                else // seller
                {
                    model.ThierPubkey = escrow.BuyerPubkey;
                    model.Eic         = escrow.EicA;

                    if (escrow.EscrowAccept != null)
                    {
                        model.MyPubkey       = escrow.EscrowAccept.SellerPubkey;
                        model.PivEnc         = escrow.EscrowAccept.PinvSeller;
                        model.MyPrivkeyEnc   = escrow.EscrowAccept.SellerPrivkey;
                        model.BitcoinAddress = escrow.EscrowAccept.EscrowAddress;

                        if (escrow.BuyerReleaseDt != null)
                        {
                            model.ReleaseCode = escrow.EicB;
                        }
                    }
                }

                model.Balance = 0;

                try
                {
                    if (!string.IsNullOrEmpty(model.BitcoinAddress))
                    {
                        model.Balance = decimal.Parse(new WebClient().DownloadString("https://blockchain.info/q/addressbalance/" + model.BitcoinAddress)) / 100000000M;
                        if (!escrow.EscrowAccept.LastAddressBalance.HasValue || escrow.EscrowAccept.LastAddressBalance.Value != model.Balance)
                        {
                            escrow.EscrowAccept.LastAddressBalance = model.Balance;
                            data.Save();
                        }
                    }
                }
                catch
                { }

                ViewBag.Title = "View escrow transaction";
                return(View(model));
            }
            else
            {
                return(RedirectToAction("notfound", "error"));
            }
        }
        public ActionResult Release(string id)
        {
            Guid guid;

            if (!Guid.TryParse(id, out guid))
            {
                return(RedirectToAction("notfound", "error"));
            }

            Escrow escrow = data.Escrows.GetByID(guid);

            if (escrow != null &&
                (escrow.BuyerId == WebSecurity.CurrentUserId || escrow.SellerId == WebSecurity.CurrentUserId))
            {
                escrow.ClosedDt = DateTime.Now;
                escrow.State    = (int)EscrowState.Closed;
                //if (escrow.EscrowId == escrow.Listing.ActiveEscrowId) // remove active from listing once purchaced - disabled
                //{
                //    escrow.Listing.ActiveEscrowId = null;
                //    data.Listings.Update(escrow.Listing);
                //}

                if (WebSecurity.CurrentUserId == escrow.SellerId)
                {
                    if (escrow.EscrowAccept == null)
                    {
                        escrow.ClosedBy       = (int)EscrowClosedBy.SellerReject;
                        escrow.SellerDeleteDt = DateTime.Now;
                    }
                    else
                    {
                        escrow.ClosedBy        = (int)EscrowClosedBy.Seller;
                        escrow.SellerReleaseDt = DateTime.Now;

                        string emailBodyText =
                            "<p>The seller <b>" + escrow.UserSeller.UserName + "</b> has released the escrow funds to you for the listing:</p>" +
                            "<p><i>" + escrow.Listing.Title + "</p></i>" +
                            "<p>To view the transaction and claim your funds <a href=\""
                            + Url.Action("view", "escrow", new { id = escrow.EscrowId.StringWithoutDashes() }, Request.Url.Scheme)
                            + "\">click here</a></p><br/>" +
                            "<p>We recommend you save this transaction page by using File -> Save as a backup before deleting the transaction.</p>" +
                            "<p>You will need to enter your escrow transaction password to calculate the bitcoin private key. If you have lost this password then you will be unable to spend your coins and must return them to the other party. If this happens to you, please <a href=\"mailto:[email protected]\">email support</a></p>";

                        Globals.SendEmail(escrow.UserBuyer.Email, "Claim your escrow funds!", emailBodyText);
                    }
                }
                else if (WebSecurity.CurrentUserId == escrow.BuyerId)
                {
                    if (escrow.EscrowAccept == null)
                    {
                        escrow.ClosedBy      = (int)EscrowClosedBy.BuyerCancel;
                        escrow.BuyerDeleteDt = DateTime.Now;
                    }
                    else
                    {
                        escrow.ClosedBy       = (int)EscrowClosedBy.Buyer;
                        escrow.BuyerReleaseDt = DateTime.Now;

                        string emailBodyText =
                            "<p>The buyer <b>" + escrow.UserBuyer.UserName + "</b> has released the escrow funds to you for the listing:</p>" +
                            "<p><i>" + escrow.Listing.Title + "</p></i>" +
                            "<p>To view the transaction and claim your funds <a href=\""
                            + Url.Action("view", "escrow", new { id = escrow.EscrowId.StringWithoutDashes() }, Request.Url.Scheme)
                            + "\">click here</a></p><br/>" +
                            "<p>We recommend you save this transaction page by using File -> Save as a backup before deleting the transaction.</p>" +
                            "<p>You will need to enter your escrow transaction password to calculate the bitcoin private key. If you have lost this password then you will be unable to spend your coins and must return them to the other party. If this happens to you, please <a href=\"mailto:[email protected]\">email support</a></p>";

                        Globals.SendEmail(escrow.UserSeller.Email, "Claim your escrow funds!", emailBodyText);
                    }
                }
                data.Save();
            }
            return(RedirectToAction("Index"));
        }
示例#12
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="Options">Command line parameters</param>
 public override void Escrow(Escrow Options) {
     SetReporting(Options.Report, Options.Verbose);
     }