Пример #1
0
    def post(self, request):
        data = JSONParser().parse(request)
        username = data.get('username')
        password = data.get('password')
        email = data.get('email')

        try:

            if username and password and email:
                user = User.objects.create_user(username=username,
                                                email=email,
                                                password=password)
                if user:
                    user_dict = {}
                    user_dict['username'] = username
                    user = str(user_dict)
                    user = user.replace('\'', '\"')
                    #Util.sendMessage(message=user,listner=WalletListener(Util.get_stomp_connection()),destination= '/queue/wallet')
                    Util.sendMessage(message=user, destination='wallet')

                else:
                    raise ValidationError(
                        get_env_var('exception.business.user.create'))

            else:
                raise ValidationError(
                    get_env_var('exception.validation.user.create'))
            return JsonResponse(data=data, safe=False, status=201)
        except Exception as e:
            track = traceback.format_exc()
            print(track)
            print("error" + str(e))
            raise e
Пример #2
0
    def get(self, request):

        print('Started ' + self.__class__.__name__ + ' get method')
        try:
            network = request.GET.get('network')
            wallet_id = request.GET.get('wallet_id')
            withsum = request.GET.get('withsum')
            withsum = bool(withsum)
            print('Started ', self.__class__.__name__, '  wallet_id=%s, withsum=%s, network=%s ' % (str(wallet_id),
                                                                                             bool(str(withsum)),network))
            address_list = []
            if  wallet_id and network :
                wallet = HDWallet(wallet_id, db_uri=db_uri)
                wallet_address_list = wallet.addresslist()
                print('Wallet=%s, with unspent value=%s' %(wallet_id,str(wallet.balance())))

                address_list = '|'.join([str(a) for a in wallet_address_list])
                block_service_url = get_env_var(
                    'blockchain.service.url') + '/multiaddr?active=' + address_list
                print('service_url for get balance', block_service_url)
                resp = requests.get(block_service_url)
                print('\nreceived for blcokchain multiaddr resp', resp.status_code)
                address_list = json.loads(resp.text)
                address_list =  self.getunspent(wallet_address_list,address_list,withsum)
                return JsonResponse(address_list, safe=False)
            else:
                raise ValidationError(get_env_var('exception.validation.unspent.no_wallet_or_no_network'))
        except ServiceException as e:
            track = traceback.format_exc()
            print(track)
            raise ServiceException(e)
        except Exception as e:
            track = traceback.format_exc()
            print(track)
            raise ServiceException(get_env_var('exception.business.unspent.serviceexception'))
Пример #3
0
    def post(self, request):
        print("enter sign and send")
        try:
            data = JSONParser().parse(request)
            username = data.get("username")
            hex = data.get("hex")
            coin_type = data.get("type")
            if username and coin_type and hex:
                print(username + "username")
                service_url = get_env_var(
                    'service.url'
                ) + '/address/?action=receive&username='******'&type=' + coin_type
                print(service_url + "service_url")
                resp = requests.get(service_url, auth=service_auth)
                if resp.status_code != 200:
                    print('address response', resp.text)
                    raise ServiceException(
                        get_env_var(
                            'exception.business.sign.serviceexception'))
                else:
                    print('address response', resp.text)
                    response_list = json.loads(resp.text)
                    signsend = SignSendView()
                    sign_dict_str = signsend.sign_txn(hex, response_list)
                    print('sign request ' + sign_dict_str)
                    url = get_url(coin_type, "signtxn")
                    # url = 'https://66f49c90-24e2-4d2b-891d-5746233c8ae7.mock.pstmn.io/sign'

                    if coin_type == 'BTC':
                        resp = requests.post(url,
                                             auth=btc_auth,
                                             data=sign_dict_str)
                    elif coin_type == 'LTC':
                        resp = requests.post(url,
                                             auth=ltc_auth,
                                             data=sign_dict_str)
                    print(resp.status_code)
                    if resp.status_code != 200:
                        print('sign response ' + resp.text)
                        raise ServiceException(
                            get_env_var(
                                'exception.business.sign.serviceexception'))
                    else:
                        print('sign response ' + resp.text)
                        response_dict = json.loads(resp.text)
                        return JsonResponse(response_dict, safe=False)

            else:
                raise ValidationError(
                    get_env_var(
                        'exception.validation.sign.no_user_or_no_coin_type_or_no_hex'
                    ))
        except Exception as e:
            track = traceback.format_exc()
            print(track)
            print("error" + str(resp.status_code))
            raise e
Пример #4
0
    def post(self,request):

        print('Started ' + self.__class__.__name__ + ' get method')
        try:
            data = JSONParser().parse(request)
            network = data.get('network')
            hex = data.get('hex')

            txn_data = {}
            txn_data['wallet_id'] = data.get('wallet_id')
            txn_data['type'] = data.get('txn_type')
            txn_data['destination'] = data.get('address_id')
            txn_data['destination_amount'] = data.get('amount')
            txn_data['message'] = data.get('message')
            txn_data['includes_fee'] = data.get('includes_fee')

            print(' txn with data' + str(data))

            if network and hex:

                if network == 'bitcoin':
                    txn_data['network'] = 'btc'
                    resp = btc_srv.sendrawtransaction(hex)
                    txn_data['network'] = 'ltc'
                elif network == 'litecoin':
                    resp = ltc_srv.sendrawtransaction(hex)
                print('\nreceived for sendrawtransaction  resp', resp.status_code, 'response %s' %(resp.text))
                
                if resp.status_code != 200:
                    Util.sendMessage(message=hex,destination='/queue/txn.failure')
                    raise ServiceException(get_env_var('exception.business.send.serviceexception'))
                else:

                    if resp.text:
                        print('saving in txn')
                        response_dict = json.loads(resp.text)
                        txn_data['txn_id'] = response_dict['result']
                        print('saving in txn with data' + str(txn_data))
                        Util.sendMessage(message=txn_data, destination='/queue/txn')
                        serializer = TxnSerializer(data=txn_data)
                        if serializer.is_valid():
                            serializer.save()
                        else:
                            return JsonResponse(serializer.errors, status=400)
                        return JsonResponse(serializer.data, status=201, safe=False)
                    else:
                        raise ServiceException(get_env_var('exception.business.send.serviceexception'))
            else:
                raise ValidationError(get_env_var('exception.validation.send.no_network_or_no_hex'))

        except Exception as e:
            track = traceback.format_exc()
            logger.exception(track)
            print("error" + str(track))
            raise e;
Пример #5
0
 def get(self,request):
     try:
         print('get')
         txn_id = request.GET.get('txn_id')
         service_url = get_env_var('service.url') + '/txn/'+txn_id
         print(service_url + "service_url")
         resp = requests.get(service_url, auth=service_auth)
         if resp.status_code != 200:
             print(str(resp.status_code) + "error")
             response_dict = json.loads(resp.text)
         else:
             txn = ltc_srv.gettransaction(txn_id)
             print('text' + str(resp.text))
             response_dict = json.loads(resp.text)
             response_dict['status'] = txn['status']
             resp = requests.post(service_url, auth=service_auth,data=response_dict)
             if resp.status_code != 200:
                 print(str(resp.status_code) + "error")
             else:
                 print('txn_id updated' + str(resp.status_code) + " success")
         return  JsonResponse({}, safe=False)
     except Exception as e:
         track = traceback.format_exc()
         print(track)
         print("error" + str(e))
         raise e;
Пример #6
0
    def get(self, request):

        print('Started ' + self.__class__.__name__ + ' get method')
        try:

            wallet_id = request.GET.get('wallet_id')
            just_address = request.GET.get('just_address')
            print(
                'Started ', self.__class__.__name__,
                '  wallet_id=%s, just_address=%s ' %
                (str(wallet_id), bool(str(just_address))))

            if wallet_id:
                wallet = HDWallet(wallet_id, db_uri=db_uri)
                keys = wallet.keys(include_private=True)
                keys = [x.__dict__ for x in keys]
                address_list = []
                if bool(just_address) == True:
                    for key in keys:
                        address_list.append(key['address'])
                else:
                    for key in keys:
                        address_list.append({
                            'address_id': key['address'],
                            'private_key': key['private'],
                            'public_key': key['public']
                        })
                return JsonResponse(address_list, safe=False)
            else:
                raise ValidationError(
                    get_env_var('exception.validation.address.no_wallet'))
        except Exception as e:
            raise e
Пример #7
0
	def getNewAddress(account_id,wallet_id):
		try:
			wallet = HDWallet(wallet_id, db_uri=db_uri)
			address = wallet.new_key(account_id=account_id)
			address = Address(address_id=address.address, network_name=address.network_name)
			return address

		except Exception as e:
			raise ServiceException(get_env_var('exception.business.newaddress.dumpkey.serviceexception'))
Пример #8
0
    def reset(request):
        token = request.GET.get('token')
        email = request.GET.get('email')

        service_url = get_env_var(
            'service.url') + '/user/password_reset/validate_token/'
        print('service_url for validate token', service_url)
        raw_data = '{ "token" : "' + token + '" }'
        headers = {'content-type': 'application/json'}
        resp = requests.post(service_url,
                             auth=service_auth,
                             data=raw_data,
                             headers=headers)
        print('received for get address resp', resp.status_code,
              ' and response %s' % (resp.text))
        resp = json.loads(resp.text)
        context = resp
        context['token'] = token
        context['email'] = email
        print('context', context)

        return render(request, 'change_password.html', context)
Пример #9
0
    def get(self, request, account_id, wallet_id):
        try:
            logger.debug('Started ', self.__class__.__name__, ' get method')
            amount = request.GET.get('amount')
            qr = request.GET.get('qr')
            print(
                'Started ', self.__class__.__name__,
                ' wallet_id=%s,  account_id=%s, qr=%s, amount=%s ' %
                (str(wallet_id), str(account_id), bool(qr), str(amount)))
            if account_id and wallet_id:
                addressimpl = AddressImpl()
                address = addressimpl.getNewAddress(account_id, wallet_id)
                if address:
                    response_dict = {
                        'address_id': address.address_id,
                        'status': 'success'
                    }
                    if qr:
                        text = address.network_name + ':' + address.address_id + ' amoount:' + str(
                            amount)
                        output = Util.generate_qr(text)
                        print('received for  response generate_qr %s' %
                              (output))
                        image = QRSerializer(output).data
                        response_dict['file_type'] = image['file_type']
                        response_dict['image_base64'] = image['image_base64']

                return JsonResponse(response_dict, safe=False)
            else:
                raise ValidationError(
                    get_env_var(
                        'exception.validation.address.no_account_or_no_wallet')
                )
        except AuthenticationError as e:
            raise e
        except Exception as e:
            raise e
Пример #10
0
    def post(self, request, *args, **kwargs):

        print('Started ' + self.__class__.__name__ + ' post method %s' %
              (request.data))
        try:

            serializer = self.serializer_class(data=request.data,
                                               context={'request': request})

            if serializer.is_valid():
                user = serializer.validated_data['user']
                print('Started ' + self.__class__.__name__ + ' post user='******'exception.business.auth.serviceexception'))
                else:
                    token, created = Token.objects.get_or_create(user=user)
                    is_expired, token = token_expire_handler(token)

                return Response({
                    'username': user.username,
                    'user_id': user.user_id,
                    'token': token.key
                })
            else:
                response_dict = {
                    'status': 'error',
                    # the format of error message determined by you base exception class
                    'msg': serializer.errors
                }
                return JsonResponse(response_dict, status=400)

        except Exception as e:
            raise e
Пример #11
0
    def post(self, request):
        print('Started ' + self.__class__.__name__ + ' get method')
        try:

            data = JSONParser().parse(request)
            network = data.get('network')
            output_address = data.get('address_id')
            wallet_id = data.get('wallet_id')
            send_amount = int(data.get('amount'))

            print(
                'Started ', self.__class__.__name__,
                '  wallet_id=%s, withsum=%s, network=%s ' %
                (str(wallet_id), (str(output_address)), network))

            wallet = HDWallet(wallet_id, db_uri=db_uri)
            change_address = wallet.get_key_change()
            change_address = change_address.address
            print('change_address ', change_address)

            if wallet_id:
                service_url = get_env_var(
                    'service.url') + '/unspent/?wallet_id=' + str(
                        wallet_id) + '&network=' + network
                print('service_url for  unspent', service_url)
                resp = requests.get(service_url, auth=service_auth)
                print('received status code for unspent resp',
                      resp.status_code, ' and response %s' % (resp.text))
                if resp.status_code != 200:
                    raise ServiceException(
                        get_env_var('exception.business.fee.serviceexception'))
                else:
                    wallet_address_list = json.loads(resp.text)

                service_url = get_env_var(
                    'service.url') + '/address/?wallet_id=' + str(wallet_id)
                print('service_url for  address', service_url)
                resp = requests.get(service_url, auth=service_auth)
                print('received status code for address resp',
                      resp.status_code)
                if resp.status_code != 200:
                    private_input_address_list = json.loads(resp.text)
                    return JsonResponse(private_input_address_list, safe=False)
                else:
                    private_input_address_list = json.loads(resp.text)
                    blocks = 2
                    fee_per_kb = 0
                    if network == 'bitcoin':
                        fee_per_kb = btc_srv.estimatefee(blocks)
                    elif network == 'litecoin':
                        fee_per_kb = ltc_srv.estimatefee(blocks)

                    print('Fee per kb %s' % (str(fee_per_kb)))

                    t = self.create_transaction(wallet_address_list,
                                                private_input_address_list,
                                                output_address, change_address,
                                                send_amount, fee_per_kb,
                                                network)

                    return JsonResponse(t.as_dict(), safe=False)

            else:
                raise ValidationError(
                    get_env_var('exception.validation.fee.no_coin_type'))
        except ServiceException as e:
            track = traceback.format_exc()
            print(track)
            raise ServiceException(e)
        except Exception as e:
            track = traceback.format_exc()
            print(track)
            return HttpResponse(status=404)
Пример #12
0
    def authenticate(self, request):
        try:

            print('Started ' + self.__class__.__name__ +
                  ' authenticate method')
            key = request.headers.get('Authorization')
            print('Started ', self.__class__.__name__, '  key=%s' % (key))

            if key == None:
                return None

            auth_key = key.split(' ')
            auth = None

            if len(auth_key) > 1:
                auth = auth_key[0]
                key = auth_key[1]
            else:
                return None

            user = None

            if auth == 'Basic':
                print('Basic Auth ')
                username_password = decode(key)
                username = username_password[0]
                password = username_password[1]
                print('Authentication=', auth, 'key=', key, 'username='******'Authentication', auth, 'key', key, 'username',
                          username, 'user_id', user.user_id)
                    if user.check_password(password):
                        print('user exist from user' + str(user.user_id))
                        token = Token.objects.filter(user_id=user.user_id)
                        if token.count() > 0:
                            token = token[0]
                            print('token  key ' + token.key)
                            if not is_token_expired(
                                    token
                            ):  # The implementation will be described further
                                print('Basic Auth Authentication Success')
                                return (token.user, token.key)
                            else:
                                print(
                                    'Basic Auth Authentication with token key failure with token expired'
                                )
                                #is_expired, token = token_expire_handler(token)
                                #return (token.user, token.key)
                                raise AuthenticationError(
                                    get_env_var(
                                        'exception.business.auth.expire.serviceexception'
                                    ))
                        else:
                            print(
                                'Basic Auth Authentication with no  auth token'
                            )
                            token = Token.objects.create(user=user)
                            return (token.user, token.key)

                    else:
                        print('Not authenticated User with password for ' +
                              user.username)
                        raise AuthenticationError(
                            get_env_var(
                                'exception.business.auth.serviceexception'))
                else:
                    print('No user eist with count zero')
                    raise AuthenticationError(
                        get_env_var(
                            'exception.business.auth.expire.serviceexception'))

            else:
                print('Authentication', auth, 'key', key)
                token = Token.objects.filter(key=key)
                if token.count() > 0:
                    print('Token  Authentication')
                    token = token[0]
                    # token_expire_handler will check, if the token is expired it will generate new one
                    if not is_token_expired(
                            token
                    ):  # The implementation will be described further
                        print('Token Auth Authentication Success')
                        return (token.user, token)
                    else:
                        print(
                            'Token Auth Authentication failure with token expired'
                        )
                        return None
                        raise AuthenticationError(
                            get_env_var(
                                'exception.business.auth.expire.serviceexception'
                            ))
                else:
                    print('Token Authentication with no  auth token')
                    raise AuthenticationError(
                        get_env_var(
                            'exception.business.auth.expire.serviceexception'))

        except User.DoesNotExist or Token.DoesNotExist or Exception as e:
            track = traceback.format_exc()
            print('-------track start--------')
            print(track)
            print('-------track end--------')
            return None
            raise e

        print('Authentication Success')
        return user
Пример #13
0
from altcoin.settings.local import db_uri
from altcoin.user.models import User
from bitcoinlib.db import DbInit, DbNetwork
from bitcoinlib.services.bitcoind import BitcoindClient
from bitcoinlib.services.litecoind import LitecoindClient

import base64
import qrcode
import io
import pika

ltc_auth = HTTPBasicAuth(get_coin_env_var('LTC', 'user'),
                         get_coin_env_var('LTC', 'password'))
btc_auth = HTTPBasicAuth(get_coin_env_var('BTC', 'user'),
                         get_coin_env_var('BTC', 'password'))
service_auth = HTTPBasicAuth(get_env_var('service.user'),
                             get_env_var('service.password'))
btc_srv = BitcoindClient()
ltc_srv = LitecoindClient()

user = os.getenv('ACTIVEMQ_USER') or 'guest'
password = os.getenv('ACTIVEMQ_PASSWORD') or 'guest'
host = os.getenv('ACTIVEMQ_HOST') or 'localhost'
#port = int(os.getenv('ACTIVEMQ_PORT') or 61613)
port = int(os.getenv('ACTIVEMQ_PORT') or 15672)


class Util:
    @staticmethod
    def sendMessage(message, destination):
        print('connect')
Пример #14
0
    def post(self, request):
        """
        Retrieve, update or delete a code snippet.
        """
        print("enter sign and send")
        try:
            data = JSONParser().parse(request)
            wallet_id = data.get('wallet_id')
            username = data.get('username')
            hex = data.get('hex')
            coin_type = data.get('type')

            txn_data = {}
            txn_data['username'] = data.get('username')
            txn_data['type'] = data.get('txn_type')
            txn_data['status'] = data.get('status')
            txn_data['source'] = data.get('source')
            txn_data['source_amount'] = data.get('source_amount')
            txn_data['source_currency'] = data.get('source_currency')
            txn_data['destination'] = data.get('destination')
            txn_data['destination_amount'] = data.get('destination_amount')
            txn_data['destination_currency'] = data.get('destination_currency')
            txn_data['message'] = data.get('message')
            txn_data['includes_fee'] = data.get('includes_fee')

            print(' txn with data' + str(data))

            if username and coin_type and hex:
                print(username + "username")
                service_url = get_env_var(
                    'service.url') + '/key/?wallet_id=' + str(
                        wallet_id) + '&type=' + coin_type
                print(service_url + "service_url")
                resp = requests.get(service_url, auth=service_auth)
                if resp.status_code != 200:
                    print('address response', resp.text)
                    raise ServiceException(
                        get_env_var(
                            'exception.business.sign.serviceexception'))
                else:
                    print('address response', resp.text)
                    response_list = json.loads(resp.text)
                    sign_dict_str = self.sign_txn(hex, response_list)
                    print('sign request ' + sign_dict_str)
                    url = get_url(coin_type, "signtxn")
                    # url = 'https://66f49c90-24e2-4d2b-891d-5746233c8ae7.mock.pstmn.io/sign'
                    if coin_type == 'BTC':
                        resp = requests.post(url,
                                             auth=btc_auth,
                                             data=sign_dict_str)
                    elif coin_type == 'LTC':
                        resp = requests.post(url,
                                             auth=ltc_auth,
                                             data=sign_dict_str)

                    print(resp.status_code)
                    if resp.status_code != 200:
                        print('sign response ' + resp.text)
                        raise ServiceException(
                            get_env_var(
                                'exception.business.sign.serviceexception'))
                    else:
                        print('sign response ' + resp.text)
                        send_dict = json.loads(resp.text)
                        send_dict_str = self.send_txn(hex, send_dict)
                        url = get_url(coin_type, 'sendtxn')

                        # url = 'https://66f49c90-24e2-4d2b-891d-5746233c8ae7.mock.pstmn.io/send'
                        if coin_type == 'BTC':
                            resp = requests.post(url,
                                                 auth=btc_auth,
                                                 data=send_dict_str)
                        elif coin_type == 'LTC':
                            resp = requests.post(url,
                                                 auth=ltc_auth,
                                                 data=send_dict_str)

                        print(resp.status_code)
                        if resp.status_code != 200:
                            print('send error response ' + resp.text +
                                  ' with status code' + str(resp.status_code))
                            Util.sendMessage('send', '/queue/test')
                            raise ServiceException(
                                get_env_var(
                                    'exception.business.send.serviceexception')
                            )
                        else:
                            print('send suucess response ' + resp.text +
                                  ' with status code' + str(resp.status_code))
                            Util.sendMessage('send', '/queue/test')
                            if resp.text:
                                print('saving in txn')
                                txn_data['txn_id'] = resp.text
                                serializer = TxnSerializer(data=txn_data)
                                if serializer.is_valid():
                                    serializer.save()
                                else:
                                    print('data invalid')
                                    return JsonResponse(serializer.errors,
                                                        status=400)
                                return JsonResponse(serializer.data,
                                                    status=201,
                                                    safe=False)
                            else:
                                raise ServiceException(
                                    get_env_var(
                                        'exception.business.send.serviceexception'
                                    ))

            else:
                raise ValidationError(
                    get_env_var(
                        'exception.validation.sign.no_user_or_no_coin_type_or_no_hex'
                    ))
        except Exception as e:
            track = traceback.format_exc()
            print(track)
            print("error" + str(e))
            raise e