public static AjaxCallResult SetBitcoinPayoutAddress(string bitcoinAddress) { AuthenticationData authData = GetAuthenticationDataAndCulture(); if (authData == null) { throw new UnauthorizedAccessException(); } // Remove whitespace from submitted address (whitespace will probably be entered in some cases) bitcoinAddress = bitcoinAddress.Replace(" ", string.Empty); // Remove a possible start of "bitcoincash:" if (bitcoinAddress.StartsWith("bitcoincash:")) { bitcoinAddress = bitcoinAddress.Substring("bitcoincash:".Length); } if (string.IsNullOrEmpty(authData.CurrentUser.BitcoinPayoutAddress)) { if (!BitcoinUtility.IsValidBitcoinAddress(bitcoinAddress)) { return(new AjaxCallResult { Success = false, DisplayMessage = "Invalid address" }); } authData.CurrentUser.BitcoinPayoutAddress = bitcoinAddress; authData.CurrentUser.BitcoinPayoutAddressTimeSet = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture); // TODO: Create notifications for CEO and for user NotificationCustomStrings strings = new NotificationCustomStrings(); strings["BitcoinAddress"] = bitcoinAddress; OutboundComm userNotify = OutboundComm.CreateNotification(authData.CurrentOrganization, "BitcoinPayoutAddress_Set", strings, People.FromSingle(authData.CurrentUser)); strings["ConcernedPersonName"] = authData.CurrentUser.Canonical; OutboundComm adminNotify = OutboundComm.CreateNotification(authData.CurrentOrganization, "BitcoinPayoutAddress_Set_OfficerNotify", strings); // will send to admins of org as no people specified return(new AjaxCallResult { Success = true }); } else { // If the address is already set return(new AjaxCallResult { Success = false, DisplayMessage = "Address already set" }); } }
public void ValidateBitcoinAddressTest() { Assert.IsTrue(BitcoinUtility.IsValidBitcoinAddress("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i")); // VALID Assert.IsTrue(BitcoinUtility.IsValidBitcoinAddress("1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9")); // VALID Assert.IsTrue(BitcoinUtility.IsValidBitcoinAddress("3KS6AuQbZARSvqnaHoHfL1Xhm3bTLFAzoK")); // VALID MULTISIG Assert.IsFalse(BitcoinUtility.IsValidBitcoinAddress("1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62X")); // checksum changed, original data Assert.IsFalse(BitcoinUtility.IsValidBitcoinAddress("1ANNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i")); // data changed, original checksum Assert.IsFalse(BitcoinUtility.IsValidBitcoinAddress("1A Na15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i")); // invalid chars Assert.IsFalse(BitcoinUtility.IsValidBitcoinAddress("BZbvjr")); // checksum is fine, address too short }