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"
                });
            }
        }
Example #2
0
 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
 }