2014-04-10 22:20:58 +04:00
// 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
2014-04-11 21:01:30 +04:00
import (
"errors"
)
2014-04-10 22:20:58 +04:00
// OT: Oauth2 Type
const (
OT_GITHUB = iota + 1
OT_GOOGLE
OT_TWITTER
2014-04-12 21:15:19 +04:00
OT_QQ
2014-04-14 02:12:07 +04:00
OT_WEIBO
OT_BITBUCKET
OT_OSCHINA
OT_FACEBOOK
2014-04-10 22:20:58 +04:00
)
var (
2014-04-14 02:12:07 +04:00
ErrOauth2RecordNotExist = errors . New ( "OAuth2 record does not exist" )
ErrOauth2NotAssociated = errors . New ( "OAuth2 is not associated with user" )
2014-04-10 22:20:58 +04:00
)
type Oauth2 struct {
Id int64
2014-04-11 21:01:30 +04:00
Uid int64 ` xorm:"unique(s)" ` // userId
2014-04-10 22:20:58 +04:00
User * User ` xorm:"-" `
2014-04-11 21:01:30 +04:00
Type int ` xorm:"unique(s) unique(oauth)" ` // twitter,github,google...
Identity string ` xorm:"unique(s) unique(oauth)" ` // id..
2014-04-12 19:19:17 +04:00
Token string ` xorm:"TEXT not null" `
2014-04-10 22:20:58 +04:00
}
2014-04-11 21:01:30 +04:00
func BindUserOauth2 ( userId , oauthId int64 ) error {
_ , err := orm . Id ( oauthId ) . Update ( & Oauth2 { Uid : userId } )
return err
}
2014-04-14 02:12:07 +04:00
func AddOauth2 ( oa * Oauth2 ) error {
_ , err := orm . Insert ( oa )
return err
2014-04-10 22:20:58 +04:00
}
func GetOauth2 ( identity string ) ( oa * Oauth2 , err error ) {
oa = & Oauth2 { Identity : identity }
isExist , err := orm . Get ( oa )
if err != nil {
return
} else if ! isExist {
2014-04-14 02:12:07 +04:00
return nil , ErrOauth2RecordNotExist
2014-04-12 19:19:17 +04:00
} else if oa . Uid == - 1 {
2014-04-14 02:12:07 +04:00
return oa , ErrOauth2NotAssociated
2014-04-10 22:20:58 +04:00
}
oa . User , err = GetUserById ( oa . Uid )
return oa , err
}
2014-04-11 21:01:30 +04:00
func GetOauth2ById ( id int64 ) ( oa * Oauth2 , err error ) {
oa = new ( Oauth2 )
has , err := orm . Id ( id ) . Get ( oa )
if err != nil {
return nil , err
2014-04-14 02:12:07 +04:00
} else if ! has {
return nil , ErrOauth2RecordNotExist
2014-04-11 21:01:30 +04:00
}
return oa , nil
}
2014-04-14 05:00:12 +04:00
// 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
}
2014-05-06 00:21:43 +04:00
// DeleteOauth2ById deletes a oauth2 by ID.
func DeleteOauth2ById ( id int64 ) error {
_ , err := orm . Delete ( & Oauth2 { Id : id } )
return err
}
2014-05-06 21:47:47 +04:00
// CleanUnbindOauth deletes all unbind OAuthes.
func CleanUnbindOauth ( ) error {
_ , err := orm . Delete ( & Oauth2 { Uid : - 1 } )
return err
}