From ed50b1774289514eb9d397df65096bd847926af0 Mon Sep 17 00:00:00 2001 From: Benny Samir Hierl Date: Sat, 21 Nov 2020 15:03:25 +0100 Subject: [PATCH] payback widget added Signed-off-by: Benny Samir Hierl --- PAYBACK-Points/PAYBACK-Points.js | 149 +++++++++++++++++++++++++++++++ PAYBACK-Points/README.md | 16 ++++ PAYBACK-Points/previewLight.jpeg | Bin 0 -> 8614 bytes PAYBACK-Points/setup.jpeg | Bin 0 -> 29900 bytes 4 files changed, 165 insertions(+) create mode 100644 PAYBACK-Points/PAYBACK-Points.js create mode 100644 PAYBACK-Points/README.md create mode 100644 PAYBACK-Points/previewLight.jpeg create mode 100644 PAYBACK-Points/setup.jpeg diff --git a/PAYBACK-Points/PAYBACK-Points.js b/PAYBACK-Points/PAYBACK-Points.js new file mode 100644 index 0000000..baae46b --- /dev/null +++ b/PAYBACK-Points/PAYBACK-Points.js @@ -0,0 +1,149 @@ +// Variables used by Scriptable. +// These must be at the very top of the file. Do not edit. +// icon-color: blue; icon-glyph: shopping-basket; + +// Version 1.0.0 + +const cacheMinutes = 60 * 12 // 12h +const today = new Date() +const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:82.0) Gecko/20100101 Firefox/82.0' + +//////////////////////////////////////////////////////////// +let widgetInputRAW = args.widgetParameter; +let widgetInput; +if (widgetInputRAW !== null) { + widgetInput = widgetInputRAW.toString().trim().split(';') + + if (widgetInput[0] && !/^[\d]+$/.test(widgetInput[0])) { + throw new Error('the first parameter has to be a number') + } +} +//////////////////////////////////////////////////////////// +const getTokenAndCookies = async () => { + const req = new Request('https://www.payback.de/login') + req.headers = { + 'User-Agent': userAgent + } + const htmlString = await req.loadString() + const csrfToken = htmlString.match(//) + if (!csrfToken) { + if (htmlString.indexOf('dass Sie ein Bot sein') !== -1) { + if (config.runsInApp) { + const alert = new Alert() + alert.message = 'Please solve the capture so that the widget is no longer recognized as a bot.' + alert.addAction('Ok') + await alert.present() + const r = new Request('https://www.payback.de/login') + r.headers = { + 'User-Agent': userAgent + } + const view = new WebView() + view.loadRequest(r) + await view.present() + } else { + throw new Error('Widget was detected as a bot. Please execute the script in the Scriptable App to solve the capture.') + } + } + throw new Error('Unable to get Security Token') + } + return { token: csrfToken[1], cookies: req.response.cookies } +} +//////////////////////////////////////////////////////////// +const getPoints = async () => { + const { token, cookies } = await getTokenAndCookies() + if (widgetInput === undefined || !widgetInput[0] || !widgetInput[1]) { + throw new Error('No customer-number and password set. Please set needed data to widget parameter.') + } + let cookieString = cookies.map(function (v) { + return v.name + "=" + v.value + }).join('; ') + const req = new Request('https://www.payback.de/resources/action/login/login-action') + req.headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'User-Agent': userAgent, + Cookie: cookieString + } + req.method = 'POST'; + req.body = `login-method=pwd&SITE_NAME=payback-main-page&_csrf=${token}&aliasTypePassName=${widgetInput[0]}&passwordName=${widgetInput[1]}` + + const res = await req.loadString() + if (req.response.statusCode !== 200) { + throw new Error('Unable to fetch Point. Status-Code: ' + req.response.statusCode) + } + const points = res.match(/(.*)<\/strong><\/a>/) + if (!points) { + throw new Error('Unable to get Point out of HTML Body') + } + return points[1] +} +//////////////////////////////////////////////////////////// +const files = FileManager.local() + +const cachePath = files.joinPath(files.cacheDirectory(), "widget-payback-" + ((widgetInput !== undefined) ? widgetInput[0] : '')) +const cacheExists = files.fileExists(cachePath) +const cacheDate = cacheExists ? files.modificationDate(cachePath) : 0 +let points +if (!config.runsInApp && cacheExists && (today.getTime() - cacheDate.getTime()) < (cacheMinutes * 60 * 1000)) { + console.log("Get from Cache") + points = files.readString(cachePath) +} else { + console.log("Get from Website") + try { + points = await getPoints() + console.log("Write to Cache") + files.writeString(cachePath, points) + } catch (e) { + console.error('Fetching data from website failed:') + console.error(e) + if (cacheExists) { + console.warn('Fallback to Cache') + points = files.readString(cachePath) + } else { + throw e + } + } +} + +const imageCachePath = files.joinPath(files.cacheDirectory(), "widget-payback-logo") +const imageCachePathExists = files.fileExists(imageCachePath) +let logo +if (imageCachePathExists) { + logo = files.readImage(imageCachePath) +} else { + const imgReq = new Request('https://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Payback_Logo.svg/200px-Payback_Logo.svg.png') + logo = await imgReq.loadImage() + files.writeImage(imageCachePath, logo) +} +//////////////////////////////////////////////////////////// + +let widget = new ListWidget(); + +if (!points) { + widget.addText('Unable to get Payback Points. Please check logs.') +} else { + widget.setPadding(10, 10, 10, 10) + widget.backgroundColor = new Color('0046AA') + + const logoElement = widget.addImage(logo) + logoElement.imageSize = new Size(35, 35) + logoElement.applyFillingContentMode() + logoElement.centerAlignImage() + + widget.addSpacer(15) + + const pointText = widget.addText(points) + pointText.font = Font.regularSystemFont(36) + pointText.textColor = Color.white() + pointText.centerAlignText() + pointText.minimumScaleFactor = 0.5 + pointText.lineLimit = 1 + + widget.addSpacer() +} +if (!config.runsInWidget) { + await widget.presentSmall() +} else { + // Tell the system to show the widget. + Script.setWidget(widget) + Script.complete() +} \ No newline at end of file diff --git a/PAYBACK-Points/README.md b/PAYBACK-Points/README.md new file mode 100644 index 0000000..05b2a1e --- /dev/null +++ b/PAYBACK-Points/README.md @@ -0,0 +1,16 @@ +# PAYBACK Points +![PAYBACK Points Widget Preview light](https://raw.githubusercontent.com/ThisIsBenny/iOS-Widgets/main/PAYBACK-Points/previewLight.jpeg) + +This widget shows you your PAYBACK points. + +Notice: PAYBACK points will be cached and updated only every 12 hours. + +[[Download]](https://raw.githubusercontent.com/ThisIsBenny/iOS-Widgets/main/PAYBACK-Points/PAYBACK-Points.js) + +## Setup +Set the customer number and your password, separated by `;` to the Widget Parameter. + +![Setup](https://raw.githubusercontent.com/ThisIsBenny/iOS-Widgets/main/PAYBACK-Points/setup.jpeg) + +## Troubleshooting +* The widget will be recognized as a bot from time to time and therefore cannot update the points. To solve the problem, you have to execute the script via the Scriptable App to solve the captcha \ No newline at end of file diff --git a/PAYBACK-Points/previewLight.jpeg b/PAYBACK-Points/previewLight.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c71deba6f405231b0cc36a77a75cc105e46f8d8b GIT binary patch literal 8614 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 literal 0 HcmV?d00001 diff --git a/PAYBACK-Points/setup.jpeg b/PAYBACK-Points/setup.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..fe30c01003d1316af9175bec28f566bb9bf5af6b GIT binary patch literal 29900 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