From af4e7f42379a9ca2a1d9b5f6e581e1568f4e23ec Mon Sep 17 00:00:00 2001 From: debebantur Date: Thu, 16 Dec 2021 22:39:10 +0500 Subject: [PATCH] 1-8 --- client.mjs | 34 ++++++++++++++++++++-------------- server.mjs | 52 +++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 63 insertions(+), 23 deletions(-) diff --git a/client.mjs b/client.mjs index a05a777..0b4d155 100644 --- a/client.mjs +++ b/client.mjs @@ -6,7 +6,9 @@ export class Client { * @return {Promise} username * */ async getUser() { - throw new Error("Not implemented"); + return fetch('api/user').then(async res => { + return (await res.json())['username']; + }) } /** @@ -17,7 +19,11 @@ export class Client { * @return {Promise} username * */ async loginUser(username) { - throw new Error("Not implemented"); + return fetch(`api/login?username=${username}`).then(async res => { + let json = await res.json(); + console.log("client/login: " + json['username']) + return json['username']; + }) } /** @@ -26,7 +32,7 @@ export class Client { * @return {void} * */ async logoutUser() { - throw new Error("Not implemented"); + await fetch('api/logout'); } /** @@ -49,8 +55,8 @@ export class Client { * @property {string} summary * @return {Promise} * */ - async getInfo() { - throw new Error("Not implemented"); + async getInfo() { //let response = + return (await fetch('https://api.spacexdata.com/v3/info')).json(); } /** @@ -63,7 +69,7 @@ export class Client { * @return {Promise} * */ async getHistory() { - throw new Error("Not implemented"); + return (await fetch('https://api.spacexdata.com/v3/history')).json(); } /** @@ -80,7 +86,7 @@ export class Client { * @return {Promise} * */ async getHistoryEvent(id) { - throw new Error("Not implemented"); + return (await fetch(`https://api.spacexdata.com/v3/history/${id}`)).json(); } /** @@ -93,7 +99,7 @@ export class Client { * @return {Promise} * */ async getRockets() { - throw new Error("Not implemented"); + return (await fetch('https://api.spacexdata.com/v3/rockets')).json(); } /** @@ -118,7 +124,7 @@ export class Client { * @return {Promise} * */ async getRocket(id) { - throw new Error("Not implemented"); + return (await fetch(`https://api.spacexdata.com/v3/rocket/${id}`)).json(); } /** @@ -135,7 +141,7 @@ export class Client { * @return {Promise} * */ async getRoadster() { - throw new Error("Not implemented"); + return (await fetch('https://api.spacexdata.com/v3/roadster')).json(); } /** @@ -152,7 +158,7 @@ export class Client { * @return {Promise} * */ async getSentToMars() { - throw new Error("Not implemented"); + throw new Error("Not implemented"); } /** @@ -170,7 +176,7 @@ export class Client { * @return {Promise} * */ async sendToMars(item) { - throw new Error("Not implemented"); + throw new Error("Not implemented"); } /** @@ -181,6 +187,6 @@ export class Client { * @return {Promise} * */ async cancelSendingToMars(item) { - throw new Error("Not implemented"); + throw new Error("Not implemented"); } -} +} \ No newline at end of file diff --git a/server.mjs b/server.mjs index 75d9cbe..dfc30bc 100644 --- a/server.mjs +++ b/server.mjs @@ -10,18 +10,52 @@ const rootDir = process.cwd(); const port = 3000; const app = express(); +function loginMiddleware(req, res, next) { + let notRedirectingUrls = ['static', 'login', 'api']; + let root = req.url.split('/')[1]; + let isFile = root.split('.').length > 1; + if (notRedirectingUrls.includes(root) || isFile || req.cookies.username) + next(); + else + res.redirect('/login'); +}; + +app.use(express.static('spa/build')); +app.use(cookieParser()); +app.use(loginMiddleware); + app.get("/client.mjs", (_, res) => { - res.header("Cache-Control", "private, no-cache, no-store, must-revalidate"); - res.sendFile(path.join(rootDir, "client.mjs"), { - maxAge: -1, - cacheControl: false, - }); + res.header("Cache-Control", "private, no-cache, no-store, must-revalidate"); + res.sendFile(path.join(rootDir, "client.mjs"), { + maxAge: -1, + cacheControl: false, + }); }); -app.get("/", (_, res) => { - res.send(":)"); +app.get("/api/login", (req, res) => { + res.cookie('username', req.query.username, { 'httpOnly': true, 'secure': true, 'sameSite': 'Strict' }); + res.json({ 'username': req.query.username }); }); -app.listen(port, () => { - console.log(`App listening on port ${port}`); +app.get("/api/user", (req, res) => { + res.json({ 'username': req.cookies.username }); }); + +app.get("/api/logout", (req, res) => { + res.clearCookie('username'); + res.redirect('/'); +}) + +app.get('/*', (req, res) => { +res.redirect('/'); +}); + + +https.createServer({ + key: fs.readFileSync("certs/server.key"), + cert: fs.readFileSync("certs/server.cert"), + }, + app +).listen(port, function() { + console.log(`Я работаю на ${port}`); +}); \ No newline at end of file