Fixed user-profile so it can now change password
Signed-off-by: James Ketrenos <james_git@ketrenos.com>
This commit is contained in:
parent
0e750d5931
commit
9d5d71c58d
136
frontend/elements/user-profile.html
Normal file
136
frontend/elements/user-profile.html
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="import" href="../bower_components/polymer/polymer.html">
|
||||||
|
<link rel="import" href="../bower_components/iron-icon/iron-icon.html">
|
||||||
|
<link rel="import" href="../bower_components/iron-icons/iron-icons.html">
|
||||||
|
<link rel="import" href="../bower_components/iron-iconset/iron-iconset.html">
|
||||||
|
<link rel="import" href="../bower_components/iron-icons/image-icons.html">
|
||||||
|
<link rel="import" href="../bower_components/iron-pages/iron-pages.html">
|
||||||
|
|
||||||
|
<link rel="import" href="../bower_components/paper-button/paper-button.html">
|
||||||
|
<link rel="import" href="../bower_components/paper-spinner/paper-spinner.html">
|
||||||
|
|
||||||
|
<link rel="import" href="../bower_components/iron-flex-layout/iron-flex-layout-classes.html">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<dom-module id="user-profile">
|
||||||
|
<template>
|
||||||
|
<style is="custom-style" include="iron-flex iron-flex-alignment iron-positioning">
|
||||||
|
:host > div {
|
||||||
|
max-width: 60ex;
|
||||||
|
margin: 1em auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field {
|
||||||
|
width: 10ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
paper-input [slot] {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
paper-input[type="password"] [slot] {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="layout vertical">
|
||||||
|
<paper-input label="User" readonly value="[[user.displayName]]"></paper-input>
|
||||||
|
<paper-input label="Mail" readonly value="[[user.mail]]"></paper-input>
|
||||||
|
<paper-input label="Current password" type="password" value="{{currentPassword}}"><iron-icon on-tap="toggleShowPassword" slot="suffix" icon="image:remove-red-eye"></iron-icon></paper-input>
|
||||||
|
<paper-input label="New password" type="password" value="{{newPassword}}"><iron-icon on-tap="toggleShowPassword" slot="suffix" icon="image:remove-red-eye"></iron-icon></paper-input>
|
||||||
|
<paper-input label="Confirm password" type="password" value="{{confirmPassword}}"><iron-icon on-tap="toggleShowPassword" slot="suffix" icon="image:remove-red-eye"></iron-icon></paper-input>
|
||||||
|
<paper-button on-tap="submit" disabled$="[[disableSubmit(currentPassword, newPassword, confirmPassword)]]">Submit</paper-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
"use strict";
|
||||||
|
Polymer({
|
||||||
|
is: "user-profile",
|
||||||
|
properties: {
|
||||||
|
currentPassword: {
|
||||||
|
type: String,
|
||||||
|
value: ""
|
||||||
|
},
|
||||||
|
newPassword: {
|
||||||
|
type: String,
|
||||||
|
value: ""
|
||||||
|
},
|
||||||
|
confirmPassword: {
|
||||||
|
type: String,
|
||||||
|
value: ""
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
observers: [
|
||||||
|
],
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
},
|
||||||
|
|
||||||
|
disableSubmit: function(currentPassword, newPassword, confirmPassword) {
|
||||||
|
if (!currentPassword || !newPassword || !confirmPassword) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
toggleShowPassword: function(event) {
|
||||||
|
var hidden = !(event.currentTarget.parentElement.getAttribute("type") == "password");
|
||||||
|
event.currentTarget.parentElement.setAttribute("type", hidden ? "password" : "text");
|
||||||
|
},
|
||||||
|
|
||||||
|
submit: function() {
|
||||||
|
var app = document.querySelector("ketr-photos");
|
||||||
|
|
||||||
|
if (this.newPassword != this.confirmPassword) {
|
||||||
|
app.$.toast.text = "Passwords do not match.";
|
||||||
|
app.$.toast.setAttribute("error", true);
|
||||||
|
app.$.toast.updateStyles();
|
||||||
|
app.$.toast.show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.fetch("api/v1/users/password", function(error, xhr) {
|
||||||
|
if (error) {
|
||||||
|
app.$.toast.text = error;
|
||||||
|
app.$.toast.setAttribute("error", true);
|
||||||
|
app.$.toast.updateStyles();
|
||||||
|
app.$.toast.show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var response;
|
||||||
|
try {
|
||||||
|
response = JSON.parse(xhr.responseText);
|
||||||
|
} catch(___) {
|
||||||
|
app.$.toast.text = "Unable to set password.";
|
||||||
|
app.$.toast.setAttribute("error", true);
|
||||||
|
app.$.toast.updateStyles();
|
||||||
|
app.$.toast.show();
|
||||||
|
console.error("Unable to set password.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
app.$.toast.text = "Password changed successfully.";
|
||||||
|
app.$.toast.removeAttribute("error");
|
||||||
|
app.$.toast.updateStyles();
|
||||||
|
app.$.toast.show();
|
||||||
|
|
||||||
|
app.mode = app.lastMode;
|
||||||
|
}.bind(this), {}, "PUT", { c: this.currentPassword, n: this.newPassword });
|
||||||
|
},
|
||||||
|
|
||||||
|
attached: function() {
|
||||||
|
var base = document.querySelector("base");
|
||||||
|
if (base) {
|
||||||
|
this.base = new URL(base.href).pathname.replace(/\/$/, "") + "/"; /* Make sure there is a trailing slash */
|
||||||
|
} else {
|
||||||
|
this.base = "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</dom-module>
|
||||||
|
</html>
|
Loading…
x
Reference in New Issue
Block a user