Ejemplo n.º 1
0
func SendCaptcha(context context.Context, mobile string, typ CaptchaType) error {
	if !validation.IsMobile(mobile) {
		return errors.New("invalid mobile")
	}

	switch typ {
	case RegisterCaptcha:
		a, e := persistence.GetAccountByMobile(mobile)
		if e != nil {
			return ErrServer
		}

		if a != nil {
			return ErrDupMobile

		}
	case ResetPasswordCaptcha:
		a, e := persistence.GetAccountByMobile(mobile)

		if e != nil {
			return ErrServer
		}

		if a == nil {
			return ErrNotFound

		}
	default:
		return errors.New("invalid captcha type")
	}
	_cache.HSet("captcha", mobile[:6], mobile, time.Minute*5)
	return nil
}
Ejemplo n.º 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
}
Ejemplo n.º 3
0
func UpdateEmail(context context.Context, id types.ID, mobile string) (*Account, error) {
	loginID, _ := context.Value("login_id").(types.ID)
	if loginID <= 0 {
		return nil, ErrAuth
	}

	if !validation.IsMobile(mobile) {
		return nil, errors.New("invalid mobile")
	}

	if loginID != id {
		return nil, ErrForbidden
	}

	a, err := persistence.GetAccount(id)
	if err != nil {
		return nil, ErrServer
	}

	if a == nil {
		return nil, ErrNotFound
	}

	if a.Mobile == mobile {
		acc := &Account{}
		runtime.CopyFields(acc, a)
		return acc, nil
	}

	if persistence.IsDupMobile(mobile, a.ID) {
		return nil, ErrDupNick
	}

	a.Mobile = mobile
	err = persistence.UpdateAccount(a)
	if err != nil {
		return nil, ErrServer
	}

	acc := &Account{}
	runtime.CopyFields(acc, a)
	return acc, nil
}