From 038ea790f76243b7e08119438bed24a37d452cb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Guillot?= Date: Fri, 29 Dec 2017 14:38:43 -0800 Subject: [PATCH] Make sure people don't create duplicate Fever usernames --- locale/translations.go | 7 ++++--- locale/translations/fr_FR.json | 3 ++- server/ui/controller/integrations.go | 6 ++++++ storage/integration.go | 16 +++++++++++++++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/locale/translations.go b/locale/translations.go index 749e964a..e32f7544 100644 --- a/locale/translations.go +++ b/locale/translations.go @@ -1,5 +1,5 @@ // Code generated by go generate; DO NOT EDIT. -// 2017-12-29 14:12:55.369940267 -0800 PST m=+0.042539315 +// 2017-12-29 14:34:59.486421907 -0800 PST m=+0.007402806 package locale @@ -210,12 +210,13 @@ var translations = map[string]string{ "Toggle bookmark": "Ajouter/Enlever favoris", "Close modal dialog": "Fermer la boite de dialogue", "Save article": "Sauvegarder l'article", - "There is already someone associated with this provider!": "Il y a déjà quelqu'un d'associé avec ce provider !" + "There is already someone associated with this provider!": "Il y a déjà quelqu'un d'associé avec ce provider !", + "There is already someone else with the same Fever username!": "Il y a déjà quelqu'un d'autre avec le même nom d'utilisateur Fever !" } `, } var translationsChecksums = map[string]string{ "en_US": "6fe95384260941e8a5a3c695a655a932e0a8a6a572c1e45cb2b1ae8baa01b897", - "fr_FR": "710be25933b58ab1449ec8797696cf937d4854fa0e9db555e2ef8fadd09b4382", + "fr_FR": "3d8c0e211eb96ab28e2fd8fced718b6348a63ea824e54d0729a56e4e3f26ba64", } diff --git a/locale/translations/fr_FR.json b/locale/translations/fr_FR.json index f0086d0c..28ebe281 100644 --- a/locale/translations/fr_FR.json +++ b/locale/translations/fr_FR.json @@ -194,5 +194,6 @@ "Toggle bookmark": "Ajouter/Enlever favoris", "Close modal dialog": "Fermer la boite de dialogue", "Save article": "Sauvegarder l'article", - "There is already someone associated with this provider!": "Il y a déjà quelqu'un d'associé avec ce provider !" + "There is already someone associated with this provider!": "Il y a déjà quelqu'un d'associé avec ce provider !", + "There is already someone else with the same Fever username!": "Il y a déjà quelqu'un d'autre avec le même nom d'utilisateur Fever !" } diff --git a/server/ui/controller/integrations.go b/server/ui/controller/integrations.go index 99971b07..9ff4baa4 100644 --- a/server/ui/controller/integrations.go +++ b/server/ui/controller/integrations.go @@ -62,6 +62,12 @@ func (c *Controller) UpdateIntegration(ctx *core.Context, request *core.Request, integrationForm := form.NewIntegrationForm(request.Request()) integrationForm.Merge(integration) + if integration.FeverUsername != "" && c.store.HasDuplicateFeverUsername(user.ID, integration.FeverUsername) { + ctx.SetFlashErrorMessage(ctx.Translate("There is already someone else with the same Fever username!")) + response.Redirect(ctx.Route("integrations")) + return + } + if integration.FeverEnabled { integration.FeverToken = fmt.Sprintf("%x", md5.Sum([]byte(integration.FeverUsername+":"+integration.FeverPassword))) } else { diff --git a/storage/integration.go b/storage/integration.go index 779ca817..aacb5209 100644 --- a/storage/integration.go +++ b/storage/integration.go @@ -11,11 +11,25 @@ import ( "github.com/miniflux/miniflux/model" ) +// HasDuplicateFeverUsername checks if another user have the same fever username. +func (s *Storage) HasDuplicateFeverUsername(userID int64, feverUsername string) bool { + query := ` + SELECT + count(*) as c + FROM integrations + WHERE user_id != $1 AND fever_username=$2 + ` + + var result int + s.db.QueryRow(query, userID, feverUsername).Scan(&result) + return result >= 1 +} + // UserByFeverToken returns a user by using the Fever API token. func (s *Storage) UserByFeverToken(token string) (*model.User, error) { query := ` SELECT - users.id, users.is_admin, users.timezone + users.id, users.is_admin, users.timezone FROM users LEFT JOIN integrations ON integrations.user_id=users.id WHERE integrations.fever_enabled='t' AND integrations.fever_token=$1