parent
57c96237de
commit
3fae0e16f8
@ -0,0 +1,333 @@
|
|||||||
|
from fastapi import FastAPI, HTTPException
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from db import *
|
||||||
|
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
def token_check(token):
|
||||||
|
db = read()
|
||||||
|
if token in db['tokens']:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
class User_in_db(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str = None
|
||||||
|
tg: str = None
|
||||||
|
ds: str = None
|
||||||
|
mine: str = None
|
||||||
|
nick: str = None
|
||||||
|
@app.post('/api/user_in_db/')
|
||||||
|
def user_in_db(it: User_in_db):
|
||||||
|
token, id, tg, ds, mine, nick = it.token, it.id, it.tg, it.ds, it.mine, it.nick
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
try:
|
||||||
|
if id and id in db['id']:
|
||||||
|
return id
|
||||||
|
elif tg and tg in db['tg']:
|
||||||
|
return db['tg'][tg]
|
||||||
|
elif ds and ds in db['ds']:
|
||||||
|
return db['ds'][ds]
|
||||||
|
elif mine and mine in db['mine']:
|
||||||
|
return db['mine'][mine]
|
||||||
|
elif nick and nick in db['nick']:
|
||||||
|
return db['nick'][nick]
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
|
||||||
|
def gen_id():
|
||||||
|
db = read()
|
||||||
|
for i in range(1,100000):
|
||||||
|
check = str(i)
|
||||||
|
print(db)
|
||||||
|
if check not in db['id']:
|
||||||
|
return str(i)
|
||||||
|
return 'Full?'
|
||||||
|
|
||||||
|
class User_add(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str = None
|
||||||
|
tg: str = None
|
||||||
|
ds: str = None
|
||||||
|
mine: str = None
|
||||||
|
nick: str
|
||||||
|
passwd: str
|
||||||
|
@app.post('/api/user_add/')
|
||||||
|
def user_add(it: User_add):
|
||||||
|
token, id, tg, ds, mine, nick, passwd = it.token, it.id, it.tg, it.ds, it.mine, it.nick, it.passwd
|
||||||
|
id = gen_id()
|
||||||
|
print(id)
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
db['id'][id] = {'tg': tg, 'ds': ds, 'mine': mine, 'nick': nick, 'passwd': passwd, 'bal': 0.0}
|
||||||
|
db['nick'][nick] = id
|
||||||
|
if tg:
|
||||||
|
db['tg'][tg] = id
|
||||||
|
if ds:
|
||||||
|
db['ds'][ds] = id
|
||||||
|
if mine:
|
||||||
|
db['mine'][mine] = id
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class User_del(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
@app.post('/api/user_del/')
|
||||||
|
def user_del(it: User_del):
|
||||||
|
token, id = it.token, it.id
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
tg, ds, mine, nick = db['id'][id]['tg'], db['id'][id]['ds'], db['id'][id]['mine'], db['id'][id]['nick']
|
||||||
|
del db['nick'][nick]
|
||||||
|
if tg:
|
||||||
|
del db['tg'][tg]
|
||||||
|
if ds:
|
||||||
|
del db['ds'][ds]
|
||||||
|
if mine:
|
||||||
|
del db['mine'][mine]
|
||||||
|
del db['id'][id]
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Coins_add(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
amount: str
|
||||||
|
@app.post('/api/coins_add/')
|
||||||
|
def coins_add(it: Coins_add):
|
||||||
|
token, id, amount = it.token, it.id, float(it.amount)
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
db['id'][id]['bal'] += amount
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Coins_del(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
amount: str
|
||||||
|
@app.post('/api/coins_del/')
|
||||||
|
def coins_del(it: Coins_del):
|
||||||
|
token, id, amount = it.token, it.id, float(it.amount)
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
db['id'][id]['bal'] -= amount
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Coins_transfer(BaseModel):
|
||||||
|
token: str
|
||||||
|
src_id: str
|
||||||
|
dst_id: str
|
||||||
|
amount: str
|
||||||
|
@app.post('/api/coins_transfer/')
|
||||||
|
def coins_transfer(it: Coins_transfer):
|
||||||
|
token, src_id, dst_id, amount = it.token, it.src_id, it.dst_id, float(it.amount)
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
amount = abs(amount) # Защита от отриц. чисел
|
||||||
|
src_bal = db['id'][src_id]['bal']
|
||||||
|
if src_bal > amount and amount > 0.0001:
|
||||||
|
db['id'][src_id]['bal'] -= amount
|
||||||
|
db['id'][dst_id]['bal'] += amount
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'No_money'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Update_tg(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
tg: str
|
||||||
|
@app.post('/api/update_tg/')
|
||||||
|
def update_tg(it: Update_tg):
|
||||||
|
token, id, tg = it.token, it.id, it.tg
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
cur_tg = db['id'][id]['tg']
|
||||||
|
try:
|
||||||
|
del db['tg'][cur_tg]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
if tg == 'None':
|
||||||
|
db['id'][id]['tg'] = None
|
||||||
|
else:
|
||||||
|
db['id'][id]['tg'] = tg
|
||||||
|
db['tg'][tg] = id
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Update_ds(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
ds: str
|
||||||
|
@app.post('/api/update_ds/')
|
||||||
|
def update_ds(it: Update_ds):
|
||||||
|
token, id, ds = it.token, it.id, it.ds
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
cur_ds = db['id'][id]['ds']
|
||||||
|
try:
|
||||||
|
del db['ds'][cur_ds]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
if ds == 'None':
|
||||||
|
db['id'][id]['ds'] = None
|
||||||
|
else:
|
||||||
|
db['id'][id]['ds'] = ds
|
||||||
|
db['ds'][ds] = id
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Update_mine(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
mine: str
|
||||||
|
@app.post('/api/update_mine/')
|
||||||
|
def update_mine(it: Update_mine):
|
||||||
|
token, id, mine = it.token, it.id, it.mine
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
cur_mine = db['id'][id]['mine']
|
||||||
|
del db['mine'][cur_mine]
|
||||||
|
db['id'][id]['mine'] = mine
|
||||||
|
db['mine'][mine] = id
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Update_nick(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
nick: str
|
||||||
|
@app.post('/api/update_nick/')
|
||||||
|
def update_nick(it: Update_nick):
|
||||||
|
token, id, nick = it.token, it.id, it.nick
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
cur_nick = db['id'][id]['nick']
|
||||||
|
del db['nick'][cur_nick]
|
||||||
|
db['id'][id]['nick'] = nick
|
||||||
|
db['nick'][nick] = id
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Update_passwd(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
passwd: str
|
||||||
|
@app.post('/api/update_passwd/')
|
||||||
|
def update_tg(it: Update_passwd):
|
||||||
|
token, id, passwd = it.token, it.id, it.passwd
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
db['id'][id]['passwd'] = passwd
|
||||||
|
write(db)
|
||||||
|
return 'OK'
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
|
||||||
|
class Check_bal(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
@app.post('/api/check_bal/')
|
||||||
|
def check_bal(it: Check_bal):
|
||||||
|
token, id = it.token, it.id
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
return db['id'][id]['bal']
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Get_nick(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
@app.post('/api/get_nick/')
|
||||||
|
def get_nick(it: Get_nick):
|
||||||
|
token, id = it.token, it.id
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
return db['id'][id]['nick']
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Get_tg(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
@app.post('/api/get_tg/')
|
||||||
|
def get_tg(it: Get_tg):
|
||||||
|
token, id = it.token, it.id
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
return db['id'][id]['tg']
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Get_ds(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
@app.post('/api/get_ds/')
|
||||||
|
def get_ds(it: Get_ds):
|
||||||
|
token, id = it.token, it.id
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
return db['id'][id]['ds']
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Get_mine(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
@app.post('/api/get_mine/')
|
||||||
|
def get_mine(it: Get_mine):
|
||||||
|
token, id = it.token, it.id
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
return db['id'][id]['mine']
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
class Get_passwd(BaseModel):
|
||||||
|
token: str
|
||||||
|
id: str
|
||||||
|
@app.post('/api/get_passwd/')
|
||||||
|
def get_passwd(it: Get_passwd):
|
||||||
|
token, id = it.token, it.id
|
||||||
|
if token_check(token):
|
||||||
|
db = read()
|
||||||
|
return db['id'][id]['passwd']
|
||||||
|
else:
|
||||||
|
return 'Error'
|
||||||
|
|
||||||
|
# TODO: unauth from account
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import uvicorn
|
||||||
|
uvicorn.run(app, host='127.0.0.1', port=1111)
|
@ -0,0 +1,111 @@
|
|||||||
|
from requests import post
|
||||||
|
from json import dumps
|
||||||
|
from xxhash import xxh32
|
||||||
|
|
||||||
|
from db import *
|
||||||
|
|
||||||
|
global url_pre
|
||||||
|
url_pre = 'http://127.0.0.1:1111/'
|
||||||
|
|
||||||
|
def hash(text):
|
||||||
|
text = str(text)
|
||||||
|
return xxh32(text).hexdigest()
|
||||||
|
|
||||||
|
def call(api_url, data):
|
||||||
|
response = post(url_pre + api_url, data=dumps(data))
|
||||||
|
print(response.status_code)
|
||||||
|
print(response.text)
|
||||||
|
return response.text.replace('"', '')
|
||||||
|
|
||||||
|
def user_in_db(token, id=None, tg=None, ds=None, mine=None, nick=None):
|
||||||
|
data = {'token': token}
|
||||||
|
if id:
|
||||||
|
data['id'] = id
|
||||||
|
elif tg:
|
||||||
|
data['tg'] = str(tg)
|
||||||
|
elif ds:
|
||||||
|
data['ds'] = str(ds)
|
||||||
|
elif mine:
|
||||||
|
data['mine'] = mine
|
||||||
|
elif nick:
|
||||||
|
data['nick'] = nick
|
||||||
|
#print(data)
|
||||||
|
return call('api/user_in_db/', data)
|
||||||
|
|
||||||
|
def user_add(token, nick, passwd, tg=None, ds=None, mine=None):
|
||||||
|
passwd = hash(passwd)
|
||||||
|
data = {'token': token, 'nick': nick, 'passwd': passwd}
|
||||||
|
if tg:
|
||||||
|
data['tg'] = str(tg)
|
||||||
|
if ds:
|
||||||
|
data['ds'] = str(ds)
|
||||||
|
if mine:
|
||||||
|
data['mine'] = mine
|
||||||
|
print(data)
|
||||||
|
return call('api/user_add/', data)
|
||||||
|
|
||||||
|
def user_del(token, id):
|
||||||
|
data = {'token': token, 'id': id}
|
||||||
|
return call('api/user_del/', data)
|
||||||
|
|
||||||
|
def coins_add(token, id, amount):
|
||||||
|
data = {'token': token, 'id': id, 'amount': amount}
|
||||||
|
return call('api/coins_add/', data)
|
||||||
|
|
||||||
|
def coins_del(token, id, amount):
|
||||||
|
data = {'token': token, 'id': id, 'amount': amount}
|
||||||
|
return call('api/coins_del/', data)
|
||||||
|
|
||||||
|
def coins_transfer(token, src_id, dst_id, amount):
|
||||||
|
data = {'token': token, 'src_id': src_id, 'dst_id': dst_id, 'amount': amount}
|
||||||
|
return call('api/coins_transfer/', data)
|
||||||
|
|
||||||
|
def update_tg(token, id, tg):
|
||||||
|
if tg != None:
|
||||||
|
data = {'token': token, 'id': id, 'tg': str(tg)}
|
||||||
|
else:
|
||||||
|
data = {'token': token, 'id': id, 'tg': None}
|
||||||
|
return call('api/update_tg/', data)
|
||||||
|
|
||||||
|
def update_ds(token, id, ds):
|
||||||
|
data = {'token': token, 'id': id, 'ds': str(ds)}
|
||||||
|
return call('api/update_ds/', data)
|
||||||
|
|
||||||
|
def update_mine(token, id, mine):
|
||||||
|
data = {'token': token, 'id': id, 'mine': str(mine)}
|
||||||
|
return call('api/update_mine/', data)
|
||||||
|
|
||||||
|
def update_nick(token, id, nick):
|
||||||
|
data = {'token': token, 'id': id, 'nick': nick}
|
||||||
|
return call('api/update_nick/', data)
|
||||||
|
|
||||||
|
def update_passwd(token, id, passwd):
|
||||||
|
data = {'token': token, 'id': id, 'passwd': hash(passwd)}
|
||||||
|
return call('api/update_passwd/', data)
|
||||||
|
|
||||||
|
|
||||||
|
def check_bal(token, id):
|
||||||
|
data = {'token': token, 'id': id}
|
||||||
|
return call('api/check_bal/', data)
|
||||||
|
|
||||||
|
def get_nick(token, id):
|
||||||
|
data = {'token': token, 'id': id}
|
||||||
|
return call('api/get_nick/', data)
|
||||||
|
|
||||||
|
def get_tg(token, id):
|
||||||
|
data = {'token': token, 'id': id}
|
||||||
|
return call('api/get_tg/', data)
|
||||||
|
|
||||||
|
def get_ds(token, id):
|
||||||
|
data = {'token': token, 'id': id}
|
||||||
|
return call('api/get_ds/', data)
|
||||||
|
|
||||||
|
def get_mine(token, id):
|
||||||
|
data = {'token': token, 'id': id}
|
||||||
|
return call('api/get_mine/', data)
|
||||||
|
|
||||||
|
def get_passwd(token, id):
|
||||||
|
data = {'token': token, 'id': id}
|
||||||
|
return call('api/get_passwd/', data)
|
||||||
|
|
||||||
|
#print( user_in_db('ee77b9d8-44f3-4e01-a702-69d5524ee50b', '1234') )
|
@ -0,0 +1,33 @@
|
|||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
if not os.path.exists('db.json'):
|
||||||
|
db = {'tokens': [],
|
||||||
|
'id': {},
|
||||||
|
'tg': {},
|
||||||
|
'ds': {},
|
||||||
|
'mine': {},
|
||||||
|
'nick': {}}
|
||||||
|
js = json.dumps(db, indent=2)
|
||||||
|
with open("db.json", "w") as outfile:
|
||||||
|
outfile.write(js)
|
||||||
|
print('Created new db.json')
|
||||||
|
|
||||||
|
if not os.path.exists('conf.json'):
|
||||||
|
db = {'api_token': 'None',
|
||||||
|
'tg_token': 'None',
|
||||||
|
'ds_token': 'None'}
|
||||||
|
js = json.dumps(db, indent=2)
|
||||||
|
with open("conf.json", "w") as outfile:
|
||||||
|
outfile.write(js)
|
||||||
|
print('Created new conf.json')
|
||||||
|
|
||||||
|
def read(file = 'db.json'):
|
||||||
|
with open(file, "r", encoding="utf-8") as openfile:
|
||||||
|
db = json.load(openfile)
|
||||||
|
return db
|
||||||
|
|
||||||
|
def write(db, file = 'db.json'):
|
||||||
|
js = json.dumps(db, indent=2, ensure_ascii=False)
|
||||||
|
with open(file, "w", encoding="utf-8") as outfile:
|
||||||
|
outfile.write(js)
|
@ -0,0 +1,11 @@
|
|||||||
|
from db import *
|
||||||
|
from uuid import uuid4
|
||||||
|
|
||||||
|
db = read()
|
||||||
|
token = str(uuid4())
|
||||||
|
|
||||||
|
db['tokens'].append(token)
|
||||||
|
write(db)
|
||||||
|
|
||||||
|
print(f'Сгенерирован новый токен: {token}')
|
||||||
|
|
Loading…
Reference in new issue