-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.html
More file actions
225 lines (200 loc) · 6.29 KB
/
main.html
File metadata and controls
225 lines (200 loc) · 6.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
<!DOCTYPE html>
<html>
<head>
<title>Shelter sign Up</title>
<style>
body {
background-color: #C95445;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
}
form {
display: flex;
flex-direction: column;
align-items: center;
background-color: #fff;
padding: 20px;
border-radius: 10px;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);
}
input[type="text"], input[type="password"] {
padding: 5px;
margin: 10px;
width: 200px;
border-radius: 5px;
border: 1px solid #ccc;
}
button {
padding: 10px 20px;
background-color: #C95445;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #BE5547;
}
#error-message {
color: #fff;
margin-top: 10px;
}
h1 {
color: #fff;
font-size: 36px;
margin-bottom: 20px;
text-align: center;
}
</style>
<script src="https://smtpjs.com/v3/smtp.js"></script>
</head>
<body>
<div id="app">
<h1>The Shelter </h1>
<h2>Sign Up and connect with your fellow terps</h2>
<form v-if="!verificationCodeInputVisible && !signInFormVisible" @submit.prevent="sendAuthCode">
<p>Please enter your Terpmail address:</p>
<input type="text" v-model="emailInput">
<button type="submit">Sign Up</button>
</form>
<form v-if="verificationCodeInputVisible && !createAccountFormVisible">
<p>Please enter the verification code sent to your email:</p>
<input type="text" v-model="verificationCodeInput">
<button type="button" @click="verifyAuthCode">Verify Code</button>
</form>
<form v-if="createAccountFormVisible">
<p>Please enter a name for your account:</p>
<input type="text" v-model="nameInput">
<p>Please enter a password:</p>
<input type="password" v-model="passwordInput">
<button type="button" @click="createAccount">Create Account</button>
</form>
<p v-if="errorMessage">{{errorMessage}}</p>
<br>
<form v-if="signInFormVisible" @submit.prevent="signIn">
<p>Please enter your Terpmail address:</p>
<input type="text" v-model="signInEmailInput">
<p>Please enter your password:</p>
<input type="password" v-model="signInPasswordInput">
<button type="submit">Sign In</button>
</form>
<br>
<button v-if="!verificationCodeInputVisible && !signInFormVisible" type="button" @click="showSignInForm">Sign In</button>
<button v-if="!verificationCodeInputVisible && signInFormVisible" type="button" @click="showSignUpForm">Sign Up</button>
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
const umdEmailRegex = /.*@terpmail\.umd\.edu$/;
const app = Vue.createApp({
data() {
return {
emailInput: "",
signInEmailInput: "",
signInPasswordInput: "",
signInFormVisible: false,
errorMessage: "",
verificationCodeInput: "",
nameInput: "",
passwordInput: "",
verificationCodeInputVisible: false,
signUpFormVisible: false,
signUpErrorMessage: "",
authCode: null,
createAccountFormVisible: false, // Initialize to false
}
},
methods: {
sendAuthCode() {
if (umdEmailRegex.test(this.emailInput)) {
// Generate a random 6-digit code
this.authCode = 123;
// Send the code to the user's email address
Email.send({
SecureToken: "your_secure_token_here",
To: this.emailInput,
From: "your_email_address_here",
Subject: "Verification Code",
Body: `Your verification code is: ${this.authCode}`
}).then(
message => {
alert("An authentication code has been sent to your email address.");
}
);
// Display the verification code input field
this.verificationCodeInputVisible = true;
} else {
this.errorMessage = "Please enter a valid terpmail.umd.edu email address.";
}
},
verifyAuthCode() {
if (this.verificationCodeInput == this.authCode) {
// Show the sign-up form
this.createAccountFormVisible = true; // Set createAccountFormVisible to true
} else {
this.signUpErrorMessage = "Invalid verification code.";
}
},
verifyAuthCode() {
if (this.verificationCodeInput == this.authCode) {
// Show the sign-up form
this.createAccountFormVisible = true;
} else {
this.signUpErrorMessage = "Invalid verification code.";
}
},
createAccount() {
if (this.nameInput && this.passwordInput) {
// Store the user's credentials in a database
// Replace the placeholders with the actual values
const url = "your_database_url_here";
const username = this.emailInput.trim();
const password = this.passwordInput.trim();
const name = this.nameInput.trim();
fetch(url, {
method: "POST",
body: JSON.stringify({ username, password, name }),
headers: {
"Content-Type": "application/json"
}
}).then(
response => {
if (response.ok) {
this.verificationCodeInputVisible = false
this.createAccountFormVisible = false;
window.alert("You have successfully signed up \n Fellow terps !");
this.signInFormVisible = true;
} else {
this.signUpErrorMessage = "An error occurred while storing your credentials. Please try again later.";
}
}
);
} else {
this.signUpErrorMessage = "Please enter at least an 8 characters password.";
}
// to be removed
this.verificationCodeInputVisible = false
this.createAccountFormVisible = false;
window.alert("You have successfully signed up \n Fellow terps !");
this.signInFormVisible = true;
},
showSignUpForm() {
this.signInFormVisible = false;
this.verificationCodeInputVisible = false;
this.signUpFormVisible = true;
},
showVerificationCodeInput() {
this.signInFormVisible = false;
this.verificationCodeInputVisible = true;
},
showSignInForm() {
this.signInFormVisible = true;
this.verificationCodeInputVisible = false;
}
}
});
app.mount("#app");
</script>