Skip to content
This repository has been archived by the owner on Feb 28, 2022. It is now read-only.

Commit

Permalink
Removed password from the options
Browse files Browse the repository at this point in the history
  • Loading branch information
Glagan committed Nov 22, 2018
1 parent 77fca3a commit 49b86ce
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 30 deletions.
4 changes: 3 additions & 1 deletion css/options.css
Expand Up @@ -43,7 +43,9 @@ h1 {
#loggedOutPanel, #loggedOutPanel,
#onlineAdvancedPanel, #onlineAdvancedPanel,
#onlineError, #onlineError,
#onlineSuccess { #onlineSuccess,
#onlineURLPanel,
#onlineServiceInfo {
display: none; display: none;
} }


Expand Down
2 changes: 1 addition & 1 deletion manifests/firefox.json
@@ -1,6 +1,6 @@
{ {
"permissions": [ "permissions": [
"*://*.nikurasu.org/*" "*://*.nikurasu.org/api/*"
], ],


"applications": { "applications": {
Expand Down
7 changes: 3 additions & 4 deletions options.html
Expand Up @@ -297,7 +297,8 @@ <h1 class="text-container py-2 px-2"><i class="fas fa-globe"></i> Online Save</h
<div class="col"> <div class="col">
<div class="form-group text-container p-2"> <div class="form-group text-container p-2">
<label class="font-weight-bold">Online Save <a data-default="onlineSave" class="btn btn-sm btn-secondary"><i class="fas fa-trash"></i><span class="d-none d-xl-inline"> Restore default</span></a></label> <label class="font-weight-bold">Online Save <a data-default="onlineSave" class="btn btn-sm btn-secondary"><i class="fas fa-trash"></i><span class="d-none d-xl-inline"> Restore default</span></a></label>
<p>Online Save will update your data on a MMD Online Save instance. I propose a default one hosted on my site <a href="https://mmd.nikurasu.org">nikurasu</a>.</p> <p>Online Save will update your data on a MMD Online Save instance, which you can find <a href="https://github.com/Glagan/MMD-Online-Save">here</a>. I propose a default one hosted on my site <a href="https://mmd.nikurasu.org">nikurasu</a>.</p>
<div id="onlineServiceInfo" class="alert alert-info" role="alert">You can't currently host your own MMD Online Save for Firefox (working only on Chrome) since permissions don't allow me to make requests to a domain which isn't in the extension manifest, and I can't know what domain you will use.</div>
<p>You only need to set a Username and Password, then when you need to use your data on another computer or another device, log in and your data will be imported.</p> <p>You only need to set a Username and Password, then when you need to use your data on another computer or another device, log in and your data will be imported.</p>
<p>All data is still saved locally, and the extension only use local storage to retrieve data, you can disable online save and delete all of your saved data at any time.<br /> <p>All data is still saved locally, and the extension only use local storage to retrieve data, you can disable online save and delete all of your saved data at any time.<br />
What Online Save do is updating your save online every time your save is updated locally.</p> What Online Save do is updating your save online every time your save is updated locally.</p>
Expand Down Expand Up @@ -339,11 +340,9 @@ <h1 class="text-container py-2 px-2"><i class="fas fa-globe"></i> Online Save</h
<div id="onlineError" class="alert alert-danger" role="alert"></div> <div id="onlineError" class="alert alert-danger" role="alert"></div>
<!-- Values --> <!-- Values -->
<form id="onlineForm"> <form id="onlineForm">
<div class="form-group text-container p-2"> <div id="onlineURLPanel" class="form-group text-container p-2">
<label class="font-weight-bold">Online URL <a data-default="onlineURL" class="btn btn-sm btn-secondary"><i class="fas fa-trash"></i><span class="d-none d-xl-inline"> Restore default</span></a></label> <label class="font-weight-bold">Online URL <a data-default="onlineURL" class="btn btn-sm btn-secondary"><i class="fas fa-trash"></i><span class="d-none d-xl-inline"> Restore default</span></a></label>
<p class="d-none d-xl-block">The URL of the online service.</p> <p class="d-none d-xl-block">The URL of the online service.</p>
<div class="alert alert-info" role="alert">If you wish to host your own service and use it on <b>Firefox</b> you need to send me a message due to <b>Firefox</b> limitations.<br>
You don't need to message me if you wish to host your own service and use it only on <b>Chrome</b>.</div>
<div class="px-0"> <div class="px-0">
<!--<input data-option="onlineURL" data-type="text" type="text" name="onlineURL" placeholder="URL" class="form-control" />--> <!--<input data-option="onlineURL" data-type="text" type="text" name="onlineURL" placeholder="URL" class="form-control" />-->
<input type="text" name="onlineURL" placeholder="URL" class="form-control" /> <input type="text" name="onlineURL" placeholder="URL" class="form-control" />
Expand Down
1 change: 0 additions & 1 deletion scripts/defaultOptions.js
Expand Up @@ -30,7 +30,6 @@ let defaultOptions = {
onlineSave: false, onlineSave: false,
onlineURL: "https://mmd.nikurasu.org/api/", onlineURL: "https://mmd.nikurasu.org/api/",
username: "", username: "",
password: "",
isLoggedIn: false, isLoggedIn: false,
token: "", token: "",
version: 2.0 version: 2.0
Expand Down
2 changes: 1 addition & 1 deletion scripts/minified/optionsManager.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion scripts/minified/sharedFunctions.js

Large diffs are not rendered by default.

67 changes: 48 additions & 19 deletions scripts/optionsManager.js
Expand Up @@ -31,6 +31,13 @@ class OptionsManager {
this.onlineSuccess = document.getElementById("onlineSuccess"); this.onlineSuccess = document.getElementById("onlineSuccess");
this.downloadOnlineButton = document.getElementById("downloadOnline"); this.downloadOnlineButton = document.getElementById("downloadOnline");


// Only Chrome users can update the online save
if (CHROME) {
document.getElementById("onlineURLPanel").style.display = "block";
} else {
document.getElementById("onlineServiceInfo").style.display = "block";
}

// //
this.options = {}; this.options = {};
this.myAnimeListMangaList = {}; this.myAnimeListMangaList = {};
Expand Down Expand Up @@ -202,7 +209,6 @@ class OptionsManager {
// Restore online options // Restore online options
this.onlineForm.onlineURL.value = this.options.onlineURL; this.onlineForm.onlineURL.value = this.options.onlineURL;
this.onlineForm.username.value = this.options.username; this.onlineForm.username.value = this.options.username;
this.onlineForm.password.value = this.options.password;


// Show panels // Show panels
this.toggleOnlinePanels(this.options.onlineSave); this.toggleOnlinePanels(this.options.onlineSave);
Expand Down Expand Up @@ -859,12 +865,23 @@ class OptionsManager {
this.onlineSuccess.appendChild(document.createTextNode(response.status)); this.onlineSuccess.appendChild(document.createTextNode(response.status));
} }


getPassword() {
let password = this.onlineForm.password.value;
this.onlineForm.password.value = "";
if (password == "" || password.length < 10) {
this.handleOnlineError("Empty or invalid password.");
return false;
}
return password;
}

async login() { async login() {
this.hideOnlineMessage(); this.hideOnlineMessage();


let onlineURL = this.onlineForm.onlineURL.value; let onlineURL = this.onlineForm.onlineURL.value;
let username = this.onlineForm.username.value; let username = this.onlineForm.username.value;
let password = this.onlineForm.password.value; let password = this.getPassword();
if (!password) return;


// Send a request to the "login" route /user // Send a request to the "login" route /user
try { try {
Expand All @@ -882,7 +899,6 @@ class OptionsManager {
if (response.status == 200) { if (response.status == 200) {
this.options.onlineURL = onlineURL; this.options.onlineURL = onlineURL;
this.options.username = username; this.options.username = username;
this.options.password = password;
this.options.isLoggedIn = true; this.options.isLoggedIn = true;
this.options.token = text.token; this.options.token = text.token;
this.handleOnlineSuccess(text); this.handleOnlineSuccess(text);
Expand All @@ -901,9 +917,10 @@ class OptionsManager {


let onlineURL = this.onlineForm.onlineURL.value; let onlineURL = this.onlineForm.onlineURL.value;
let body = { let body = {
username: this.onlineForm.username.value, username: this.onlineForm.username.value
password: this.onlineForm.password.value
}; };
body.password = this.getPassword();
if (!body.password) return;


// Send a request to the /user route // Send a request to the /user route
try { try {
Expand All @@ -920,7 +937,6 @@ class OptionsManager {
if (response.status == 201) { if (response.status == 201) {
this.options.onlineURL = onlineURL; this.options.onlineURL = onlineURL;
this.options.username = body.username; this.options.username = body.username;
this.options.password = body.password;
this.options.isLoggedIn = true; this.options.isLoggedIn = true;
this.options.token = text.token; this.options.token = text.token;
this.handleOnlineSuccess(text); this.handleOnlineSuccess(text);
Expand All @@ -939,7 +955,6 @@ class OptionsManager {


// Set the options // Set the options
this.options.username = ""; this.options.username = "";
this.options.password = "";
this.options.isLoggedIn = false; this.options.isLoggedIn = false;
this.options.token = ""; this.options.token = "";
// Delete the form too // Delete the form too
Expand Down Expand Up @@ -1032,27 +1047,28 @@ class OptionsManager {
async deleteOnline() { async deleteOnline() {
this.hideOnlineMessage(); this.hideOnlineMessage();


let password = this.getPassword();
if (!password) return;

// Send a simple DELETE request // Send a simple DELETE request
try { try {
let response = await fetch(this.options.onlineURL + "user/self", { let response = await fetch(this.options.onlineURL + "user/self", {
method: "DELETE", method: "DELETE",
headers: { headers: {
"Accept": "application/json", "Accept": "application/json",
"X-Auth-Name": this.options.username, "X-Auth-Name": this.options.username,
"X-Auth-Pass": this.options.password "X-Auth-Pass": password
} }
}); });
let text = await response.json(); let text = await response.json();


if (response.status == 200) { if (response.status == 200) {
// Delete in the options // Delete in the options
this.options.username = ""; this.options.username = "";
this.options.password = "";
this.options.isLoggedIn = false; this.options.isLoggedIn = false;
this.options.token = ""; this.options.token = "";
// Delete the form too // Delete the form too
this.onlineForm.username.value = ""; this.onlineForm.username.value = "";
this.onlineForm.password.value = "";
// Save // Save
this.handleOnlineSuccess(text); this.handleOnlineSuccess(text);
this.saveOptions(); this.saveOptions();
Expand All @@ -1068,12 +1084,20 @@ class OptionsManager {
async update() { async update() {
this.hideOnlineMessage(); this.hideOnlineMessage();


// Can't change the online URL or username while updating credentials let password = this.getPassword();
this.onlineForm.onlineURL.value = this.options.onlineURL; if (!password) return;
this.onlineForm.username.value = this.options.username;
let oldPassword = this.onlineForm.password.dataset.currentPassword;
if (oldPassword === undefined) {
this.onlineForm.password.dataset.currentPassword = password;
this.handleOnlineSuccess("Enter your new password and click Update Credentials again.");
} else {
delete this.onlineForm.password.dataset.currentPassword;
}

// Only the password can be updated // Only the password can be updated
let body = { let body = {
password: this.onlineForm.password.value password: password
}; };


try { try {
Expand All @@ -1083,14 +1107,13 @@ class OptionsManager {
"Accept": "application/json", "Accept": "application/json",
"Content-Type": "application/json; charset=utf-8", "Content-Type": "application/json; charset=utf-8",
"X-Auth-Name": this.options.username, "X-Auth-Name": this.options.username,
"X-Auth-Pass": this.options.password "X-Auth-Pass": oldPassword
}, },
body: JSON.stringify(body) body: JSON.stringify(body)
}); });
let text = await response.json(); let text = await response.json();


if (response.status == 200) { if (response.status == 200) {
this.options.password = body.password;
this.options.token = text.token; this.options.token = text.token;
this.handleOnlineSuccess(text); this.handleOnlineSuccess(text);
this.saveOptions(); this.saveOptions();
Expand All @@ -1105,19 +1128,22 @@ class OptionsManager {
async refreshToken() { async refreshToken() {
this.hideOnlineMessage(); this.hideOnlineMessage();


let password = this.getPassword();
if (!password) return;

try { try {
let response = await fetch(this.options.onlineURL + "user/self/token/refresh", { let response = await fetch(this.options.onlineURL + "user/self/token/refresh", {
method: "GET", method: "GET",
headers: { headers: {
"Accept": "application/json", "Accept": "application/json",
"X-Auth-Name": this.options.username, "X-Auth-Name": this.options.username,
"X-Auth-Pass": this.options.password "X-Auth-Pass": password
} }
}); });
let text = await response.json(); let text = await response.json();


if (response.status == 200) { if (response.status == 200) {
// Delete in the options // Update in the options
this.options.token = text.token; this.options.token = text.token;
// Save // Save
this.handleOnlineSuccess("Token updated."); this.handleOnlineSuccess("Token updated.");
Expand All @@ -1133,13 +1159,16 @@ class OptionsManager {
async receiveToken() { async receiveToken() {
this.hideOnlineMessage(); this.hideOnlineMessage();


let password = this.getPassword();
if (!password) return;

try { try {
let response = await fetch(this.options.onlineURL + "user/self/token", { let response = await fetch(this.options.onlineURL + "user/self/token", {
method: "GET", method: "GET",
headers: { headers: {
"Accept": "application/json", "Accept": "application/json",
"X-Auth-Name": this.options.username, "X-Auth-Name": this.options.username,
"X-Auth-Pass": this.options.password "X-Auth-Pass": password
} }
}); });
let text = await response.json(); let text = await response.json();
Expand Down
4 changes: 2 additions & 2 deletions scripts/sharedFunctions.js
Expand Up @@ -168,11 +168,11 @@ async function updateLocalStorage(manga, options) {
let response = await fetch(options.onlineURL + "user/self/title/" + manga.mangaDexId, { let response = await fetch(options.onlineURL + "user/self/title/" + manga.mangaDexId, {
method: "POST", method: "POST",
mode: "cors", mode: "cors",
headers: new Headers({ headers: {
"Accept": "application/json", "Accept": "application/json",
"Content-Type": "application/json; charset=utf-8", "Content-Type": "application/json; charset=utf-8",
"X-Auth-Token": options.token "X-Auth-Token": options.token
}), },
body: JSON.stringify(body) body: JSON.stringify(body)
}); });


Expand Down

0 comments on commit 49b86ce

Please sign in to comment.