From eca50edb93ef1cfda45fc6cb9809658a6b8f3004 Mon Sep 17 00:00:00 2001 From: Arne van Iterson Date: Sun, 10 May 2020 15:22:45 +0200 Subject: [PATCH] UI system is now workig semi-decent --- css/index.css | 23 ++++++- css/index.css.map | 2 +- css/index.scss | 22 ++++++- data/data.json | 2 +- html/{index.html => auth.hbs} | 39 ++++------- html/main.hbs | 29 ++++++++ main.js | 28 +++++++- package-lock.json | 72 +++++++++++++++++++- package.json | 1 + src/auth.js | 72 ++++++++++++++++++++ src/change.js | 17 +++++ src/index.js | 120 ---------------------------------- src/main.js | 39 +++++++++++ 13 files changed, 311 insertions(+), 155 deletions(-) rename html/{index.html => auth.hbs} (51%) create mode 100644 html/main.hbs create mode 100644 src/auth.js create mode 100644 src/change.js delete mode 100644 src/index.js create mode 100644 src/main.js diff --git a/css/index.css b/css/index.css index 3a424af..087583c 100644 --- a/css/index.css +++ b/css/index.css @@ -3,8 +3,12 @@ body { text-align: center; } -body div.content { - display: none; +body header h1 { + margin-bottom: 0; +} + +body header h3 { + margin: 0; } body div.content form label { @@ -16,12 +20,17 @@ body div.content input, body div.content button { padding: 0.25em; } +body div.content button { + width: 50%; +} + body div.content .message { min-width: 80%; height: auto; margin: 5px auto; padding: 5px; font-size: small; + color: white; } body div.content .message.info { @@ -48,4 +57,14 @@ body.light { color: #000; background: #fff; } + +body footer { + font-size: small; + width: 100%; + height: auto; + position: absolute; + bottom: 0; + left: 0; + text-align: center; +} /*# sourceMappingURL=index.css.map */ \ No newline at end of file diff --git a/css/index.css.map b/css/index.css.map index ba424f0..b67d013 100644 --- a/css/index.css.map +++ b/css/index.css.map @@ -1,6 +1,6 @@ { "version": 3, - "mappings": "AAAA,AAAA,IAAI,CAAC;EACD,WAAW,EAAE,4BAA4B;EACzC,UAAU,EAAE,MAAM;CAwCrB;;AA1CD,AAGI,IAHA,CAGA,GAAG,AAAA,QAAQ,CAAC;EACR,OAAO,EAAE,IAAI;CA6BhB;;AAjCL,AAMY,IANR,CAGA,GAAG,AAAA,QAAQ,CAEP,IAAI,CACA,KAAK,CAAC;EACF,SAAS,EAAE,KAAK;CACnB;;AARb,AAUQ,IAVJ,CAGA,GAAG,AAAA,QAAQ,CAOP,KAAK,EAVb,IAAI,CAGA,GAAG,AAAA,QAAQ,CAOA,MAAM,CAAC;EACV,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,MAAM;CAClB;;AAbT,AAcQ,IAdJ,CAGA,GAAG,AAAA,QAAQ,CAWP,QAAQ,CAAC;EACL,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,QAAQ;EAChB,OAAO,EAAE,GAAG;EACZ,SAAS,EAAE,KAAK;CAanB;;AAhCT,AAoBY,IApBR,CAGA,GAAG,AAAA,QAAQ,CAWP,QAAQ,AAMH,KAAK,CAAC;EACH,MAAM,EAAE,cAAc;EACtB,UAAU,EAAE,oBAAoB;CACnC;;AAvBb,AAwBY,IAxBR,CAGA,GAAG,AAAA,QAAQ,CAWP,QAAQ,AAUH,QAAQ,CAAC;EACN,MAAM,EAAE,aAAa;EACrB,UAAU,EAAE,oBAAoB;CACnC;;AA3Bb,AA4BY,IA5BR,CAGA,GAAG,AAAA,QAAQ,CAWP,QAAQ,AAcH,QAAQ,CAAC;EACN,MAAM,EAAE,eAAe;EACvB,UAAU,EAAE,oBAAoB;CACnC;;AA/Bb,AAkCI,IAlCA,AAkCC,KAAK,CAAC;EACH,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,IAAI;CACzB;;AArCL,AAsCI,IAtCA,AAsCC,MAAM,CAAC;EACJ,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;CACnB", + "mappings": "AAAA,AAAA,IAAI,CAAC;EACD,WAAW,EAAE,4BAA4B;EACzC,UAAU,EAAE,MAAM;CA4DrB;;AA9DD,AAIQ,IAJJ,CAGA,MAAM,CACF,EAAE,CAAC;EACC,aAAa,EAAE,CAAC;CACnB;;AANT,AAOQ,IAPJ,CAGA,MAAM,CAIF,EAAE,CAAC;EACC,MAAM,EAAE,CAAC;CACZ;;AATT,AAaY,IAbR,CAWA,GAAG,AAAA,QAAQ,CACP,IAAI,CACA,KAAK,CAAC;EACF,SAAS,EAAE,KAAK;CACnB;;AAfb,AAiBQ,IAjBJ,CAWA,GAAG,AAAA,QAAQ,CAMP,KAAK,EAjBb,IAAI,CAWA,GAAG,AAAA,QAAQ,CAMA,MAAM,CAAC;EACV,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,MAAM;CAClB;;AApBT,AAqBQ,IArBJ,CAWA,GAAG,AAAA,QAAQ,CAUP,MAAM,CAAC;EACH,KAAK,EAAE,GAAG;CACb;;AAvBT,AAwBQ,IAxBJ,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,CAAC;EACL,SAAS,EAAE,GAAG;EACd,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,QAAQ;EAChB,OAAO,EAAE,GAAG;EACZ,SAAS,EAAE,KAAK;EAChB,KAAK,EAAE,KAAK;CAaf;;AA3CT,AA+BY,IA/BR,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,AAOH,KAAK,CAAC;EACH,MAAM,EAAE,cAAc;EACtB,UAAU,EAAE,oBAAoB;CACnC;;AAlCb,AAmCY,IAnCR,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,AAWH,QAAQ,CAAC;EACN,MAAM,EAAE,aAAa;EACrB,UAAU,EAAE,oBAAoB;CACnC;;AAtCb,AAuCY,IAvCR,CAWA,GAAG,AAAA,QAAQ,CAaP,QAAQ,AAeH,QAAQ,CAAC;EACN,MAAM,EAAE,eAAe;EACvB,UAAU,EAAE,oBAAoB;CACnC;;AA1Cb,AA6CI,IA7CA,AA6CC,KAAK,CAAC;EACH,KAAK,EAAE,OAAO;EACd,gBAAgB,EAAE,IAAI;CACzB;;AAhDL,AAiDI,IAjDA,AAiDC,MAAM,CAAC;EACJ,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;CACnB;;AApDL,AAqDI,IArDA,CAqDA,MAAM,CAAC;EACH,SAAS,EAAE,KAAK;EAChB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,CAAC;EACT,IAAI,EAAE,CAAC;EACP,UAAU,EAAE,MAAM;CACrB", "sources": [ "index.scss" ], diff --git a/css/index.scss b/css/index.scss index f2aa296..e240870 100644 --- a/css/index.scss +++ b/css/index.scss @@ -1,8 +1,15 @@ body { font-family: Arial, Helvetica, sans-serif; text-align: center; + header { + h1 { + margin-bottom: 0; + } + h3 { + margin: 0; + } + } div.content { - display: none; form { label { font-size: small; @@ -12,12 +19,16 @@ body { margin: 0.5em; padding: 0.25em; } + button { + width: 50%; + } .message { min-width: 80%; height: auto; margin: 5px auto; padding: 5px; font-size: small; + color: white; &.info { border: 1px solid blue; background: rgba(0, 0, 255, 0.5); @@ -40,4 +51,13 @@ body { color: #000; background: #fff; } + footer { + font-size: small; + width: 100%; + height: auto; + position: absolute; + bottom: 0; + left: 0; + text-align: center; + } } \ No newline at end of file diff --git a/data/data.json b/data/data.json index 0ec337b..f53c986 100644 --- a/data/data.json +++ b/data/data.json @@ -1 +1 @@ -{"theme":"dark","user":"","password":""} \ No newline at end of file +{"theme":"dark","user":"arne.v.iterson@hotmail.nl","password":""} \ No newline at end of file diff --git a/html/index.html b/html/auth.hbs similarity index 51% rename from html/index.html rename to html/auth.hbs index a19159f..3330912 100644 --- a/html/index.html +++ b/html/auth.hbs @@ -3,20 +3,17 @@ - SkinSwitcher - + {{ title }} + - -


SkinSwitcher

+ +
+

{{ header }}

+

Login to Minecraft

+
- - -
+
+



@@ -31,20 +28,12 @@
-
+
-
- -
+ -
- -
- -
-

Loading...
Please wait

-
- - + \ No newline at end of file diff --git a/html/main.hbs b/html/main.hbs new file mode 100644 index 0000000..a6331b1 --- /dev/null +++ b/html/main.hbs @@ -0,0 +1,29 @@ + + + + + + {{ title }} + + + +
+

{{ header }}

+

Main menu

+
+ +
+

+
+
+
+ +
+ + + + + + \ No newline at end of file diff --git a/main.js b/main.js index d98e5ae..97b6936 100644 --- a/main.js +++ b/main.js @@ -22,26 +22,48 @@ function createWindow () { }); // and load the index.html of the app. - win.loadFile(path.join("html/index.html")); + win.loadFile(path.join("html/auth.hbs")); // Open the DevTools. if (process.env.NODE_ENV === "dev") win.webContents.openDevTools(); } +// Load previous credentials and settings var authData = JSON.parse(fs.readFileSync("./data/data.json")); +// Define handlebars with loaded settings +require("electron-handlebars")({ + css: "../css/index.css", + title: "SkinSwitcher", + theme: authData.theme, + header: "⇄ SkinSwitcher", + footer: "Made by Hecc-inc." +}); + +// Respond to renderer requests ipcMain.on("getAuth", (event) => { event.returnValue = authData; }); ipcMain.on("setAuth", (event, data) => { if (data != authData) { - // TODO: The app reloads causing a loop when fs is completed both in async and sync mode - //fs.writeFileSync("./data/data.json", JSON.stringify(data)); + fs.writeFileSync("./data/data.json", JSON.stringify(data)); } event.returnValue = true; }); +// Create session variables for uuid storage +var session = {}; + +ipcMain.on("getSession", (event) => { + event.returnValue = session; +}); + +ipcMain.on("setSession", (event, data) => { + session = data; + event.returnValue = true; +}); + // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. diff --git a/package-lock.json b/package-lock.json index f0b5e6c..1e0643e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -235,6 +235,20 @@ "color-convert": "^1.9.0" } }, + "any-pify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/any-pify/-/any-pify-2.0.0.tgz", + "integrity": "sha1-b1SBH2KHJmXUJulmMXPZDJRyDs8=", + "requires": { + "any-promise": "^1.3.0", + "pify": "^3.0.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", @@ -727,6 +741,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "optional": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -996,6 +1016,24 @@ } } }, + "electron-handlebars": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-handlebars/-/electron-handlebars-2.0.0.tgz", + "integrity": "sha1-6iFH33MwG6BHekXgvePjE+PrpU8=", + "requires": { + "any-pify": "^2.0.0", + "handlebars": "^4.0.5", + "lodash": "^4.15.0", + "mime": "^1.3.4" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + } + } + }, "electron-publish": { "version": "22.6.0", "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.6.0.tgz", @@ -1475,6 +1513,18 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, + "handlebars": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -1913,6 +1963,11 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -2081,8 +2136,7 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "optional": true + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "pngjs": { "version": "5.0.0", @@ -2634,6 +2688,15 @@ "is-typedarray": "^1.0.0" } }, + "uglify-js": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.2.tgz", + "integrity": "sha512-zGVwKslUAD/EeqOrD1nQaBmXIHl1Vw371we8cvS8I6mYK9rmgX5tv8AAeJdfsQ3Kk5mGax2SVV/AizxdNGhl7Q==", + "optional": true, + "requires": { + "commander": "~2.20.3" + } + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -2779,6 +2842,11 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/package.json b/package.json index 8b0f139..21c2b4c 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "cross-env": "^7.0.2", "electron": "^8.2.5", "electron-builder": "^22.6.0", + "electron-handlebars": "^2.0.0", "electron-reload": "^1.5.0", "eslint": "^7.0.0", "pngjs": "^5.0.0" diff --git a/src/auth.js b/src/auth.js new file mode 100644 index 0000000..825d696 --- /dev/null +++ b/src/auth.js @@ -0,0 +1,72 @@ +/* eslint-disable no-unused-vars */ +const { ipcRenderer, remote } = require("electron"); +const axios = require("axios").default; +const path = require("path"); + +// Check if a session already exists +var session = ipcRenderer.sendSync("getSession"); +if (session.accessToken) { + console.log("Session does exist, go to main"); + remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/main.hbs`)); +} else { + console.log("Session does not exist, continue"); +} + +// Read auth data from storage and define variables +var authData = ipcRenderer.sendSync("getAuth"); +var save = true; + +async function authenticate(user, password) { + var payload = { + "agent": { + "name": "Minecraft", + "version": 1 + }, + "username": user, + "password": password + }; + + axios({ + method: "POST", + url: "https://authserver.mojang.com/authenticate", + data: payload, + }).then((data) => { + console.log("Login successfull"); + session = data.data; + + // Save username (& password) for future login + authData.user = user; + authData.password = (save) ? password : ""; + + if (ipcRenderer.sendSync("setAuth", authData)) { + if (ipcRenderer.sendSync("setSession", session)) { + remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/main.hbs`)); + } + } + }).catch((data) => { + console.log("Login failure"); + console.log(data.response); + + const msg = document.querySelectorAll("div.content > p.message")[0]; + msg.classList.add("warning"); + msg.innerHTML = data.response.data.errorMessage; + }); +} + +// Get access token from Mojang Authserver +if (authData.password == "") { + // Display auth screen when no password data is found + const form = document.querySelectorAll("div.content > form")[0]; + form.querySelectorAll("input#user")[0].value = authData.user; + + // Listen for form submit + form.addEventListener("submit", function(e) { + e.preventDefault(); + authData.user = form.querySelectorAll("input#user")[0].value; + authData.password = form.querySelectorAll("input#password")[0].value; + save = form.querySelectorAll("input#save")[0].checked; + authenticate(authData.user, authData.password); + }); +} else { + authenticate(authData.user, authData.password); +} \ No newline at end of file diff --git a/src/change.js b/src/change.js new file mode 100644 index 0000000..6904b3f --- /dev/null +++ b/src/change.js @@ -0,0 +1,17 @@ +//fs.createReadStream("../data/in.png") +// .pipe( +// new PNG({ +// filterType: 4, +// }) +// ) +// .on("parsed", (image) => { +// axios({ +// method: "PUT", +// url: `https://api.mojang.com/user/profile/${data.data.selectedProfile.id}/skin`, +// data: { +// model: "", +// file: image +// }, +// headers: {"Authorization": "Bearer " + data.data.accessToken} +// }).catch(console.log); +// }); \ No newline at end of file diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 31f696f..0000000 --- a/src/index.js +++ /dev/null @@ -1,120 +0,0 @@ -/* eslint-disable no-unused-vars */ -const { ipcRenderer } = require("electron"); -const axios = require("axios").default; -const fs = require("fs"); -const { PNG } = require("pngjs"); - -// Read auth data from storage and define variables -var authData = ipcRenderer.sendSync("getAuth"); -var token; -var save = true; - -// Set theme -document.body.classList.add(authData.theme); - -// Function for easy switching between views -function setContent(id, message) { - document.querySelectorAll("div.content").forEach((element) => { - element.style.display = "none"; - }); - - const element = document.querySelectorAll(`div.content#${id}`)[0]; - - if (message) { - var msg; - if (element.firstElementChild.classList.contains("message")) { - msg = element.firstElementChild; - } else { - msg = document.createElement("p"); - } - msg.classList = `message ${message.type}`; - msg.innerHTML = message.text; - element.prepend(msg); - } - - element.style.display = "block"; -} - -setContent("loader"); - -async function authenticate(user, password) { - var payload = { - "agent": { - "name": "Minecraft", - "version": 1 - }, - "username": user, - "password": password - }; - - axios({ - method: "POST", - url: "https://authserver.mojang.com/authenticate", - data: payload, - }).then((data) => { - console.log("Login successfull"); - token = data.data; - - // Save username (& password) for future login - authData.user = user; - authData.password = (save) ? password : ""; - - if (ipcRenderer.sendSync("setAuth", authData)) { - setContent( - "mainMenu", - { - type: "success", - text: `Logged in as ${data.data.selectedProfile.name}` - } - ); - } - }).catch((data) => { - console.log("Login failure"); - console.log(data.response); - setContent( - "authForm", - { - type: "warning", - text: `Login failed
${data.response.data.errorMessage}` - } - ); - }); -} - -// Get access token from Mojang Authserver -if (authData.password == "") { - // Display auth screen when no password data is found - const form = document.querySelectorAll("div.content#authForm")[0]; - form.querySelectorAll("input#user")[0].value = authData.user; - setContent("authForm"); - - // Listen for form submit - form.addEventListener("submit", function(e) { - e.preventDefault(); - authData.user = form.querySelectorAll("input#user")[0].value; - authData.password = form.querySelectorAll("input#password")[0].value; - save = form.querySelectorAll("input#save")[0].checked; - setContent("loader"); - authenticate(authData.user, authData.password); - }); -} else { - authenticate(authData.user, authData.password); -} - -//fs.createReadStream("../data/in.png") -// .pipe( -// new PNG({ -// filterType: 4, -// }) -// ) -// .on("parsed", (image) => { -// axios({ -// method: "PUT", -// url: `https://api.mojang.com/user/profile/${data.data.selectedProfile.id}/skin`, -// data: { -// model: "", -// file: image -// }, -// headers: {"Authorization": "Bearer " + data.data.accessToken} -// }).catch(console.log); -// }); \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..43c9e00 --- /dev/null +++ b/src/main.js @@ -0,0 +1,39 @@ +/* eslint-disable no-unused-vars */ +const { ipcRenderer, remote } = require("electron"); +const axios = require("axios").default; +const path = require("path"); + +const session = ipcRenderer.sendSync("getSession"); +if (!session.accessToken) { + console.log("Session does not exist, return to auth"); + remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/auth.hbs`)); +} else { + console.log("Session does exist, continue"); +} + +const msg = document.querySelectorAll("div.content > p.message")[0]; +msg.classList.add("success"); +msg.innerHTML = `Logged in as ${session.selectedProfile.name}`; + +document.querySelectorAll("div.content > button#current")[0].addEventListener("click", (e) => { + console.log("Clicked current button"); +}); + +document.querySelectorAll("div.content > button#upload")[0].addEventListener("click", (e) => { + console.log("Clicked upload button"); +}); + +document.querySelectorAll("div.content > button#random")[0].addEventListener("click", (e) => { + console.log("Clicked random button"); +}); + +document.querySelectorAll("div.content > button#logout")[0].addEventListener("click", (e) => { + console.log("Clicked logout button"); + if (ipcRenderer.sendSync("setSession", {})) { + var authData = ipcRenderer.sendSync("getAuth"); + authData.password = ""; + if (ipcRenderer.sendSync("setAuth", authData)) { + remote.getCurrentWindow().loadURL(path.join(`file://${__dirname}/auth.hbs`)); + } + } +}); \ No newline at end of file