| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | <template>	<div>		<metadata title="Reset password" />		<main-header />		<div class="container">			<!--Implement Validation-->			<h1>Step {{ step }}</h1>			<label v-if="step === 1" class="label">Email Address</label>			<div v-if="step === 1" class="control is-grouped">				<p class="control is-expanded has-icon has-icon-right">					<input						v-model="email"						class="input"						type="email"						placeholder="The email address associated with your account"					/>				</p>				<p class="control">					<button class="button is-success" @click="submitEmail()">						Request					</button>					<button						v-if="step === 1"						class="button is-default skip-step"						@click="step = 2"					>						Skip this step					</button>				</p>			</div>			<label v-if="step === 2" class="label">Reset Code</label>			<div v-if="step === 2" class="control is-grouped">				<p class="control is-expanded has-icon has-icon-right">					<input						v-model="code"						class="input"						type="text"						placeholder="The reset code that was sent to your account's email address"					/>				</p>				<p class="control">					<button class="button is-success" v-on:click="verifyCode()">						Verify reset code					</button>				</p>			</div>			<label v-if="step === 3" class="label">Change password</label>			<div v-if="step === 3" class="control is-grouped">				<p class="control is-expanded has-icon has-icon-right">					<input						v-model="newPassword"						class="input"						type="password"						placeholder="New password"					/>				</p>				<p class="control">					<button class="button is-success" @click="changePassword()">						Change password					</button>				</p>			</div>		</div>		<main-footer />	</div></template><script>import { Toast } from "vue-roaster";import MainHeader from "../MainHeader.vue";import MainFooter from "../MainFooter.vue";import io from "../../io";export default {	components: { MainHeader, MainFooter },	data() {		return {			email: "",			code: "",			newPassword: "",			step: 1		};	},	mounted() {		io.getSocket(socket => {			this.socket = socket;		});	},	methods: {		submitEmail() {			if (!this.email)				return Toast.methods.addToast("Email cannot be empty", 8000);			return this.socket.emit(				"users.requestPasswordReset",				this.email,				res => {					Toast.methods.addToast(res.message, 8000);					if (res.status === "success") {						this.step = 2;					}				}			);		},		verifyCode() {			if (!this.code)				return Toast.methods.addToast("Code cannot be empty", 8000);			return this.socket.emit(				"users.verifyPasswordResetCode",				this.code,				res => {					Toast.methods.addToast(res.message, 8000);					if (res.status === "success") {						this.step = 3;					}				}			);		},		changePassword() {			if (!this.newPassword)				return Toast.methods.addToast("Password cannot be empty", 8000);			return this.socket.emit(				"users.changePasswordWithResetCode",				this.code,				this.newPassword,				res => {					Toast.methods.addToast(res.message, 8000);					if (res.status === "success") {						this.$router.go("/login");					}				}			);		}	}};</script><style lang="scss" scoped>@import "styles/global.scss";.container {	padding: 25px;}.skip-step {	background-color: #7e7e7e;	color: $white;}</style>
 |