diff --git a/lnbits/extensions/paywall/__init__.py b/lnbits/extensions/paywall/__init__.py index 86e90f9..65c7f04 100644 --- a/lnbits/extensions/paywall/__init__.py +++ b/lnbits/extensions/paywall/__init__.py @@ -1,7 +1,7 @@ from flask import Blueprint -paywall_ext = Blueprint("paywall", __name__, static_folder="static", template_folder="templates") +paywall_ext: Blueprint = Blueprint("paywall", __name__, static_folder="static", template_folder="templates") from .views_api import * # noqa diff --git a/lnbits/extensions/paywall/models.py b/lnbits/extensions/paywall/models.py index 7fd7fb3..dbfa0af 100644 --- a/lnbits/extensions/paywall/models.py +++ b/lnbits/extensions/paywall/models.py @@ -1,4 +1,3 @@ -from hashlib import sha256 from typing import NamedTuple @@ -10,6 +9,3 @@ class Paywall(NamedTuple): memo: str amount: int time: int - - def key_for(self, fingerprint: str) -> str: - return sha256(f"{self.secret}{fingerprint}".encode("utf-8")).hexdigest() diff --git a/lnbits/extensions/paywall/static/vendor/fingerprintjs2@2.1.0/fingerprint2.min.js b/lnbits/extensions/paywall/static/vendor/fingerprintjs2@2.1.0/fingerprint2.min.js deleted file mode 100644 index f8b4bab..0000000 --- a/lnbits/extensions/paywall/static/vendor/fingerprintjs2@2.1.0/fingerprint2.min.js +++ /dev/null @@ -1,4 +0,0 @@ -// Fingerprintjs2 - Copyright (c) 2019 Valentin Vasilyev (valentin.vasilyev@outlook.com) -// Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. - -!function(e,t,a){"use strict";"undefined"!=typeof window&&"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&module.exports?module.exports=a():t.exports?t.exports=a():t.Fingerprint2=a()}(0,this,function(){"use strict";var d=function(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var a=[0,0,0,0];return a[3]+=e[3]+t[3],a[2]+=a[3]>>>16,a[3]&=65535,a[2]+=e[2]+t[2],a[1]+=a[2]>>>16,a[2]&=65535,a[1]+=e[1]+t[1],a[0]+=a[1]>>>16,a[1]&=65535,a[0]+=e[0]+t[0],a[0]&=65535,[a[0]<<16|a[1],a[2]<<16|a[3]]},g=function(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var a=[0,0,0,0];return a[3]+=e[3]*t[3],a[2]+=a[3]>>>16,a[3]&=65535,a[2]+=e[2]*t[3],a[1]+=a[2]>>>16,a[2]&=65535,a[2]+=e[3]*t[2],a[1]+=a[2]>>>16,a[2]&=65535,a[1]+=e[1]*t[3],a[0]+=a[1]>>>16,a[1]&=65535,a[1]+=e[2]*t[2],a[0]+=a[1]>>>16,a[1]&=65535,a[1]+=e[3]*t[1],a[0]+=a[1]>>>16,a[1]&=65535,a[0]+=e[0]*t[3]+e[1]*t[2]+e[2]*t[1]+e[3]*t[0],a[0]&=65535,[a[0]<<16|a[1],a[2]<<16|a[3]]},f=function(e,t){return 32===(t%=64)?[e[1],e[0]]:t<32?[e[0]<>>32-t,e[1]<>>32-t]:(t-=32,[e[1]<>>32-t,e[0]<>>32-t])},h=function(e,t){return 0===(t%=64)?e:t<32?[e[0]<>>32-t,e[1]<>>1]),e=g(e,[4283543511,3981806797]),e=m(e,[0,e[0]>>>1]),e=g(e,[3301882366,444984403]),e=m(e,[0,e[0]>>>1])},l=function(e,t){t=t||0;for(var a=(e=e||"").length%16,n=e.length-a,r=[0,t],i=[0,t],o=[0,0],l=[0,0],s=[2277735313,289559509],c=[1291169091,658871167],u=0;u>>0).toString(16)).slice(-8)+("00000000"+(r[1]>>>0).toString(16)).slice(-8)+("00000000"+(i[0]>>>0).toString(16)).slice(-8)+("00000000"+(i[1]>>>0).toString(16)).slice(-8)},e={preprocessor:null,audio:{timeout:1e3,excludeIOS11:!0},fonts:{swfContainerId:"fingerprintjs2",swfPath:"flash/compiled/FontList.swf",userDefinedFonts:[],extendedJsFonts:!1},screen:{detectScreenOrientation:!0},plugins:{sortPluginsFor:[/palemoon/i],excludeIE:!1},extraComponents:[],excludes:{enumerateDevices:!0,pixelRatio:!0,doNotTrack:!0,fontsFlash:!0},NOT_AVAILABLE:"not available",ERROR:"error",EXCLUDED:"excluded"},c=function(e,t){if(Array.prototype.forEach&&e.forEach===Array.prototype.forEach)e.forEach(t);else if(e.length===+e.length)for(var a=0,n=e.length;at.name?1:e.name=a.components.length)n(r.data);else{var t=a.components[i];if(a.excludes[t.key])o(!1);else{if(!e&&t.pauseBefore)return i-=1,void setTimeout(function(){o(!0)},1);try{t.getData(function(e){r.addPreprocessedComponent(t.key,e),o(!1)},a)}catch(e){r.addPreprocessedComponent(t.key,String(e)),o(!1)}}}};o(!1)},U.getPromise=function(a){return new Promise(function(e,t){U.get(a,e)})},U.getV18=function(i,o){return null==o&&(o=i,i={}),U.get(i,function(e){for(var t=[],a=0;a diff --git a/lnbits/extensions/paywall/views_api.py b/lnbits/extensions/paywall/views_api.py index dc39dac..0ff32f6 100644 --- a/lnbits/extensions/paywall/views_api.py +++ b/lnbits/extensions/paywall/views_api.py @@ -67,12 +67,7 @@ def api_paywall_get_invoice(paywall_id): @paywall_ext.route("/api/v1/paywalls//check_invoice", methods=["POST"]) -@api_validate_post_request( - schema={ - "checking_id": {"type": "string", "empty": False, "required": True}, - "fingerprint": {"type": "string", "empty": False, "required": True}, - } -) +@api_validate_post_request(schema={"checking_id": {"type": "string", "empty": False, "required": True}}) def api_paywal_check_invoice(paywall_id): paywall = get_paywall(paywall_id) @@ -89,25 +84,6 @@ def api_paywal_check_invoice(paywall_id): payment = wallet.get_payment(g.data["checking_id"]) payment.set_pending(False) - return jsonify({"paid": True, "key": paywall.key_for(g.data["fingerprint"]), "url": paywall.url}), Status.OK + return jsonify({"paid": True, "url": paywall.url}), Status.OK return jsonify({"paid": False}), Status.OK - - -@paywall_ext.route("/api/v1/paywalls//check_access", methods=["POST"]) -@api_validate_post_request( - schema={ - "key": {"type": "string", "empty": False, "required": True}, - "fingerprint": {"type": "string", "empty": False, "required": True}, - } -) -def api_fingerprint_check(paywall_id): - paywall = get_paywall(paywall_id) - - if not paywall: - return jsonify({"message": "Paywall does not exist."}), Status.NOT_FOUND - - if paywall.key_for(g.data["fingerprint"]) != g.data["key"]: - return jsonify({"valid": False}), Status.OK - - return jsonify({"valid": True, "url": paywall.url}), Status.OK