From 40ff43bdb387c108a61f0528bd1fd668c7c20753 Mon Sep 17 00:00:00 2001 From: Pomog Date: Thu, 4 Jan 2024 21:06:02 +0200 Subject: [PATCH] comment --- internal/handler/loginHandler.go | 19 ++++++++++++++++-- internal/handler/staticHelperHendlers.go | 7 +++++++ internal/repository/dbrepo/sqllite.go | 17 ++++++++++++++++ internal/repository/repository.go | 1 + internal/repository/sql.go | 2 +- mainDB.db | Bin 327680 -> 327680 bytes static/ava/fp.png | Bin 0 -> 5858 bytes ...0\276\321\202\321\217\321\200\320\260.png" | Bin 0 -> 1176 bytes static/post_images/fp.png | Bin 0 -> 5858 bytes template/main.layout.html | 6 +++--- template/register.page.html | 2 +- template/theme.page.html | 2 +- 12 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 static/ava/fp.png create mode 100644 "static/ava/\320\222\320\260\321\200\320\273\320\276\320\272 \320\232\320\276\321\202\321\217\321\200\320\260.png" create mode 100644 static/post_images/fp.png diff --git a/internal/handler/loginHandler.go b/internal/handler/loginHandler.go index 1d089bf..6c5a77d 100644 --- a/internal/handler/loginHandler.go +++ b/internal/handler/loginHandler.go @@ -13,6 +13,20 @@ import ( // LoginHandler handles both GET and POST requests for the login page. func (m *Repository) LoginHandler(w http.ResponseWriter, r *http.Request) { + userIDstring := r.URL.Query().Get("id") + if userIDstring != "" { + userID, err := strconv.Atoi(userIDstring) + if err != nil { + setErrorAndRedirect(w, r, "wrong URL", "/error-page") + return + } + err = m.DB.DelSessionByUserID(userID) + if err != nil { + setErrorAndRedirect(w, r, err.Error(), "/error-page") + return + } + } + if r.Method == http.MethodGet { var emptyLogin models.User data := make(map[string]interface{}) @@ -62,8 +76,9 @@ func (m *Repository) LoginHandler(w http.ResponseWriter, r *http.Request) { } cookie := &http.Cookie{ - Name: strconv.Itoa(userID), - Value: m.App.UserLogin.String(), + Name: strconv.Itoa(userID), + Value: m.App.UserLogin.String(), + HttpOnly: true, } http.SetCookie(w, cookie) diff --git a/internal/handler/staticHelperHendlers.go b/internal/handler/staticHelperHendlers.go index 8cab6dc..074026b 100644 --- a/internal/handler/staticHelperHendlers.go +++ b/internal/handler/staticHelperHendlers.go @@ -88,6 +88,12 @@ func (m *Repository) PrivatPolicyHandler(w http.ResponseWriter, r *http.Request) // PersonaCabinetHandler hanles the personal cabinet of selected user. func (m *Repository) PersonaCabinetHandler(w http.ResponseWriter, r *http.Request) { + sessionUserID := m.GetLoggedUser(w, r) + if sessionUserID == 0 { + setErrorAndRedirect(w, r, "unautorized", "/error-page") + return + } + if r.Method == http.MethodGet { userID, _ := strconv.Atoi(r.URL.Query().Get("userID")) var personalInfo models.User @@ -108,6 +114,7 @@ func (m *Repository) PersonaCabinetHandler(w http.ResponseWriter, r *http.Reques data := make(map[string]interface{}) data["personal"] = personalInfo data["totalPosts"] = totalPosts + data["loggedAsID"] = sessionUserID renderer.RendererTemplate(w, "personal.page.html", &models.TemplateData{ Data: data, diff --git a/internal/repository/dbrepo/sqllite.go b/internal/repository/dbrepo/sqllite.go index 998d78e..1a4a9ce 100644 --- a/internal/repository/dbrepo/sqllite.go +++ b/internal/repository/dbrepo/sqllite.go @@ -708,3 +708,20 @@ func (m *SqliteBDRepo) EditUserType(user models.User) error { } return nil } + +func (m *SqliteBDRepo) DelSessionByUserID(userID int) error { + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) + defer cancel() + + stmt := `delete from sessionId + where userID = $1 + ` + _, err := m.DB.ExecContext(ctx, stmt, + userID, + ) + + if err != nil { + return err + } + return nil +} diff --git a/internal/repository/repository.go b/internal/repository/repository.go index 969f299..326768b 100644 --- a/internal/repository/repository.go +++ b/internal/repository/repository.go @@ -31,4 +31,5 @@ type DatabaseInt interface { GetAllPostsByUserID(userID int) ([]models.Post, error) GetAllLikedPostsByUserID(userID int) ([]models.Post, error) EditUserType(user models.User) error + DelSessionByUserID(userID int) error } diff --git a/internal/repository/sql.go b/internal/repository/sql.go index 187ac1a..007871f 100644 --- a/internal/repository/sql.go +++ b/internal/repository/sql.go @@ -61,7 +61,7 @@ var addClassificationToThread = `ALTER TABLE thread ADD COLUMN classification VARCHAR(50) DEFAULT '';` var addUserType = `ALTER TABLE users -ADD COLUMN type VARCHAR(50) DEFAULT '';` +ADD COLUMN type VARCHAR(50) DEFAULT 'user';` func getQuerys() []string { var sqlQuerys []string diff --git a/mainDB.db b/mainDB.db index 34d2ade93a6620952573bcf4dff2ab3d81d9137d..2a02da641e3780fbc54f332a3d95bc561d8c8b9d 100644 GIT binary patch delta 1864 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 literal 0 HcmV?d00001 diff --git "a/static/ava/\320\222\320\260\321\200\320\273\320\276\320\272 \320\232\320\276\321\202\321\217\321\200\320\260.png" "b/static/ava/\320\222\320\260\321\200\320\273\320\276\320\272 \320\232\320\276\321\202\321\217\321\200\320\260.png" new file mode 100644 index 0000000000000000000000000000000000000000..22165b17771171027fae7f71221258e11329aa45 GIT binary patch literal 1176 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1SE5RJ;(=A%*9TgAsieWw;%dH0CL%qyxm=Z zbSFdgg#zOv3=AxGo-U3d6?5LsiS`f)lsJBVX5q2DTb6EHceQKQ^hxW)M3>%lRjoZy z)v-vUV?n!ueAj}e6G}}SRj)N)Eo|R(+Bvc9?%5MYi&jt6y)|vSXi4n)l{;U*`L8Z)O^Q_|1j1}yxj0+SPL|7V{7y<+sxR@Lq z88kQ;$PrYU;rq%uAZJQLVVAwZ5*~iduJnQhJGVctt$w}pdgxo`zd1r}EprtD7bvmn zMFgsB(um^NDCJw6yr$Aq^S4pho)S~pb$j9;=Os@rmf53k*ex^D-g<4(@q3TXe4WLT zP|n)x%=tszjMYnXq44jEY>zjFzE*LxiTi5t=VG0+v14>zy!PK;sY&+Mc81n=nLmB1 zm)TxSGh+X}NkcAX-p?f$BX9nho9OeF#rN3fX~&-H_O=Lg>%`yPvDU!Uw&H}&$>p1h zuTP0dn%RE8I$-|w-7l|AJXMsk*thWJy{Oz&s8hq_}|3h^?6c|o=8sJ_Uih7 zZ$iE?nnWk@^+$8EILR%VGDB%e#N?Ygy>BZyN|TyVkO@6>rbtBTWinS*J}SjBSwGYqgCoZ&GoOZerE@as+n7* zBhns32`DbP_Si0@@cr`-H~NlmlKd9?S&^E{uo|7}MZ0nmcdT5&?5Mu!n*OH0WvqL%a?{M_?lxcj*kbP7@`A`|zgqXE z7d-fLJ1dRRLUhXH2{AKf&6_=AlfpH#ch7mk?dpGAyL?oqGp)&sYrAimhY+i$fV14L z*CjG5H29-e2xO?8Q1Sdc3 z_8Xb3`SN?uI{Ce&b7fVxnx^`-hb3zKbG<(Q;=$qx+o+WH>KGSn<=tV&S*{E$Qy4s5 L{an^LB{Ts5oQL>K literal 0 HcmV?d00001 diff --git a/static/post_images/fp.png b/static/post_images/fp.png new file mode 100644 index 0000000000000000000000000000000000000000..9b7c48829e8b91e7f68a3d40fb172297074ea8f8 GIT binary patch literal 5858 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 literal 0 HcmV?d00001 diff --git a/template/main.layout.html b/template/main.layout.html index a6b4aca..3a0be80 100644 --- a/template/main.layout.html +++ b/template/main.layout.html @@ -18,7 +18,7 @@