Exemple #1
0
func OpenLogin(c context.Context, oa *OpenAccount) (*LoginResult, error) {
	switch {
	case len(oa.Name) == 0:
		return nil, errors.New("invalid name")
	case len(oa.OpenID) == 0:
		return nil, errors.New("no open_id")
	case len(oa.AccessToken) == 0:
		return nil, errors.New("no access_token")
	case len(oa.RefreshToken) == 0:
		return nil, errors.New("no refresh_token")
	case oa.ExpiredAt < time.Now().Unix():
		return nil, errors.New("invalid expired_at")
	}

	openID := fmt.Sprint(oa.Type) + "--" + oa.OpenID
	a, err := persistence.GetAccountByOpenID(openID)
	if err != nil {
		return nil, ErrServer
	}

	if a != nil {
		rs := &LoginResult{}
		rs.Account = &Account{}
		runtime.CopyFields(rs.Account, a)
		rs.LoginToken = a.LoginToken
		rs.Sid = GenerateSessionID(a.ID)
		return rs, nil
	}

	nick := oa.Name
	for i := 1; persistence.IsDupNick(nick, 0); i++ {
		nick = oa.Name + fmt.Sprint(i)
	}

	a = &persistence.Account{}
	a.ID = types.NewID()
	a.Nick = nick
	a.Avatar = oa.Avatar
	a.Gender = oa.Gender
	a.OpenID = openID
	a.Password = crypt.SHA1(oa.AccessToken + fmt.Sprint(a.ID))
	a.LoginToken = GenerateLoginToken(a.ID)
	err = persistence.InsertAccount(a)
	if err != nil {
		return nil, ErrServer
	}

	poa := &persistence.OpenAccount{}
	runtime.CopyFields(poa, oa)
	persistence.InsertOpenAccount(poa)

	rs := &LoginResult{}
	rs.Account = &Account{}
	runtime.CopyFields(rs.Account, a)
	rs.LoginToken = a.LoginToken
	rs.Sid = GenerateSessionID(a.ID)
	return rs, nil
}
Exemple #2
0
func MobileRegister(c context.Context, regInfo *MobileRegInfo) (*LoginResult, error) {
	var e error
	switch {
	case !validation.IsMobile(regInfo.Mobile):
		e = errors.New("invalid mobile")
	case !checkCaptcha(c, regInfo.Mobile, regInfo.Captcha):
		e = errors.New("invalid captcha")
	case persistence.IsDupMobile(regInfo.Mobile, 0):
		e = ErrDupMobile
	case len(regInfo.Nick) < 2:
		e = errors.New("invalid nick")
	case persistence.IsDupNick(regInfo.Nick, 0):
		e = ErrDupNick
	case len(regInfo.Birthdate) > 0 && !validation.IsBirthdate(regInfo.Birthdate):
		e = errors.New("invalid birthdate")
	case len(regInfo.Password) == 0:
		e = errors.New("no password")
	}

	if e != nil {
		log.Error(e)
		return nil, e
	}

	a := &persistence.Account{}
	a.ID = types.NewID()
	a.Nick = regInfo.Nick
	a.Mobile = regInfo.Mobile
	a.Password = crypt.SHA1(regInfo.Password + fmt.Sprint(a.ID))
	a.Birthdate = regInfo.Birthdate
	a.Gender = regInfo.Gender
	a.Avatar = regInfo.Avatar
	a.LoginToken = crypt.SHA1(a.Password + fmt.Sprint(a.ID))
	e = persistence.InsertAccount(a)
	if e != nil {
		log.Error(e)
		return nil, ErrServer
	}

	rs := &LoginResult{}
	rs.Account = &Account{}
	runtime.CopyFields(rs.Account, a)
	rs.LoginToken = a.LoginToken
	rs.Sid = GenerateSessionID(a.ID)
	return rs, nil
}