diff --git a/package-lock.json b/package-lock.json index dd33865..57a84e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { + "@supabase/supabase-js": "^2.49.4", "ai": "^4.1.13", "axios": "^1.7.7", "bcrypt": "^5.1.0", @@ -1774,6 +1775,101 @@ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" }, + "node_modules/@supabase/auth-js": { + "version": "2.69.1", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.69.1.tgz", + "integrity": "sha512-FILtt5WjCNzmReeRLq5wRs3iShwmnWgBvxHfqapC/VoljJl+W8hDAyFmf1NVw3zH+ZjZ05AKxiKxVeb0HNWRMQ==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.4.tgz", + "integrity": "sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/node-fetch": { + "version": "2.6.15", + "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", + "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/@supabase/postgrest-js": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.19.4.tgz", + "integrity": "sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.11.2.tgz", + "integrity": "sha512-u/XeuL2Y0QEhXSoIPZZwR6wMXgB+RQbJzG9VErA3VghVt7uRfSVsjeqd7m5GhX3JR6dM/WRmLbVR8URpDWG4+w==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14", + "@types/phoenix": "^1.5.4", + "@types/ws": "^8.5.10", + "ws": "^8.18.0" + } + }, + "node_modules/@supabase/realtime-js/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.7.1.tgz", + "integrity": "sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.49.4", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.49.4.tgz", + "integrity": "sha512-jUF0uRUmS8BKt37t01qaZ88H9yV1mbGYnqLeuFWLcdV+x1P4fl0yP9DGtaEhFPZcwSom7u16GkLEH9QJZOqOkw==", + "license": "MIT", + "dependencies": { + "@supabase/auth-js": "2.69.1", + "@supabase/functions-js": "2.4.4", + "@supabase/node-fetch": "2.6.15", + "@supabase/postgrest-js": "1.19.4", + "@supabase/realtime-js": "2.11.2", + "@supabase/storage-js": "2.7.1" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -1930,6 +2026,12 @@ "undici-types": "~6.20.0" } }, + "node_modules/@types/phoenix": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.6.tgz", + "integrity": "sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==", + "license": "MIT" + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -1966,6 +2068,15 @@ "@types/webidl-conversions": "*" } }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", diff --git a/package.json b/package.json index 3cc5bad..17ea786 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "license": "MIT", "homepage": "https://bitbucket.org/online-mentor/multi-stub#readme", "dependencies": { + "@supabase/supabase-js": "^2.49.4", "ai": "^4.1.13", "axios": "^1.7.7", "bcrypt": "^5.1.0", diff --git a/server/routers/kfu-m-24-1/index.js b/server/routers/kfu-m-24-1/index.js index 609da3e..c65cfc8 100644 --- a/server/routers/kfu-m-24-1/index.js +++ b/server/routers/kfu-m-24-1/index.js @@ -4,6 +4,7 @@ const router = Router() router.use('/eng-it-lean', require('./eng-it-lean/index')) router.use('/sberhubproject', require('./sberhubproject/index')) router.use('/sber_web', require('./sber_web/index')) +router.use('/sber_mobile', require('./sber_mobile/index')) module.exports = router diff --git a/server/routers/kfu-m-24-1/sber_mobile/auth.js b/server/routers/kfu-m-24-1/sber_mobile/auth.js new file mode 100644 index 0000000..6ee3f2e --- /dev/null +++ b/server/routers/kfu-m-24-1/sber_mobile/auth.js @@ -0,0 +1,54 @@ +const router = require('express').Router(); +const { createClient } = require('@supabase/supabase-js'); +const { getSupabaseUrl, getSupabaseKey } = require('./get-constants'); + + +(async () => { + const supabaseUrl = await getSupabaseUrl(); + const supabaseAnonKey = await getSupabaseKey(); + supabase = createClient(supabaseUrl, supabaseAnonKey); // supabase — глобальная переменная +})(); + +// POST /sign-in +router.post('/sign-in', async (req, res) => { + const { email, password } = req.body; + const { data, error } = await supabase.auth.signInWithPassword({ email, password }); + if (error) return res.status(400).json({ error: error.message }); + res.json(data); +}); + +// POST /sign-up +router.post('/sign-up', async (req, res) => { + const { email, password } = req.body; + const { data, error } = await supabase.auth.signUp({ email, password }); + if (error) return res.status(400).json({ error: error.message }); + res.json(data); +}); + +// POST /sign-out +router.post('/sign-out', async (req, res) => { + const { access_token } = req.body; + supabase.auth.setSession({ access_token, refresh_token: '' }); + const { error } = await supabase.auth.signOut(); + if (error) return res.status(400).json({ error: error.message }); + res.json({ success: true }); +}); + +// POST /reset-password +router.post('/reset-password', async (req, res) => { + const { email } = req.body; + const { data, error } = await supabase.auth.resetPasswordForEmail(email); + if (error) return res.status(400).json({ error: error.message }); + res.json(data); +}); + +// POST /update-password +router.post('/update-password', async (req, res) => { + const { access_token, newPassword } = req.body; + supabase.auth.setSession({ access_token, refresh_token: '' }); + const { data, error } = await supabase.auth.updateUser({ password: newPassword }); + if (error) return res.status(400).json({ error: error.message }); + res.json(data); +}); + +module.exports = router; \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/sber_mobile/get-constants.js b/server/routers/kfu-m-24-1/sber_mobile/get-constants.js new file mode 100644 index 0000000..0834951 --- /dev/null +++ b/server/routers/kfu-m-24-1/sber_mobile/get-constants.js @@ -0,0 +1,18 @@ +const fetch = require('node-fetch'); + +const getSupabaseUrl = async () => { + const response = await fetch('https://admin.bro-js.ru/api/config/v1/dev'); + const data = await response.json(); + return data.features['sber_mobile'].SUPABASE_URL.value; +}; + +const getSupabaseKey = async () => { + const response = await fetch('https://admin.bro-js.ru/api/config/v1/dev'); + const data = await response.json(); + return data.features['sber_mobile'].SUPABASE_KEY.value; +}; + +module.exports = { + getSupabaseUrl, + getSupabaseKey, +}; \ No newline at end of file diff --git a/server/routers/kfu-m-24-1/sber_mobile/index.js b/server/routers/kfu-m-24-1/sber_mobile/index.js new file mode 100644 index 0000000..8429488 --- /dev/null +++ b/server/routers/kfu-m-24-1/sber_mobile/index.js @@ -0,0 +1,6 @@ +const router = require('express').Router(); +const authRouter = require('./auth'); + +module.exports = router; + +router.use('/auth', authRouter); \ No newline at end of file