-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstarletteExample.py
145 lines (120 loc) · 5 KB
/
starletteExample.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
from starlette.applications import Starlette
from starlette.staticfiles import StaticFiles
from starlette.responses import HTMLResponse
from starlette.routing import Route, Mount
from starlette.middleware.sessions import SessionMiddleware
from starlette.templating import Jinja2Templates
from motor import motor_asyncio
try:
from numpy.random import randint
except:
from random import randint
from moneropos import MoneroPoS
async def homepage(request): # sourcery skip: move-assign
xmrAmount = 0.001
if not request.session.get('integratedAddress', None):
if not request.session.get('xmrAmount', None):
request.session['xmrAmount'] = xmrAmount
if not request.session.get('paymentId', None):
paymentIdResults = await generateAndCheckPaymentId(request)
paymentId = paymentIdResults['paymentId']
request.session['paymentId'] = paymentId
if not request.session.get('appliedToUser', False):
request.session['appliedToUser'] = False
genNewPayment = moneroWallet.generateNewPayment(paymentId=paymentId)
integratedAddress = genNewPayment['address']
request.session['integratedAddress'] = str(integratedAddress)
insertPayment = await insertPaymentIntoDB(paymentId, integratedAddress, xmrAmount)
print(dir(integratedAddress))
return templates.TemplateResponse(
"index.html",
{
"request": request,
}
)
async def lookForConfirmedPayment(request):
txLookupResults = moneroWallet.findConfirmedIncomingTransactions(
paymentId=request.session['paymentId'],
integratedAddress=request.session['integratedAddress'],
xmrAmount=request.session['xmrAmount'],
)
foundAConfirmedTransaction = txLookupResults['foundAConfirmedTransaction']
transactionSumAmountIsCorrect = txLookupResults['transactionSumAmountIsCorrect']
if foundAConfirmedTransaction:
mongoPaymentsCollection.update_one(
{
'paymentId': request.session['paymentId'],
},
{
'$set': {
'foundAConfirmedTransaction': True,
}
}
)
if transactionSumAmountIsCorrect:
mongoPaymentsCollection.update_one(
{
'paymentId': request.session['paymentId'],
},
{
'$set': {
'transactionSumAmountIsCorrect': True,
}
}
)
paymentDoc = await mongoPaymentsCollection.find_one({'paymentId': request.session['paymentId']})
if not paymentDoc.get('appliedToUser', False):
# processCompletedPayment(username="admin", paymentId=request.session['paymentId'], xmrAmount=request.session['xmrAmount'])
mongoPaymentsCollection.update_one(
{
'paymentId': request.session['paymentId'],
},
{
'$set': {
'appliedToUser': True,
}
}
)
request.session['appliedToUser'] = True
request.session['foundAConfirmedTransaction'] = foundAConfirmedTransaction
request.session['transactionSumAmountIsCorrect'] = transactionSumAmountIsCorrect
return templates.TemplateResponse(
"checkForPayments.html",
{
"request": request,
}
)
async def generateAndCheckPaymentId(request):
while True:
paymentId = randint(111111111, 999999999)
paymentIdCount = await mongoPaymentsCollection.count_documents({'paymentId': paymentId})
if paymentIdCount == 0:
return {'success': True, 'paymentId': paymentId}
async def insertPaymentIntoDB(paymentId, integratedAddress, xmrAmount):
await mongoPaymentsCollection.insert_one(
{
'paymentId': paymentId,
'integratedAddress': str(integratedAddress),
'xmrAmount': xmrAmount,
'foundAConfirmedTransaction': False,
'transactionSumAmountIsCorrect': False,
'appliedToUser': False,
}
)
routes = [
Route('/', endpoint=homepage, methods=["GET"]),
Route('/lookForConfirmedPayment', endpoint=lookForConfirmedPayment, methods=["GET"]),
Mount('/static', StaticFiles(directory='static'), name='static'),
]
app = Starlette(debug=True, routes=routes)
app.add_middleware(
SessionMiddleware,
secret_key="~egjfipewgiejwgoegijij37237237237",
max_age=3600,
session_cookie='moneroTestingApp'
)
templates = Jinja2Templates(directory='templates')
moneroWallet = MoneroPoS()
mongoAsyncClient = motor_asyncio.AsyncIOMotorClient('mongodb://localhost:27017')
mongoPoSDB = mongoAsyncClient['moneroPoS']
mongoPaymentsCollection = mongoPoSDB['payments']