-
Notifications
You must be signed in to change notification settings - Fork 1
/
sms.py
74 lines (60 loc) · 2.32 KB
/
sms.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from twilio.rest import TwilioRestClient
from two1.bitserv.flask import Payment
from flask import Flask
from flask import request
import dotenv
import os
import json
import yaml
from twilio.rest.exceptions import TwilioRestException
from twilio.rest.lookups import TwilioLookupsClient
from two1.wallet import Two1Wallet
# Load .env file for local use
dotenv_file = ".env"
if os.path.isfile(dotenv_file):
dotenv.load_dotenv(dotenv_file)
client = TwilioRestClient(account=os.environ.get('TWILIO_ACCOUNT'),
token=os.environ.get('TWILIO_AUTH_TOKEN'))
validationclient = TwilioLookupsClient(account=os.environ.get('TWILIO_ACCOUNT'),
token=os.environ.get('TWILIO_AUTH_TOKEN'))
app = Flask(__name__)
TWO1_WALLET_MNEMONIC = os.environ.get("TWO1_WALLET_MNEMONIC")
TWO1_USERNAME = os.environ.get("TWO1_USERNAME")
wallet = Two1Wallet.import_from_mnemonic(mnemonic=TWO1_WALLET_MNEMONIC)
payment = Payment(app, wallet, username=TWO1_USERNAME)
@app.route('/buy', methods=["POST"])
def start():
to = ""
post_data = request.get_json()
if(post_data is None):
return "You need to provide post data", 500
try:
response = validationclient.phone_numbers.get(post_data['phone'])
if(response.country_code != "US"):
return "Only numbers in the US are supported"
to = response.phone_number
except TwilioRestException as e:
data = {"error": "number provided was invalid"}
json_data = json.dumps(data)
return json_data, 500
message = post_data['text']
available_numbers = client.phone_numbers.list()
if len(available_numbers) < 1:
return "This endpoint is down right now. Please try again later", 500
return buy(to, message, available_numbers)
@payment.required(2500)
def buy(to, message, available_numbers):
from_number = available_numbers[0].phone_number
client.messages.create(from_=from_number,
to=to,
body=message)
data = {"to": to, "from": from_number, "message": message}
json_data = json.dumps(data)
return json_data
@app.route("/manifest", methods=["GET"])
def manifest():
with open('manifest.yaml', 'r') as f:
manifest = yaml.load(f)
return json.dumps(manifest)
if __name__ == '__main__':
app.run()