def get_diagonalleys_indexers( wallet_ids: Union[str, List[str]]) -> List[Indexers]: if isinstance(wallet_ids, str): wallet_ids = [wallet_ids] with open_ext_db("diagonalley") as db: q = ",".join(["?"] * len(wallet_ids)) rows = db.fetchall(f"SELECT * FROM indexers WHERE wallet IN ({q})", (*wallet_ids, )) for r in rows: try: x = requests.get(r["indexeraddress"] + "/" + r["ratingkey"]) if x.status_code == 200: with open_ext_db("diagonalley") as db: db.execute( "UPDATE indexers SET online = ? WHERE id = ?", ( True, r["id"], )) else: with open_ext_db("diagonalley") as db: db.execute( "UPDATE indexers SET online = ? WHERE id = ?", ( False, r["id"], )) except: print("An exception occurred") with open_ext_db("diagonalley") as db: q = ",".join(["?"] * len(wallet_ids)) rows = db.fetchall(f"SELECT * FROM indexers WHERE wallet IN ({q})", (*wallet_ids, )) return [Indexers(**row) for row in rows]
def get_diagonalleys_orders(wallet_ids: Union[str, List[str]]) -> List[Orders]: if isinstance(wallet_ids, str): wallet_ids = [wallet_ids] with open_ext_db("diagonalley") as db: q = ",".join(["?"] * len(wallet_ids)) rows = db.fetchall( f"SELECT * FROM diagonalley.orders WHERE wallet IN ({q})", (*wallet_ids,) ) for r in rows: PAID = (await WALLET.get_invoice_status(r["invoiceid"])).paid if PAID: with open_ext_db("diagonalley") as db: db.execute( "UPDATE diagonalley.orders SET paid = ? WHERE id = ?", ( True, r["id"], ), ) rows = db.fetchall( f"SELECT * FROM diagonalley.orders WHERE wallet IN ({q})", (*wallet_ids,), ) return [Orders(**row) for row in rows]
def get_diagonalleys_indexer(indexer_id: str) -> Optional[Indexers]: with open_ext_db("diagonalley") as db: roww = db.fetchone( "SELECT * FROM diagonalley.indexers WHERE id = ?", (indexer_id,) ) try: x = httpx.get(roww["indexeraddress"] + "/" + roww["ratingkey"]) if x.status_code == 200: print(x) print("poo") with open_ext_db("diagonalley") as db: db.execute( "UPDATE diagonalley.indexers SET online = ? WHERE id = ?", ( True, indexer_id, ), ) else: with open_ext_db("diagonalley") as db: db.execute( "UPDATE diagonalley.indexers SET online = ? WHERE id = ?", ( False, indexer_id, ), ) except: print("An exception occurred") with open_ext_db("diagonalley") as db: row = db.fetchone( "SELECT * FROM diagonalley.indexers WHERE id = ?", (indexer_id,) ) return Indexers(**row) if row else None
def delete_usermanager_user(user_id: str) -> None: row = get_usermanager_wallets(user_id) print("test") with open_ext_db("usermanager") as db: db.execute("DELETE FROM users WHERE id = ?", (user_id,)) row for r in row: delete_wallet(user_id=user_id, wallet_id=r.id) with open_ext_db("usermanager") as dbb: dbb.execute("DELETE FROM wallets WHERE user = ?", (user_id,))
def api_lnurlfetch(parstr, urlstr, rand): """Returns LNURL json.""" if not parstr: return jsonify({"status": "FALSE", "ERROR": "NO WALL ID"}), 200 if not urlstr: return jsonify({"status": "FALSE", "ERROR": "NO URL"}), 200 with open_ext_db("withdraw") as withdraw_ext_db: user_fau = withdraw_ext_db.fetchall( "SELECT * FROM withdraws WHERE uni = ?", (parstr, )) k1str = uuid.uuid4().hex withdraw_ext_db.execute( "UPDATE withdraws SET withdrawals = ? WHERE uni = ?", ( k1str, parstr, )) res = LnurlWithdrawResponse( callback=url_for("withdraw.api_lnurlwithdraw", _external=True, rand=rand).replace("http://", "https://"), k1=k1str, min_withdrawable=user_fau[0][8] * 1000, max_withdrawable=user_fau[0][7] * 1000, default_description="LNbits LNURL withdraw", ) return res.json(), 200
def api_lnurlencode(urlstr, parstr): """Returns encoded LNURL if web url and parameter gieven.""" if not urlstr: return jsonify({"status": "FALSE"}), 200 with open_ext_db("withdraw") as withdraw_ext_db: user_fau = withdraw_ext_db.fetchall( "SELECT * FROM withdraws WHERE uni = ?", (parstr, )) randar = user_fau[0][15].split(",") print(randar) # randar = randar[:-1] # If "Unique links" selected get correct rand, if not there is only one rand if user_fau[0][12] > 0: rand = randar[user_fau[0][10] - 1] else: rand = randar[0] url = url_for("withdraw.api_lnurlfetch", _external=True, urlstr=urlstr, parstr=parstr, rand=rand) return jsonify({ "status": "TRUE", "lnurl": lnurl_encode(url.replace("http://", "https://")) }), 200
def create_pay_link( *, wallet_id: str, description: str, amount: int, webhook_url: Optional[str] = None, success_text: Optional[str] = None, success_url: Optional[str] = None, ) -> Optional[PayLink]: with open_ext_db("lnurlp") as db: db.execute( """ INSERT INTO pay_links ( wallet, description, amount, served_meta, served_pr, webhook_url, success_text, success_url ) VALUES (?, ?, ?, 0, 0, ?, ?, ?) """, (wallet_id, description, amount, webhook_url, success_text, success_url), ) link_id = db.cursor.lastrowid return get_pay_link(link_id)
def index(): """Main withdraw link page.""" usr = request.args.get("usr") if usr: if not len(usr) > 20: return redirect(url_for("home")) # Get all the data with open_db() as db: user_wallets = db.fetchall("SELECT * FROM wallets WHERE user = ?", (usr, )) user_ext = db.fetchall("SELECT * FROM extensions WHERE user = ?", (usr, )) user_ext = [v[0] for v in user_ext] with open_ext_db("withdraw") as withdraw_ext_db: user_fau = withdraw_ext_db.fetchall( "SELECT * FROM withdraws WHERE usr = ?", (usr, )) # If del is selected by user from withdraw page, the withdraw link is to be deleted faudel = request.args.get("del") if faudel: withdraw_ext_db.execute("DELETE FROM withdraws WHERE uni = ?", (faudel, )) user_fau = withdraw_ext_db.fetchall( "SELECT * FROM withdraws WHERE usr = ?", (usr, )) return render_template("withdraw/index.html", user_wallets=user_wallets, user=usr, user_ext=user_ext, user_fau=user_fau)
def create_event( *, wallet: str, name: str, info: str, closing_date: str, event_start_date: str, event_end_date: str, amount_tickets: int, price_per_ticket: int, ) -> Events: with open_ext_db("events") as db: event_id = urlsafe_short_hash() db.execute( """ INSERT INTO events (id, wallet, name, info, closing_date, event_start_date, event_end_date, amount_tickets, price_per_ticket, sold) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """, ( event_id, wallet, name, info, closing_date, event_start_date, event_end_date, amount_tickets, price_per_ticket, 0, ), ) print(event_id) return get_event(event_id)
def update_ticket(paid: bool, checking_id: str) -> Tickets: with open_ext_db("events") as db: row = db.fetchone("SELECT * FROM ticket WHERE id = ?", (checking_id,)) if row[6] == True: return get_ticket(checking_id) db.execute( """ UPDATE ticket SET paid = ? WHERE id = ? """, (paid, checking_id), ) eventdata = get_event(row[2]) sold = eventdata.sold + 1 amount_tickets = eventdata.amount_tickets - 1 db.execute( """ UPDATE events SET sold = ?, amount_tickets = ? WHERE id = ? """, (sold, amount_tickets, row[2]), ) return get_ticket(checking_id)
def get_event_tickets(event_id: str, wallet_id: str) -> Tickets: with open_ext_db("events") as db: rows = db.fetchall("SELECT * FROM ticket WHERE wallet = ? AND event = ?", (wallet_id, event_id)) print(rows) return [Tickets(**row) for row in rows]
async def api_diagonalley_stall_order(indexer_id): product = get_diagonalleys_product(g.data["id"]) shipping = get_diagonalleys_indexer(indexer_id) if g.data["shippingzone"] == 1: shippingcost = shipping.zone1cost else: shippingcost = shipping.zone2cost checking_id, payment_request = create_invoice( wallet_id=product.wallet, amount=shippingcost + (g.data["quantity"] * product.price), memo=g.data["id"] ) selling_id = urlsafe_b64encode(uuid4().bytes_le).decode("utf-8") with open_ext_db("diagonalley") as db: db.execute( """ INSERT INTO orders (id, productid, wallet, product, quantity, shippingzone, address, email, invoiceid, paid, shipped) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """, ( selling_id, g.data["id"], product.wallet, product.product, g.data["quantity"], g.data["shippingzone"], g.data["address"], g.data["email"], checking_id, False, False, ), ) return jsonify({"checking_id": checking_id, "payment_request": payment_request}), HTTPStatus.OK
def get_usermanager_wallets(user_id: str) -> Wallets: with open_ext_db("usermanager") as db: rows = db.fetchall("SELECT * FROM wallets WHERE admin = ?", (user_id, )) return [Wallets(**row) for row in rows]
def update_ticket(paid: bool, payment_hash: str) -> Tickets: with open_ext_db("lnticket") as db: row = db.fetchone("SELECT * FROM ticket WHERE id = ?", (payment_hash, )) if row[7] == True: return get_ticket(payment_hash) db.execute( """ UPDATE ticket SET paid = ? WHERE id = ? """, (paid, payment_hash), ) formdata = get_form(row[1]) amount = formdata.amountmade + row[7] db.execute( """ UPDATE forms SET amountmade = ? WHERE id = ? """, (amount, row[1]), ) return get_ticket(payment_hash)
def get_diagonalleys_product(product_id: str) -> Optional[Products]: with open_ext_db("diagonalley") as db: row = db.fetchone( "SELECT * FROM diagonalley.products WHERE id = ?", (product_id,) ) return Products(**row) if row else None
def create_diagonalleys_product( *, wallet_id: str, product: str, categories: str, description: str, image: str, price: int, quantity: int, ) -> Products: with open_ext_db("diagonalley") as db: product_id = urlsafe_b64encode(uuid4().bytes_le).decode("utf-8") db.execute( """ INSERT INTO diagonalley.products (id, wallet, product, categories, description, image, price, quantity) VALUES (?, ?, ?, ?, ?, ?, ?, ?) """, ( product_id, wallet_id, product, categories, description, image, price, quantity, ), ) return get_diagonalleys_product(product_id)
def create_diagonalleys_order( *, productid: str, wallet: str, product: str, quantity: int, shippingzone: str, address: str, email: str, invoiceid: str, paid: bool, shipped: bool, ) -> Indexers: with open_ext_db("diagonalley") as db: order_id = urlsafe_b64encode(uuid4().bytes_le).decode("utf-8") db.execute( """ INSERT INTO orders (id, productid, wallet, product, quantity, shippingzone, address, email, invoiceid, paid, shipped) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """, (order_id, productid, wallet, product, quantity, shippingzone, address, email, invoiceid, False, False), ) return get_diagonalleys_order(order_id)
def api_diagonalleys_order_paid(order_id): with open_ext_db("diagonalley") as db: db.execute("UPDATE orders SET paid = ? WHERE id = ?", ( True, order_id, )) return "", Status.OK
async def api_diagonalleys_stall_checkshipped(checking_id): with open_ext_db("diagonalley") as db: rows = db.fetchone( "SELECT * FROM diagonalley.orders WHERE invoiceid = ?", (checking_id, )) return jsonify({"shipped": rows["shipped"]}), HTTPStatus.OK
def update_withdraw_link(link_id: str, **kwargs) -> Optional[WithdrawLink]: q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()]) with open_ext_db("withdraw") as db: db.execute(f"UPDATE withdraw_links SET {q} WHERE id = ?", (*kwargs.values(), link_id)) row = db.fetchone("SELECT * FROM withdraw_links WHERE id = ?", (link_id,)) return WithdrawLink.from_row(row) if row else None
def create_diagonalleys_indexer( wallet_id: str, shopname: str, indexeraddress: str, shippingzone1: str, shippingzone2: str, zone1cost: int, zone2cost: int, email: str, ) -> Indexers: with open_ext_db("diagonalley") as db: indexer_id = urlsafe_b64encode(uuid4().bytes_le).decode("utf-8") db.execute( """ INSERT INTO diagonalley.indexers (id, wallet, shopname, indexeraddress, online, rating, shippingzone1, shippingzone2, zone1cost, zone2cost, email) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """, ( indexer_id, wallet_id, shopname, indexeraddress, False, 0, shippingzone1, shippingzone2, zone1cost, zone2cost, email, ), ) return get_diagonalleys_indexer(indexer_id)
def reg_ticket(ticket_id: str) -> Tickets: with open_ext_db("events") as db: db.execute("UPDATE ticket SET registered = ? WHERE id = ?", (True, ticket_id)) ticket = db.fetchone("SELECT * FROM ticket WHERE id = ?", (ticket_id,)) print(ticket[1]) rows = db.fetchall("SELECT * FROM ticket WHERE event = ?", (ticket[1],)) return [Tickets(**row) for row in rows]
def update_event(event_id: str, **kwargs) -> Events: q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()]) with open_ext_db("events") as db: db.execute(f"UPDATE events SET {q} WHERE id = ?", (*kwargs.values(), event_id)) row = db.fetchone("SELECT * FROM events WHERE id = ?", (event_id,)) return Events(**row) if row else None
def update_form(form_id: str, **kwargs) -> Forms: q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()]) with open_ext_db("lnticket") as db: db.execute(f"UPDATE forms SET {q} WHERE id = ?", (*kwargs.values(), form_id)) row = db.fetchone("SELECT * FROM forms WHERE id = ?", (form_id, )) return Forms(**row) if row else None
def get_paywalls(wallet_ids: Union[str, List[str]]) -> List[Paywall]: if isinstance(wallet_ids, str): wallet_ids = [wallet_ids] with open_ext_db("paywall") as db: q = ",".join(["?"] * len(wallet_ids)) rows = db.fetchall(f"SELECT * FROM paywalls WHERE wallet IN ({q})", (*wallet_ids,)) return [Paywall(**row) for row in rows]
def mark_webhook_sent(payment_hash: str, status: int) -> None: with open_ext_db("lnurlp") as db: db.execute( """ UPDATE invoices SET webhook_sent = ? WHERE payment_hash = ? """, (status, payment_hash), )
def get_withdraw_links(wallet_ids: Union[str, List[str]]) -> List[WithdrawLink]: if isinstance(wallet_ids, str): wallet_ids = [wallet_ids] with open_ext_db("withdraw") as db: q = ",".join(["?"] * len(wallet_ids)) rows = db.fetchall(f"SELECT * FROM withdraw_links WHERE wallet IN ({q})", (*wallet_ids,)) return [WithdrawLink.from_row(row) for row in rows]
def get_withdraw_link(link_id: str, num=None) -> Optional[WithdrawLink]: with open_ext_db("withdraw") as db: row = db.fetchone("SELECT * FROM withdraw_links WHERE id = ?", (link_id,)) link = [] for item in row: link.append(item) tohash = row["id"] + row["unique_hash"] + str(num) link.append(shortuuid.uuid(name=tohash)) return WithdrawLink._make(link)
def get_withdraw_link(link_id: str, num=0) -> Optional[WithdrawLink]: with open_ext_db("withdraw") as db: row = db.fetchone("SELECT * FROM withdraw_link WHERE id = ?", (link_id, )) link = [] for item in row: link.append(item) link.append(num) return WithdrawLink._make(link)
def increment_pay_link(link_id: int, **kwargs) -> Optional[PayLink]: q = ", ".join([f"{field[0]} = {field[0]} + ?" for field in kwargs.items()]) with open_ext_db("lnurlp") as db: db.execute(f"UPDATE pay_links SET {q} WHERE id = ?", (*kwargs.values(), link_id)) row = db.fetchone("SELECT * FROM pay_links WHERE id = ?", (link_id, )) return PayLink.from_row(row) if row else None