Kaynağa Gözat

Make sure people don't create duplicate Fever usernames

Frédéric Guillot 8 yıl önce
ebeveyn
işleme
038ea790f7

+ 4 - 3
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",
 }

+ 2 - 1
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 !"
 }

+ 6 - 0
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 {

+ 15 - 1
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