From 161030e927fc56d92c07492a0cb2ee3c5ccb58f3 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sat, 3 Dec 2022 15:06:13 +0100 Subject: [PATCH 1/5] Delete apps/widtick directory --- apps/widtick/widtick.wid.js | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 apps/widtick/widtick.wid.js diff --git a/apps/widtick/widtick.wid.js b/apps/widtick/widtick.wid.js deleted file mode 100644 index c59ae5dfb..000000000 --- a/apps/widtick/widtick.wid.js +++ /dev/null @@ -1,8 +0,0 @@ -(()=>{ - setInterval(()=>{Bangle.buzz(5,1);},1000); - WIDGETS.tick = { - area: "tr", - width: 0, - draw: ()=>{} - }; -})(); From 45548a0a6294bb66d09d54cff546fc8fffab5089 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Tue, 17 Jan 2023 09:40:27 +0100 Subject: [PATCH 2/5] Create app.js --- apps/pinsafe/app.js | 162 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 apps/pinsafe/app.js diff --git a/apps/pinsafe/app.js b/apps/pinsafe/app.js new file mode 100644 index 000000000..3b0dafbe1 --- /dev/null +++ b/apps/pinsafe/app.js @@ -0,0 +1,162 @@ +var Layout = require("Layout"); +var key = ""; +var myTimeout; +var pins = Object.assign(require('Storage').readJSON("pinsafe.json", true) || {}); +print (pins); + +function mainMenu() { + if (myTimeout) clearTimeout(myTimeout); + var menu = { + "" : {title : "Decode:"}, + "< Back" : Bangle.load + }; + if (Object.keys(pins).length==0) Object.assign(menu, {"NO CARDS":""}); + else for (let c in pins) { + let pin=pins[c]; + menu[c]=()=>{decode(pin);}; + } + Object.assign(menu, {"Add Card": addCard}); + Object.assign(menu, {"Remove Card":removeCard}); + E.showMenu(menu); +} +function decode(pin) { + showNumpad("Key:", function() { + if (key.length==0) mainMenu(); + else { + var pinDecrypted=""; + for (let n=0;n{mainMenu();}} + ], lazy:true}); + g.clear(); + showPin.render(); + myTimeout = setTimeout(Bangle.load, 10000); + } + }); +} +function showNumpad(text, callback) { + E.showMenu(); + key=""; + function addDigit(digit) { + key+=digit; + Bangle.buzz(20); + update(); + } + function update() { + numPad.clear(numPad.output); + numPad.output.label="Key:"+key; + numPad.render(numPad.output); + } + var numPad = new Layout ({ + type:"v", c: [{ + type:"v", width:180, c: [ + {type:"txt", font:"15%", pad:1, fillx:1, filly:1, id: "output", label:text+key}, + {type:"h", c: [ + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:"7", cb:l=>{addDigit("7");}}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:"8", cb:l=>{addDigit("8");}}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:"9", cb:l=>{addDigit("9");}} + ]}, + {type:"h", c: [ + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:"4", cb:l=>{addDigit("4");}}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:"5", cb:l=>{addDigit("5");}}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:"6", cb:l=>{addDigit("6");}} + ]}, + {type:"h", c: [ + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:"1", cb:l=>{addDigit("1");}}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:"2", cb:l=>{addDigit("2");}}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:"3", cb:l=>{addDigit("3");}} + ]}, + {type:"h", c: [ + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:" 0 ", cb:l=>{addDigit("0");}}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label:" C ", cb:l=>{key=key.slice(0,-1); update();}}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, id:"OK", label:" OK", cb:callback} + ]} + ]} + ], lazy:true}); + g.clear(); + numPad.render(); +} + +function removeCard() { + var menu = { + "" : {title : "select card"}, + "< Back" : mainMenu + }; + if (Object.keys(pins).length==0) Object.assign(menu, {"NO CARDS":""}); + else for (let c in pins) { + let card=c; + menu[c]=()=>{ + E.showMenu(); + var confirmRemove = new Layout ( + {type:"v", c: [ + {type:"txt", font:"15%", pad:1, fillx:1, filly:1, label:"Delete"}, + {type:"txt", font:"15%", pad:1, fillx:1, filly:1, label:card+"?"}, + {type:"h", c: [ + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: "YES", cb:l=>{delete pins[card];mainMenu();}}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: "NO", cb:l=>{mainMenu();}} + ]} + ], lazy:true}); + g.clear(); + confirmRemove.render(); + }; + } + E.showMenu(menu); +} +function addCard() { + var help = new Layout({ + type:"v", c: [ + {type:"btn", font:"8%", label:"Enter a name, PIN\nand key for your\ncard. The pin will\nbe stored on your\ndevice in encrypted\nform.", cb:l=>{ + require("textinput").input({text:""}).then(result => { + if (pins[result]!=undefined) { + E.showMenu(); + var alreadyExists = new Layout ( + {type:"v", c: [ + {type:"txt", font:Math.min(15,100/result.length)+"%", pad:1, fillx:1, filly:1, label:result}, + {type:"txt", font:"12%", pad:1, fillx:1, filly:1, label:"already exists."}, + {type:"h", c: [ + {type:"btn", font:"10%", pad:1, fillx:1, filly:1, label: "REPLACE", cb:l=>{encodeCard(result);}}, + {type:"btn", font:"10%", pad:1, fillx:1, filly:1, label: "CANCEL", cb:l=>{mainMenu();}} + ]} + ], lazy:true}); + g.clear(); + alreadyExists.render(); + } else + encodeCard(result); + }); + }} + ] + }); + g.clear(); + help.render(); +} + +function encodeCard(name) { + showNumpad("PIN:", function() { + if (key.length==0) mainMenu(); + else { + var pin=key; + showNumpad("Key:", function() { + if (key.length==0) mainMenu(); + else { + var pinEncrypted=""; + for (let n=0;n Date: Tue, 17 Jan 2023 09:45:11 +0100 Subject: [PATCH 3/5] Create metadata.json --- apps/pinsafe/metadata.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/pinsafe/metadata.json diff --git a/apps/pinsafe/metadata.json b/apps/pinsafe/metadata.json new file mode 100644 index 000000000..e681e2209 --- /dev/null +++ b/apps/pinsafe/metadata.json @@ -0,0 +1,16 @@ +{ + "id": "pinsafe", + "name": "PIN safe", + "version": "0.01", + "description": "Store encrypted numerical PINs on your Watch.", + "icon": "app.png", + "tags": "tool", + "supports": ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"pinsafe.app.js","url":"app.js"}, + {"name":"pinsafe.img","url":"app-icon.js","evaluate":true} + ], + "data": [{"name":"pinsafe.json"}], + "dependencies": {"textinput":"type"}, +} From b5ad60f1bbcf5ae310f59ac8247978aa0104421b Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Tue, 17 Jan 2023 14:17:20 +0100 Subject: [PATCH 4/5] Create app-icon.js --- apps/pinsafe/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/pinsafe/app-icon.js diff --git a/apps/pinsafe/app-icon.js b/apps/pinsafe/app-icon.js new file mode 100644 index 000000000..a9c5f2626 --- /dev/null +++ b/apps/pinsafe/app-icon.js @@ -0,0 +1 @@ +atob("MjKBAf///A///////AD//////B4P/////B/g/////B/+D////B//4P//+D///wf/4D////Af4H////+B+f/////+fn//////n5//////5+f/////+fn//////n5//////5+f///8/+fz///+P/P8////n/z/P///x/8/z///8//P8///+f/z/P///H/5/5///z/+f+f+f5//n/n/j8f/5/4/8fP/8//P/jn//P/z/8R//z/+f/g//5//n/+f/+f/4//3//P//P////z//x////5//+f///+f//j////P//8////j///n///5///4///8////H//+P///5///H////P//z////x//5////+P/8/////x/8f////+P+P/////4/H//////Hj//////4B///////h///////8////A=") From 03c5d64eee3b97c5ea107083c8a60e8db4f1ecf3 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Tue, 17 Jan 2023 14:18:19 +0100 Subject: [PATCH 5/5] Add files via upload --- apps/pinsafe/app.png | Bin 0 -> 1378 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/pinsafe/app.png diff --git a/apps/pinsafe/app.png b/apps/pinsafe/app.png new file mode 100644 index 0000000000000000000000000000000000000000..55677316927de5a2a235d4caf5a9d1a9c7020720 GIT binary patch literal 1378 zcmV-o1)chdP)%%q?QLoz6P5CxH0Seijo>5MtWx_2Eq zT<4s7&bjB_dp^dn>3_o2Y~xL&nxAk$QV;9l{}Km0sI&` z7$i#XS!-_>Tha=qLs-!+^z<0M}udATvB*R&74qC<6!hiy=sR+GFzY>kxAcvJ%T zN%Gh^cb)J1N16@;z)>Wx2e4LbX|yknai2P{%=5evQ!sd*HzKyFjr$@A0sJOJ&N<%{ z6aXq3k==1bJA}wuJ8TLH&+|sqk?$jkNPevmIolKzB+pexw#N~DqWO2RDJZP9^VG&I zkwgIA)ref%DZ}JK93CD%JSjbZ1?tF#NFqI>C2aSY4q#|#=m?Tu$(OV`AbG#qxH6Im zz`g42GkF>uqwirg>dT~20kBqWTpCFvmyZ%{Hf@IQ`=wMv}iM-|R@DzP`R=wKzQJdEU{cO#pCLuwecD{l_Hb^L^h1bzjqZ zPfBP#xh^zqfL7E&F?dB9Ue*g*;oH=dST?#6KiG=FF~)3E`7dSQeOh@RXi99YU6|Nw zg)~5wO6B-wbk4b(Rrap{PB1A!a$DkT(T=T_hohsThc%-Y2efP4E;$?{w*+91o{9_7 zI#H_kO44ZUPrQGFnhU_3B+(Ejg3W8KJ#9KV0IxQ^kz)X0k@CNthG~Tw_Iwih!NI}f zNPeJ-_BP%N&bdof-XA2(CId)r()(j!VkYO@8EVv?B*?M7IK1rGI~DjG2+z3sYOzyH&=UshMS> zkvb>q=pp%-DxQ*0$3~}`Y?uMy+oXH;5XkWe;BPf1^%PKwy3hz|xycCU++`}`3t6O0 zLP);Qv}A7HJ8Vt5&!&USwKN*HnXJ%FFA*7!og>Ad6(>kuq)zY1bM@7~;=6&fKotFF{L(yrz$e_&w1lH8>_ZZYkGL;}E0jm)Dt ziBp3{_L>~!%DZB16e`aNdC6_2ba61+2XKC?@`8C9$=w})hbQ^C zIwL;_II{&gOSF2B(*GRO1@!2vY^|B{egCYCh2@l9w(_LcHOvh4AL9V7PO%6N=^{)3 zm~RSz9+?(~ex9)`uH2U5FR0&0{@LwF90GmDp3qf(ZMyN03?=}4sx&)W*;{ReY}VlQ zRcoayLs46-jhaMaYq?yeDKZA?w{vacq2I=!99IX|bmOTzGvsYvCW;}4cI8^hnhrvK k-UQ$Yl20ZXskVau0PvyXKjUJf6aWAK07*qoM6N<$f~P@_fdBvi literal 0 HcmV?d00001