feat: add lud17 support for wallet parse dialog (#3289)
This commit is contained in:
parent
bdfefc2506
commit
0d2ff2e663
3 changed files with 44 additions and 13 deletions
|
|
@ -14,3 +14,7 @@ class CreateLnurlPayment(BaseModel):
|
|||
|
||||
class CreateLnurlWithdraw(BaseModel):
|
||||
lnurl_w: Lnurl
|
||||
|
||||
|
||||
class LnurlScan(BaseModel):
|
||||
lnurl: Lnurl
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ from lnurl.models import (
|
|||
from loguru import logger
|
||||
|
||||
from lnbits.core.models import CreateLnurlWithdraw, Payment
|
||||
from lnbits.core.models.lnurl import CreateLnurlPayment
|
||||
from lnbits.core.models.lnurl import CreateLnurlPayment, LnurlScan
|
||||
from lnbits.decorators import (
|
||||
WalletTypeInfo,
|
||||
require_admin_key,
|
||||
|
|
@ -40,6 +40,7 @@ lnurl_router = APIRouter(tags=["LNURL"])
|
|||
@lnurl_router.get(
|
||||
"/api/v1/lnurlscan/{code}",
|
||||
dependencies=[Depends(require_invoice_key)],
|
||||
deprecated=True,
|
||||
response_model=LnurlPayResponse
|
||||
| LnurlWithdrawResponse
|
||||
| LnurlAuthResponse
|
||||
|
|
@ -58,6 +59,24 @@ async def api_lnurlscan(code: str) -> LnurlResponseModel:
|
|||
return res
|
||||
|
||||
|
||||
@lnurl_router.post(
|
||||
"/api/v1/lnurlscan",
|
||||
dependencies=[Depends(require_invoice_key)],
|
||||
response_model=LnurlPayResponse
|
||||
| LnurlWithdrawResponse
|
||||
| LnurlAuthResponse
|
||||
| LnurlErrorResponse,
|
||||
)
|
||||
async def api_lnurlscan_post(scan: LnurlScan) -> LnurlResponseModel:
|
||||
try:
|
||||
res = await lnurl_handle(scan.lnurl, user_agent=settings.user_agent, timeout=5)
|
||||
except LnurlResponseException as exc:
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.BAD_REQUEST, detail=str(exc)
|
||||
) from exc
|
||||
return res
|
||||
|
||||
|
||||
@lnurl_router.post("/api/v1/lnurlauth")
|
||||
async def api_perform_lnurlauth(
|
||||
data: LnurlAuthResponse, key_type: WalletTypeInfo = Depends(require_admin_key)
|
||||
|
|
|
|||
|
|
@ -352,11 +352,9 @@ window.WalletPageLogic = {
|
|||
},
|
||||
lnurlScan() {
|
||||
LNbits.api
|
||||
.request(
|
||||
'GET',
|
||||
'/api/v1/lnurlscan/' + this.parse.data.request,
|
||||
this.g.wallet.adminkey
|
||||
)
|
||||
.request('POST', '/api/v1/lnurlscan', this.g.wallet.adminkey, {
|
||||
lnurl: this.parse.data.request
|
||||
})
|
||||
.then(response => {
|
||||
const data = response.data
|
||||
if (data.status === 'ERROR') {
|
||||
|
|
@ -404,19 +402,29 @@ window.WalletPageLogic = {
|
|||
this.decodeRequest()
|
||||
this.parse.camera.show = false
|
||||
},
|
||||
isLnurl(req) {
|
||||
return (
|
||||
req.toLowerCase().startsWith('lnurl1') ||
|
||||
req.startsWith('lnurlp://') ||
|
||||
req.startsWith('lnurlw://') ||
|
||||
req.startsWith('lnurlauth://') ||
|
||||
req.match(/[\w.+-~_]+@[\w.+-~_]/)
|
||||
)
|
||||
},
|
||||
decodeRequest() {
|
||||
this.parse.show = true
|
||||
this.parse.data.request = this.parse.data.request.trim().toLowerCase()
|
||||
let req = this.parse.data.request
|
||||
this.parse.data.request = this.parse.data.request.trim()
|
||||
const req = this.parse.data.request.toLowerCase()
|
||||
if (req.startsWith('lightning:')) {
|
||||
this.parse.data.request = req.slice(10)
|
||||
this.parse.data.request = this.parse.data.request.slice(10)
|
||||
} else if (req.startsWith('lnurl:')) {
|
||||
this.parse.data.request = req.slice(6)
|
||||
this.parse.data.request = this.parse.data.request.slice(6)
|
||||
} else if (req.includes('lightning=lnurl1')) {
|
||||
this.parse.data.request = req.split('lightning=')[1].split('&')[0]
|
||||
this.parse.data.request = this.parse.data.request
|
||||
.split('lightning=')[1]
|
||||
.split('&')[0]
|
||||
}
|
||||
req = this.parse.data.request
|
||||
if (req.startsWith('lnurl1') || req.match(/[\w.+-~_]+@[\w.+-~_]/)) {
|
||||
if (this.isLnurl(this.parse.data.request)) {
|
||||
this.lnurlScan()
|
||||
return
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue