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 }
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 }