// CreateUser inserts User object into a database, updates creation time and assigns UID func (u UsersObjMapper) Create(user *types.User, scheme, secret string, private interface{}) (*types.User, error) { if scheme == "basic" { if splitAt := strings.Index(secret, ":"); splitAt > 0 { user.InitTimes() user.Username = secret[:splitAt] var err error user.Passhash, err = bcrypt.GenerateFromPassword([]byte(secret[splitAt+1:]), bcrypt.DefaultCost) if err != nil { return nil, err } // TODO(gene): maybe have some additional handling of duplicate user name error err, _ = adaptr.UserCreate(user) user.Passhash = nil if err != nil { return nil, err } // Create user's subscription to !me. The !me topic is ephemeral, the topic object need not to be inserted. err = Subs.Create(&types.Subscription{ ObjHeader: types.ObjHeader{CreatedAt: user.CreatedAt}, User: user.Id, Topic: user.Uid().UserId(), ModeWant: types.ModeSelf, ModeGiven: types.ModeSelf, Private: private, }) if err != nil { return nil, err } return user, nil } else { return nil, errors.New("store: invalid format of secret") } } return nil, errors.New("store: unknown authentication scheme '" + scheme + "'") }