From d033819441ddb39fbb087b3208d8cfb0bd0c50e3 Mon Sep 17 00:00:00 2001 From: eduveks Date: Thu, 17 Jun 2021 18:13:31 +0000 Subject: [PATCH] =?UTF-8?q?Login,=20=C3=A1rea=20reservada,=20e=20dados=20d?= =?UTF-8?q?o=20utilizador=20logado.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbs/social_interno.mv.db | Bin 53248 -> 65536 bytes server/services/public/communities/get.js | 17 ++++++ server/services/public/communities/options.js | 1 + server/services/public/info/get.js | 14 +++++ server/services/public/info/options.js | 1 + website/package.json | 1 + website/src/App.js | 56 ++++++++++++++---- website/src/pages/Communities/index.js | 37 ++++++++++++ website/src/pages/Login/index.js | 11 ++++ website/src/pages/Logout/index.js | 24 ++++++++ website/src/pages/Main/index.js | 36 +++++++++++ 11 files changed, 186 insertions(+), 12 deletions(-) create mode 100644 server/services/public/communities/get.js create mode 100644 server/services/public/communities/options.js create mode 100644 server/services/public/info/get.js create mode 100644 server/services/public/info/options.js create mode 100644 website/src/pages/Communities/index.js create mode 100644 website/src/pages/Logout/index.js create mode 100644 website/src/pages/Main/index.js diff --git a/dbs/social_interno.mv.db b/dbs/social_interno.mv.db index 708268ac30241bf3f89285684e450288679a7216..f5a4cd6ee5c3627041c9f5b29d0425d05791ab54 100644 GIT binary patch delta 12568 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 AtN;K2 delta 2861 zcmc&$U2GIp6rP>gp=E7Lw@CSEyWOr3VqMJ4?EKtWODQ~HtwCyAAfO4ExibR|rNyPx zVl*w~!9PHjTUx5nA4s);nw9}eBLNdC5q&_=Cou*J#`uB|q7RCRcW1YqyFpCkh5K^m z+;i`lbI*6bb8dUPx4oZPP#G1%dP5W36xEZmw*ECU%5xkSh8wpvZiLhIrVcP++a3F)o??7i@8E;jcN+u9Hm;@ zU~Y{@yS;^vWiz|)iuTXteUEv{QOS~G6sXEUC#(FK zey_JO7|iZR@ul<8?G-+Buj*C$!gPDv^PVhve39L{CYYB;wG8d_W>7VCtJzG}$7Zp4 z=t{jl6Ng%Ryo}ADax&=#&wE~m%|v%Lsk2i@qA1^611F|sP}MKi)Yh$9WAA8a^-aT@ zBBw?W+sV_XR@$Jm%tMdnqL%$7^yp&LgT-*zKC}N)27T@mwENH?eKv%|-c`)mnR`)n z-#jlhc(w{1>pep6Sc6vf718b0c4Oam58Xb3e(f(RXg@HMq5O0S@25k8pMFBbze|kb zo!e2#KoPyuLKRqa%(d4KEb-7C(@_6mtp0+|9WG)z#t)(|4i_>VgNLx3=gk6p2JONl za#ko_)$8|Szd`Ibi2Vj5etN!?bWKsm<9)@bczB48b0{!;l-_Hii&&su)I2i8w8pR5 zKb&l#>CRGAGYaU=WoXyvKDv7j3Z4c`w?{{wv3$1sn+e}^6dYcNZlBI!x<7@<+0Smc zvvk)>`^ILoUE0m5xooDZ>rGTU*2(n5UcozNdFS@5jio*+wkAHxT6>mLZ1Oe*#K)am zQ@kkOk-^xWq`Xq?$dX82QjXUJo|=^(2%+oWmKEH5zlI7>K8Jr#<2%c{p9oz38twT! z(~oDY&2V&qh^YDqRYF4 zUyc(1aCs+3OwJ(vO7>q988p6(Z2p09H1PW^TGH+KA7c!|%MvO-zme9yvxm;V;i2Kj z_QEfBc<2qk*~cz?N~TtdsA+K+261BE`QYDc{t)!Y9scNzTsF7G5yDykgN_I7}^APP* zR%8K+A{x20dVQj?PIll#6XercojA!mnBtu<#XHTRT{`b@zf0#c!2furBGKepub*(r z(mMRTywfQ=|EDZ1F1WEbtt!cGRZ@_8`SK&_<}FjzN|`=c4>=T{2rW%L6%zSNz7*WV zVeTeITER*rF72V9I0ehT_x-y*jHn9{fhhSP(l}Ev6*+~dnu-NF&zc7yYTOr?_Aiw* z5tv0*Qk6i|P9j?IFo<5mh<@-OM8P9N)a^eYbCMScKr0DAoksMqguuA&%EFMk7!i=F P1W9#45G*A@pq2jslWI_z diff --git a/server/services/public/communities/get.js b/server/services/public/communities/get.js new file mode 100644 index 0000000..1ce6740 --- /dev/null +++ b/server/services/public/communities/get.js @@ -0,0 +1,17 @@ + +const dbComunidades = _db.query(` + SELECT * FROM comunidade +`) + +const data = _val.list() + +for (const dbComunidade of dbComunidades) { + data.add( + _val.map() + .set("uid", dbComunidade.getString("uid")) + .set("name", dbComunidade.getString("nome")) + .set("description", dbComunidade.getString("descricao")) + ) +} + +_out.json(data) diff --git a/server/services/public/communities/options.js b/server/services/public/communities/options.js new file mode 100644 index 0000000..f731105 --- /dev/null +++ b/server/services/public/communities/options.js @@ -0,0 +1 @@ +_out.json(_val.map().set("result", true)) \ No newline at end of file diff --git a/server/services/public/info/get.js b/server/services/public/info/get.js new file mode 100644 index 0000000..7c62ccf --- /dev/null +++ b/server/services/public/info/get.js @@ -0,0 +1,14 @@ + +const dbPessoa = _db.queryFirst(` + SELECT pessoa.*, cidade.nome "cidade" + FROM pessoa INNER JOIN cidade ON pessoa.cidade_id = cidade.id + WHERE utilizador_id = ? +`, _user.id()) + +_out.json( + _val.map() + .set("name", dbPessoa.getString('nome')) + .set("surname", dbPessoa.getString('apelido')) + .set("email", dbPessoa.getString('email')) + .set("cidade", dbPessoa.getString('cidade')) +) diff --git a/server/services/public/info/options.js b/server/services/public/info/options.js new file mode 100644 index 0000000..f731105 --- /dev/null +++ b/server/services/public/info/options.js @@ -0,0 +1 @@ +_out.json(_val.map().set("result", true)) \ No newline at end of file diff --git a/website/package.json b/website/package.json index 3c0a7e6..ffe7509 100644 --- a/website/package.json +++ b/website/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { + "@netuno/auth-client": "^1.0.4", "@netuno/service-client": "^1.0.8", "@testing-library/jest-dom": "^5.12.0", "@testing-library/react": "^11.2.7", diff --git a/website/src/App.js b/website/src/App.js index d73dccc..bcdd921 100644 --- a/website/src/App.js +++ b/website/src/App.js @@ -11,6 +11,11 @@ import Home from './pages/Home'; import Info from './pages/Info'; import Register from './pages/Register'; import Login from './pages/Login'; +import Main from './pages/Main'; +import Communities from './pages/Communities'; +import Logout from './pages/Logout'; + +import _auth from '@netuno/auth-client'; import './App.less'; @@ -19,23 +24,41 @@ const { Header, Footer, Content } = Layout; const { SubMenu } = Menu; function App() { + let menuItems = null; + if (_auth.isLogged()) { + menuItems = <> + + Principal + + + Comunidades + + + Sair + + ; + } else { + menuItems = <> + + Home + + + Info + + + Registo + + + Login + + ; + } return (
- - Home - - - Info - - - Registo - - - Login - + {menuItems}
@@ -49,6 +72,15 @@ function App() { + +
+ + + + + + + diff --git a/website/src/pages/Communities/index.js b/website/src/pages/Communities/index.js new file mode 100644 index 0000000..4b1e226 --- /dev/null +++ b/website/src/pages/Communities/index.js @@ -0,0 +1,37 @@ +import React, { useState, useEffect } from 'react'; + +import { Redirect } from "react-router-dom"; + +import _auth from '@netuno/auth-client'; + +import _service from '@netuno/service-client'; + +export default ()=> { + if (!_auth.isLogged()) { + return ; + } + const [ data, setData ] = useState([]); + useEffect(() => { + _service({ + url: 'public/communities', + success: (response) => { + setData(response.json); + }, + fail: (e) => { + console.error('Service Communities Error', e); + } + }); + }, []); + return ( +
+

Comunidades

+
+
    + { data.map((community)=> ( +
  • {community.name}
  • + ))} +
+
+
+ ); +}; \ No newline at end of file diff --git a/website/src/pages/Login/index.js b/website/src/pages/Login/index.js index 042e37a..4a8507b 100644 --- a/website/src/pages/Login/index.js +++ b/website/src/pages/Login/index.js @@ -2,6 +2,8 @@ import React from 'react'; import { Form, Input, Button, Checkbox } from 'antd'; +import _auth from '@netuno/auth-client'; + const layout = { labelCol: { span: 8 }, wrapperCol: { span: 16 }, @@ -13,6 +15,15 @@ const tailLayout = { export default ()=> { const onFinish = (values) => { console.log('Success:', values); + _auth.login({ + ...values, + success: ()=> { + window.location = '/main'; + }, + fail: ()=> { + alert("Fail."); + } + }); }; const onFinishFailed = (errorInfo) => { diff --git a/website/src/pages/Logout/index.js b/website/src/pages/Logout/index.js new file mode 100644 index 0000000..da770af --- /dev/null +++ b/website/src/pages/Logout/index.js @@ -0,0 +1,24 @@ +import React from 'react'; + +import { Redirect } from "react-router-dom"; + +import _auth from '@netuno/auth-client'; + +import { Button } from 'antd'; + +export default ()=> { + if (!_auth.isLogged()) { + return ; + } + const onLogout = () => { + _auth.logout(); + window.location = '/'; + } + return ( +
+

Sair

+

Para confirmar que deseja terminar a sessão clique no botão abaixo.

+ +
+ ); +}; \ No newline at end of file diff --git a/website/src/pages/Main/index.js b/website/src/pages/Main/index.js new file mode 100644 index 0000000..c6ccea5 --- /dev/null +++ b/website/src/pages/Main/index.js @@ -0,0 +1,36 @@ +import React, { useState, useEffect } from 'react'; + +import { Redirect } from "react-router-dom"; + +import _auth from '@netuno/auth-client'; + +import _service from '@netuno/service-client'; + +import { Spin } from 'antd'; + +export default ()=> { + if (!_auth.isLogged()) { + return ; + } + const [ userInfo, setUserInfo ] = useState(null); + useEffect(() => { + _service({ + url: 'public/info', + success: (response) => { + setUserInfo(response.json); + }, + fail: (e) => { + console.error('Service Info Error', e); + } + }); + }, []); + if (userInfo == null) { + return ; + } + return ( +
+

Principal

+ Olá {userInfo.name} +
+ ); +}; \ No newline at end of file