aboutsummaryrefslogtreecommitdiff
path: root/models/oauth2.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/oauth2.go')
-rw-r--r--models/oauth2.go70
1 files changed, 64 insertions, 6 deletions
diff --git a/models/oauth2.go b/models/oauth2.go
index 70dcd510..d1ae4611 100644
--- a/models/oauth2.go
+++ b/models/oauth2.go
@@ -1,18 +1,76 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
package models
-import "time"
+import (
+ "errors"
+)
// OT: Oauth2 Type
const (
OT_GITHUB = iota + 1
OT_GOOGLE
OT_TWITTER
+ OT_QQ
+ OT_WEIBO
+ OT_BITBUCKET
+ OT_OSCHINA
+ OT_FACEBOOK
+)
+
+var (
+ ErrOauth2RecordNotExist = errors.New("OAuth2 record does not exist")
+ ErrOauth2NotAssociated = errors.New("OAuth2 is not associated with user")
)
type Oauth2 struct {
- Uid int64 `xorm:"pk"` // userId
- Type int `xorm:"pk unique(oauth)"` // twitter,github,google...
- Identity string `xorm:"pk unique(oauth)"` // id..
- Token string `xorm:"VARCHAR(200) not null"`
- RefreshTime time.Time `xorm:"created"`
+ Id int64
+ Uid int64 `xorm:"unique(s)"` // userId
+ User *User `xorm:"-"`
+ Type int `xorm:"unique(s) unique(oauth)"` // twitter,github,google...
+ Identity string `xorm:"unique(s) unique(oauth)"` // id..
+ Token string `xorm:"TEXT not null"`
+}
+
+func BindUserOauth2(userId, oauthId int64) error {
+ _, err := orm.Id(oauthId).Update(&Oauth2{Uid: userId})
+ return err
+}
+
+func AddOauth2(oa *Oauth2) error {
+ _, err := orm.Insert(oa)
+ return err
+}
+
+func GetOauth2(identity string) (oa *Oauth2, err error) {
+ oa = &Oauth2{Identity: identity}
+ isExist, err := orm.Get(oa)
+ if err != nil {
+ return
+ } else if !isExist {
+ return nil, ErrOauth2RecordNotExist
+ } else if oa.Uid == -1 {
+ return oa, ErrOauth2NotAssociated
+ }
+ oa.User, err = GetUserById(oa.Uid)
+ return oa, err
+}
+
+func GetOauth2ById(id int64) (oa *Oauth2, err error) {
+ oa = new(Oauth2)
+ has, err := orm.Id(id).Get(oa)
+ if err != nil {
+ return nil, err
+ } else if !has {
+ return nil, ErrOauth2RecordNotExist
+ }
+ return oa, nil
+}
+
+// GetOauthByUserId returns list of oauthes that are releated to given user.
+func GetOauthByUserId(uid int64) (oas []*Oauth2, err error) {
+ err = orm.Find(&oas, Oauth2{Uid: uid})
+ return oas, err
}