From 36558dfb85cf54c38651683cd6a0a19f5370e7f6 Mon Sep 17 00:00:00 2001 From: "xingzhe.ru" Date: Mon, 30 Jun 2025 16:23:34 +0000 Subject: [PATCH] upload files --- .../back-new/features/auth/auth.controller.js | 95 +++++++++++++++++++ .../back-new/features/auth/auth.routes.js | 10 ++ .../features/image/image.controller.js | 81 ++++++++++++++++ .../back-new/features/image/image.routes.js | 7 ++ .../back-new/features/user/user.controller.js | 12 +++ .../back-new/features/user/user.routes.js | 7 ++ .../kfu-m-24-1/back-new/shared/hateoas.js | 8 ++ .../kfu-m-24-1/back-new/shared/usersDb.js | 20 ++++ 8 files changed, 240 insertions(+) create mode 100644 server/routers/kfu-m-24-1/back-new/features/auth/auth.controller.js create mode 100644 server/routers/kfu-m-24-1/back-new/features/auth/auth.routes.js create mode 100644 server/routers/kfu-m-24-1/back-new/features/image/image.controller.js create mode 100644 server/routers/kfu-m-24-1/back-new/features/image/image.routes.js create mode 100644 server/routers/kfu-m-24-1/back-new/features/user/user.controller.js create mode 100644 server/routers/kfu-m-24-1/back-new/features/user/user.routes.js create mode 100644 server/routers/kfu-m-24-1/back-new/shared/hateoas.js create mode 100644 server/routers/kfu-m-24-1/back-new/shared/usersDb.js diff --git a/server/routers/kfu-m-24-1/back-new/features/auth/auth.controller.js b/server/routers/kfu-m-24-1/back-new/features/auth/auth.controller.js new file mode 100644 index 0000000..21c400f --- /dev/null +++ b/server/routers/kfu-m-24-1/back-new/features/auth/auth.controller.js @@ -0,0 +1,95 @@ +const usersDb = require('../../shared/usersDb'); +const makeLinks = require('../../shared/hateoas'); + +exports.login = (req, res) => { + const { username, password, email } = req.body; + const user = usersDb.findUser(username, email, password); + if (user) { + res.json({ + data: { + user: { + id: user.id, + username: user.username, + email: user.email, + firstName: user.firstName, + lastName: user.lastName + }, + token: 'token-' + user.id, + message: 'Login successful' + }, + _links: makeLinks('/api/auth', { + self: '/login', + profile: '/profile/', + logout: '/logout' + }), + _meta: {} + }); + } else { + res.status(401).json({ error: 'Invalid credentials' }); + } +}; + +exports.register = (req, res) => { + const { username, password, email, firstName, lastName } = req.body; + if (usersDb.exists(username, email)) { + return res.status(409).json({ error: 'User already exists' }); + } + const newUser = usersDb.addUser({ username, password, email, firstName, lastName }); + res.json({ + data: { + user: { + id: newUser.id, + username, + email, + firstName, + lastName + }, + token: 'token-' + newUser.id, + message: 'Register successful' + }, + _links: makeLinks('/api/auth', { + self: '/register', + login: '/login', + profile: '/profile/' + }), + _meta: {} + }); +}; + +exports.profile = (req, res) => { + const auth = req.headers.authorization; + if (!auth || !auth.startsWith('Bearer ')) { + return res.status(401).json({ error: 'No token provided' }); + } + const token = auth.replace('Bearer ', ''); + const id = parseInt(token.replace('token-', '')); + const user = usersDb.findById(id); + if (!user) { + return res.status(401).json({ error: 'Invalid token' }); + } + res.json({ + data: { + id: user.id, + username: user.username, + email: user.email, + firstName: user.firstName, + lastName: user.lastName + }, + _links: makeLinks('/api/auth', { + self: '/profile/', + logout: '/logout' + }), + _meta: {} + }); +}; + +exports.logout = (req, res) => { + res.json({ + message: 'Logout successful', + _links: makeLinks('/api/auth', { + self: '/logout', + login: '/login' + }), + _meta: {} + }); +}; \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/back-new/features/auth/auth.routes.js b/server/routers/kfu-m-24-1/back-new/features/auth/auth.routes.js new file mode 100644 index 0000000..d983771 --- /dev/null +++ b/server/routers/kfu-m-24-1/back-new/features/auth/auth.routes.js @@ -0,0 +1,10 @@ +const express = require('express'); +const router = express.Router(); +const ctrl = require('./auth.controller'); + +router.post('/login', ctrl.login); +router.post('/register', ctrl.register); +router.get('/profile/', ctrl.profile); +router.post('/logout', ctrl.logout); + +module.exports = router; \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/back-new/features/image/image.controller.js b/server/routers/kfu-m-24-1/back-new/features/image/image.controller.js new file mode 100644 index 0000000..49b4489 --- /dev/null +++ b/server/routers/kfu-m-24-1/back-new/features/image/image.controller.js @@ -0,0 +1,81 @@ +const axios = require('axios'); +const makeLinks = require('../../shared/hateoas'); +const path = require('path'); +const qs = require('qs'); +const { v4: uuidv4 } = require('uuid'); +require('dotenv').config({ path: path.resolve(__dirname, '../../.env') }); +process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; + +exports.generate = async (req, res) => { + const { prompt } = req.query; + if (!prompt) { + return res.status(400).json({ error: 'Prompt parameter is required' }); + } + try { + const apiKey = process.env.GIGACHAT_API_KEY; + const tokenResp = await axios.post( + 'https://ngw.devices.sberbank.ru:9443/api/v2/oauth', + { + 'scope':' GIGACHAT_API_PERS', + }, + { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Accept': 'application/json', + 'Authorization': `Basic ${apiKey}`, + 'RqUID':'6f0b1291-c7f3-43c6-bb2e-9f3efb2dc98e' + }, + } + ); + const accessToken = tokenResp.data.access_token; + const chatResp = await axios.post( + 'https://gigachat.devices.sberbank.ru/api/v1/chat/completions', + { + model: "GigaChat", + messages: [ + { role: "system", content: "Ты — Василий Кандинский" }, + { role: "user", content: prompt } + ], + stream: false, + function_call: 'auto' + }, + { + headers: { + 'Authorization': `Bearer ${accessToken}`, + 'Content-Type': 'application/json', + 'RqUID': uuidv4(), + } + } + ); + const content = chatResp.data.choices[0].message.content; + const match = content.match(/ { + res.json({ + data: usersDb.getAll(), + _links: makeLinks('/api/user', { + self: '/list', + }), + _meta: {} + }); +}; \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/back-new/features/user/user.routes.js b/server/routers/kfu-m-24-1/back-new/features/user/user.routes.js new file mode 100644 index 0000000..f444cad --- /dev/null +++ b/server/routers/kfu-m-24-1/back-new/features/user/user.routes.js @@ -0,0 +1,7 @@ +const express = require('express'); +const router = express.Router(); +const ctrl = require('./user.controller'); + +router.get('/list', ctrl.list); + +module.exports = router; \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/back-new/shared/hateoas.js b/server/routers/kfu-m-24-1/back-new/shared/hateoas.js new file mode 100644 index 0000000..b12ec23 --- /dev/null +++ b/server/routers/kfu-m-24-1/back-new/shared/hateoas.js @@ -0,0 +1,8 @@ +function makeLinks(base, links) { + const result = {}; + for (const [rel, path] of Object.entries(links)) { + result[rel] = { href: base + path }; + } + return result; +} +module.exports = makeLinks; \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/back-new/shared/usersDb.js b/server/routers/kfu-m-24-1/back-new/shared/usersDb.js new file mode 100644 index 0000000..0b888ef --- /dev/null +++ b/server/routers/kfu-m-24-1/back-new/shared/usersDb.js @@ -0,0 +1,20 @@ +let users = [ + { id: 1, username: 'test', password: '123456', email: 'test@example.com', firstName: 'Test', lastName: 'User' } +]; +let nextId = 2; + +exports.findUser = (username, email, password) => + users.find(u => (u.username === username || u.email === email) && u.password === password); + +exports.findById = (id) => users.find(u => u.id === id); + +exports.addUser = ({ username, password, email, firstName, lastName }) => { + const newUser = { id: nextId++, username, password, email, firstName, lastName }; + users.push(newUser); + return newUser; +}; + +exports.exists = (username, email) => + users.some(u => u.username === username || u.email === email); + +exports.getAll = () => users; \ No newline at end of file