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-08-10 04:25:02 +04:00
"time"
2014-04-11 21:01:30 +04:00
)
2014-04-10 22:20:58 +04:00
2014-06-21 08:51:41 +04:00
type OauthType int
2014-04-10 22:20:58 +04:00
const (
2014-06-21 08:51:41 +04:00
GITHUB OauthType = iota + 1
GOOGLE
TWITTER
QQ
WEIBO
BITBUCKET
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 {
2014-08-10 04:25:02 +04:00
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" `
Created time . Time ` xorm:"CREATED" `
Updated time . Time
HasRecentActivity bool ` xorm:"-" `
2014-04-10 22:20:58 +04:00
}
2014-04-11 21:01:30 +04:00
func BindUserOauth2 ( userId , oauthId int64 ) error {
2014-06-21 08:51:41 +04:00
_ , err := x . Id ( oauthId ) . Update ( & Oauth2 { Uid : userId } )
2014-04-11 21:01:30 +04:00
return err
}
2014-04-14 02:12:07 +04:00
func AddOauth2 ( oa * Oauth2 ) error {
2014-06-21 08:51:41 +04:00
_ , err := x . Insert ( oa )
2014-04-14 02:12:07 +04:00
return err
2014-04-10 22:20:58 +04:00
}
func GetOauth2 ( identity string ) ( oa * Oauth2 , err error ) {
oa = & Oauth2 { Identity : identity }
2014-06-21 08:51:41 +04:00
isExist , err := x . Get ( oa )
2014-04-10 22:20:58 +04:00
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
}
2015-08-08 17:43:14 +03:00
oa . User , err = GetUserByID ( oa . Uid )
2014-04-10 22:20:58 +04:00
return oa , err
}
2014-04-11 21:01:30 +04:00
func GetOauth2ById ( id int64 ) ( oa * Oauth2 , err error ) {
oa = new ( Oauth2 )
2014-06-21 08:51:41 +04:00
has , err := x . Id ( id ) . Get ( oa )
2014-04-11 21:01:30 +04:00
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
2014-08-10 04:25:02 +04:00
// UpdateOauth2 updates given OAuth2.
func UpdateOauth2 ( oa * Oauth2 ) error {
_ , err := x . Id ( oa . Id ) . AllCols ( ) . Update ( oa )
return err
}
2014-12-07 04:22:48 +03:00
// GetOauthByUserId returns list of oauthes that are related to given user.
2014-08-10 04:25:02 +04:00
func GetOauthByUserId ( uid int64 ) ( [ ] * Oauth2 , error ) {
socials := make ( [ ] * Oauth2 , 0 , 5 )
err := x . Find ( & socials , Oauth2 { Uid : uid } )
if err != nil {
return nil , err
}
for _ , social := range socials {
social . HasRecentActivity = social . Updated . Add ( 7 * 24 * time . Hour ) . After ( time . Now ( ) )
}
return socials , err
2014-04-14 05:00:12 +04:00
}
2014-05-06 00:21:43 +04:00
// DeleteOauth2ById deletes a oauth2 by ID.
func DeleteOauth2ById ( id int64 ) error {
2014-06-21 08:51:41 +04:00
_ , err := x . Delete ( & Oauth2 { Id : id } )
2014-05-06 00:21:43 +04:00
return err
}
2014-05-06 21:47:47 +04:00
// CleanUnbindOauth deletes all unbind OAuthes.
func CleanUnbindOauth ( ) error {
2014-06-21 08:51:41 +04:00
_ , err := x . Delete ( & Oauth2 { Uid : - 1 } )
2014-05-06 21:47:47 +04:00
return err
}