create scrub link
This commit is contained in:
parent
395b4379a4
commit
1a394d0a73
5 changed files with 48 additions and 119 deletions
|
|
@ -1,30 +1,31 @@
|
|||
from typing import List, Optional, Union
|
||||
|
||||
from lnbits.db import SQLITE
|
||||
from lnbits.helpers import urlsafe_short_hash
|
||||
|
||||
from . import db
|
||||
from .models import ScrubLink
|
||||
from .models import CreateScrubLink, ScrubLink
|
||||
|
||||
|
||||
async def create_scrub_link(wallet_id: str, data: ScrubLink) -> ScrubLink:
|
||||
satsdice_id = urlsafe_short_hash()
|
||||
async def create_scrub_link(wallet_id: str, data: CreateScrubLink) -> ScrubLink:
|
||||
scrub_id = urlsafe_short_hash()
|
||||
await db.execute(
|
||||
"""
|
||||
INSERT INTO scrub.scrub_links (
|
||||
id,
|
||||
wallet,
|
||||
description,
|
||||
payoraddress,
|
||||
payoraddress
|
||||
)
|
||||
VALUES (?, ?, ?)
|
||||
VALUES (?, ?, ?, ?)
|
||||
""",
|
||||
(
|
||||
satsdice_id,
|
||||
wallet,
|
||||
description,
|
||||
payoraddress,
|
||||
scrub_id,
|
||||
data.wallet,
|
||||
data.description,
|
||||
data.payoraddress,
|
||||
),
|
||||
)
|
||||
link = await get_satsdice_pay(satsdice_id)
|
||||
link = await get_scrub_link(scrub_id)
|
||||
assert link, "Newly created link couldn't be retrieved"
|
||||
return link
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
import json
|
||||
from urllib.parse import urlparse, urlunparse, parse_qs, urlencode, ParseResult
|
||||
from starlette.requests import Request
|
||||
from fastapi.param_functions import Query
|
||||
from typing import Optional, Dict
|
||||
from lnbits.lnurl import encode as lnurl_encode # type: ignore
|
||||
from sqlite3 import Row
|
||||
from typing import Dict, Optional
|
||||
from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse
|
||||
|
||||
from fastapi.param_functions import Query
|
||||
from pydantic import BaseModel
|
||||
from starlette.requests import Request
|
||||
|
||||
from lnbits.lnurl import encode as lnurl_encode # type: ignore
|
||||
|
||||
|
||||
class CreateScrubLink(BaseModel):
|
||||
|
|
@ -15,7 +17,7 @@ class CreateScrubLink(BaseModel):
|
|||
|
||||
|
||||
class ScrubLink(BaseModel):
|
||||
id: int
|
||||
id: str
|
||||
wallet: str
|
||||
description: str
|
||||
payoraddress: str
|
||||
|
|
@ -27,4 +29,4 @@ class ScrubLink(BaseModel):
|
|||
|
||||
def lnurl(self, req: Request) -> str:
|
||||
url = req.url_for("scrub.api_lnurl_response", link_id=self.id)
|
||||
return lnurl_encode(url)
|
||||
return lnurl_encode(url)
|
||||
|
|
|
|||
|
|
@ -106,7 +106,8 @@ new Vue({
|
|||
const wallet = _.findWhere(this.g.user.wallets, {
|
||||
id: this.formDialog.data.wallet
|
||||
})
|
||||
console.log(wallet)
|
||||
let data = Object.freeze(this.formDialog.data)
|
||||
console.log(wallet, data)
|
||||
|
||||
if (data.id) {
|
||||
this.updateScrubLink(wallet, data)
|
||||
|
|
@ -162,6 +163,7 @@ new Vue({
|
|||
LNbits.api
|
||||
.request('POST', '/scrub/api/v1/links', wallet.adminkey, data)
|
||||
.then(response => {
|
||||
console.log('RES', response)
|
||||
this.getScrubLinks()
|
||||
this.formDialog.show = false
|
||||
this.resetFormData()
|
||||
|
|
@ -207,9 +209,9 @@ new Vue({
|
|||
if (this.g.user.wallets.length) {
|
||||
var getScrubLinks = this.getScrubLinks
|
||||
getScrubLinks()
|
||||
this.checker = setInterval(() => {
|
||||
getScrubLinks()
|
||||
}, 20000)
|
||||
// this.checker = setInterval(() => {
|
||||
// getScrubLinks()
|
||||
// }, 20000)
|
||||
}
|
||||
LNbits.api
|
||||
.request('GET', '/scrub/api/v1/currencies')
|
||||
|
|
|
|||
|
|
@ -26,71 +26,18 @@
|
|||
>
|
||||
{% raw %}
|
||||
<template v-slot:header="props">
|
||||
<q-tr :props="props">
|
||||
<q-th auto-width></q-th>
|
||||
<q-th auto-width>Wallet</q-th>
|
||||
<q-th auto-width>Description</q-th>
|
||||
<q-th auto-width>LNURLPay/Address</q-th>
|
||||
<q-th auto-width></q-th>
|
||||
<q-tr :props="props" style="text-align: left">
|
||||
<q-th>Wallet</q-th>
|
||||
<q-th>Description</q-th>
|
||||
<q-th>LNURLPay/Address</q-th>
|
||||
<q-th auto-width></q-th>
|
||||
</q-tr>
|
||||
</template>
|
||||
<template v-slot:body="props">
|
||||
<q-tr :props="props">
|
||||
<q-td auto-width>
|
||||
<q-btn
|
||||
unelevated
|
||||
dense
|
||||
size="xs"
|
||||
icon="launch"
|
||||
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
|
||||
type="a"
|
||||
:href="props.row.pay_url"
|
||||
target="_blank"
|
||||
></q-btn>
|
||||
<q-btn
|
||||
unelevated
|
||||
dense
|
||||
size="xs"
|
||||
icon="visibility"
|
||||
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
|
||||
@click="openQrCodeDialog(props.row.id)"
|
||||
></q-btn>
|
||||
</q-td>
|
||||
<q-td auto-width>{{ props.row.description }}</q-td>
|
||||
<q-td auto-width>
|
||||
<span v-if="props.row.min == props.row.max">
|
||||
{{ props.row.min }}
|
||||
</span>
|
||||
<span v-else>{{ props.row.min }} - {{ props.row.max }}</span>
|
||||
</q-td>
|
||||
<q-td>{{ props.row.currency || 'sat' }}</q-td>
|
||||
<q-td>
|
||||
<q-icon v-if="props.row.webhook_url" size="14px" name="http">
|
||||
<q-tooltip>Webhook to {{ props.row.webhook_url}}</q-tooltip>
|
||||
</q-icon>
|
||||
<q-icon
|
||||
v-if="props.row.success_text || props.row.success_url"
|
||||
size="14px"
|
||||
name="call_to_action"
|
||||
>
|
||||
<q-tooltip>
|
||||
On success, show message '{{ props.row.success_text }}'
|
||||
<span v-if="props.row.success_url"
|
||||
>and URL '{{ props.row.success_url }}'</span
|
||||
>
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
<q-icon
|
||||
v-if="props.row.comment_chars > 0"
|
||||
size="14px"
|
||||
name="insert_comment"
|
||||
>
|
||||
<q-tooltip>
|
||||
{{ props.row.comment_chars }}-char comment allowed
|
||||
</q-tooltip>
|
||||
</q-icon>
|
||||
</q-td>
|
||||
<q-td>{{ props.row.wallet }}</q-td>
|
||||
<q-td>{{ props.row.description }}</q-td>
|
||||
<q-td>{{ props.row.payoraddress }}</q-td>
|
||||
<q-td auto-width>
|
||||
<q-btn
|
||||
flat
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from lnurl.exceptions import InvalidUrl as LnurlInvalidUrl # type: ignore
|
|||
from starlette.exceptions import HTTPException
|
||||
|
||||
from lnbits.core.crud import get_user
|
||||
from lnbits.decorators import WalletTypeInfo, get_key_type
|
||||
from lnbits.decorators import WalletTypeInfo, get_key_type, require_admin_key
|
||||
from lnbits.utils.exchange_rates import currencies, get_fiat_rate_satoshis
|
||||
|
||||
from . import scrub_ext
|
||||
|
|
@ -18,7 +18,7 @@ from .crud import (
|
|||
get_scrub_links,
|
||||
update_scrub_link,
|
||||
)
|
||||
from .models import ScrubLink
|
||||
from .models import CreateScrubLink, ScrubLink
|
||||
|
||||
|
||||
@scrub_ext.get("/api/v1/currencies")
|
||||
|
|
@ -40,7 +40,7 @@ async def api_links(
|
|||
try:
|
||||
return [
|
||||
{**link.dict()}
|
||||
for link in await get_pay_links(wallet_ids)
|
||||
for link in await get_scrub_links(wallet_ids)
|
||||
]
|
||||
|
||||
except:
|
||||
|
|
@ -54,7 +54,7 @@ async def api_links(
|
|||
async def api_link_retrieve(
|
||||
r: Request, link_id, wallet: WalletTypeInfo = Depends(get_key_type)
|
||||
):
|
||||
link = await get_pay_link(link_id)
|
||||
link = await get_scrub_link(link_id)
|
||||
|
||||
if not link:
|
||||
raise HTTPException(
|
||||
|
|
@ -71,37 +71,14 @@ async def api_link_retrieve(
|
|||
|
||||
@scrub_ext.post("/api/v1/links", status_code=HTTPStatus.CREATED)
|
||||
@scrub_ext.put("/api/v1/links/{link_id}", status_code=HTTPStatus.OK)
|
||||
async def api_link_create_or_update(
|
||||
data: ScrubLink,
|
||||
async def api_scrub_create_or_update(
|
||||
data: CreateScrubLink,
|
||||
link_id=None,
|
||||
wallet: WalletTypeInfo = Depends(get_key_type),
|
||||
wallet: WalletTypeInfo = Depends(require_admin_key),
|
||||
):
|
||||
print("WAH")
|
||||
if data.min < 1:
|
||||
raise HTTPException(
|
||||
detail="Min must be more than 1.", status_code=HTTPStatus.BAD_REQUEST
|
||||
)
|
||||
|
||||
if data.min > data.max:
|
||||
raise HTTPException(
|
||||
detail="Min is greater than max.", status_code=HTTPStatus.BAD_REQUEST
|
||||
)
|
||||
|
||||
if data.currency == None and (
|
||||
round(data.min) != data.min or round(data.max) != data.max
|
||||
):
|
||||
raise HTTPException(
|
||||
detail="Must use full satoshis.", status_code=HTTPStatus.BAD_REQUEST
|
||||
)
|
||||
|
||||
if "success_url" in data and data.success_url[:8] != "https://":
|
||||
raise HTTPException(
|
||||
detail="Success URL must be secure https://...",
|
||||
status_code=HTTPStatus.BAD_REQUEST,
|
||||
)
|
||||
|
||||
if link_id:
|
||||
link = await get_pay_link(link_id)
|
||||
link = await get_scrub_link(link_id)
|
||||
|
||||
if not link:
|
||||
raise HTTPException(
|
||||
|
|
@ -113,16 +90,16 @@ async def api_link_create_or_update(
|
|||
detail="Not your pay link.", status_code=HTTPStatus.FORBIDDEN
|
||||
)
|
||||
|
||||
link = await update_pay_link(**data.dict(), link_id=link_id)
|
||||
link = await update_scrub_link(**data.dict(), link_id=link_id)
|
||||
else:
|
||||
link = await create_pay_link(data, wallet_id=wallet.wallet.id)
|
||||
|
||||
return {**link.dict(), "lnurl": link.lnurl}
|
||||
link = await create_scrub_link(wallet_id=wallet.wallet.id, data=data)
|
||||
|
||||
return link
|
||||
|
||||
|
||||
@scrub_ext.delete("/api/v1/links/{link_id}")
|
||||
async def api_link_delete(link_id, wallet: WalletTypeInfo = Depends(get_key_type)):
|
||||
link = await get_pay_link(link_id)
|
||||
link = await get_scrub_link(link_id)
|
||||
|
||||
if not link:
|
||||
raise HTTPException(
|
||||
|
|
@ -134,7 +111,7 @@ async def api_link_delete(link_id, wallet: WalletTypeInfo = Depends(get_key_type
|
|||
detail="Not your pay link.", status_code=HTTPStatus.FORBIDDEN
|
||||
)
|
||||
|
||||
await delete_pay_link(link_id)
|
||||
await delete_scrub_link(link_id)
|
||||
raise HTTPException(status_code=HTTPStatus.NO_CONTENT)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue