aboutsummaryrefslogtreecommitdiffhomepage
path: root/storage
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2017-11-24 16:09:10 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2017-11-24 16:09:10 -0800
commit747da03e4cf1478937a434792fdb52dd10ae8cda (patch)
treedd48b0b4bd2d071b23d4698aeecc81b1233ee12a /storage
parentcc6d272eb7719bcca02c7f36a1badbeecb153759 (diff)
Improve OAuth2 integration
Diffstat (limited to 'storage')
-rw-r--r--storage/user.go30
1 files changed, 28 insertions, 2 deletions
diff --git a/storage/user.go b/storage/user.go
index caffc3b..3b905a5 100644
--- a/storage/user.go
+++ b/storage/user.go
@@ -74,6 +74,24 @@ func (s *Storage) CreateUser(user *model.User) (err error) {
return nil
}
+func (s *Storage) UpdateExtraField(userID int64, field, value string) error {
+ query := fmt.Sprintf(`UPDATE users SET extra = hstore('%s', $1) WHERE id=$2`, field)
+ _, err := s.db.Exec(query, value, userID)
+ if err != nil {
+ return fmt.Errorf("unable to update user extra field: %v", err)
+ }
+ return nil
+}
+
+func (s *Storage) RemoveExtraField(userID int64, field string) error {
+ query := `UPDATE users SET extra = delete(extra, $1) WHERE id=$2`
+ _, err := s.db.Exec(query, field, userID)
+ if err != nil {
+ return fmt.Errorf("unable to remove user extra field: %v", err)
+ }
+ return nil
+}
+
func (s *Storage) UpdateUser(user *model.User) error {
defer helper.ExecutionTime(time.Now(), fmt.Sprintf("[Storage:UpdateUser] username=%s", user.Username))
user.Username = strings.ToLower(user.Username)
@@ -104,14 +122,22 @@ func (s *Storage) GetUserById(userID int64) (*model.User, error) {
defer helper.ExecutionTime(time.Now(), fmt.Sprintf("[Storage:GetUserById] userID=%d", userID))
var user model.User
- row := s.db.QueryRow("SELECT id, username, is_admin, theme, language, timezone FROM users WHERE id = $1", userID)
- err := row.Scan(&user.ID, &user.Username, &user.IsAdmin, &user.Theme, &user.Language, &user.Timezone)
+ var extra hstore.Hstore
+ row := s.db.QueryRow("SELECT id, username, is_admin, theme, language, timezone, extra FROM users WHERE id = $1", userID)
+ err := row.Scan(&user.ID, &user.Username, &user.IsAdmin, &user.Theme, &user.Language, &user.Timezone, &extra)
if err == sql.ErrNoRows {
return nil, nil
} else if err != nil {
return nil, fmt.Errorf("unable to fetch user: %v", err)
}
+ user.Extra = make(map[string]string)
+ for key, value := range extra.Map {
+ if value.Valid {
+ user.Extra[key] = value.String
+ }
+ }
+
return &user, nil
}