EnsureProjectUser add/update user info to project database.s
(db *gorp.DbMap, provider string, uid string, name string, email string, extra gin.H, enableSignUp bool, signUpState ProjectUserState)
| 204 | |
| 205 | // EnsureProjectUser add/update user info to project database.s |
| 206 | func EnsureProjectUser(db *gorp.DbMap, provider string, |
| 207 | uid string, name string, email string, extra gin.H, |
| 208 | enableSignUp bool, signUpState ProjectUserState) ( |
| 209 | u *ProjectUser, err error) { |
| 210 | |
| 211 | // find by uid |
| 212 | err = db.SelectOne(&u, |
| 213 | `SELECT * FROM "____user" WHERE "provider" = ? AND "provider_uid" = ? LIMIT 1`, |
| 214 | provider, uid) |
| 215 | exists := true |
| 216 | now := time.Now().Unix() |
| 217 | |
| 218 | if err != nil { |
| 219 | // find by provider and email or provider and name |
| 220 | switch provider { |
| 221 | case "weibo": |
| 222 | err = db.SelectOne(&u, |
| 223 | `SELECT * FROM "____user" WHERE "provider" = ? AND "name" = ? AND "state" = ? LIMIT 1`, |
| 224 | provider, name, ProjectUserStatePreRegistered) |
| 225 | default: |
| 226 | // google, facebook, twitter, etc. |
| 227 | err = db.SelectOne(&u, |
| 228 | `SELECT * FROM "____user" WHERE "provider" = ? AND "email" = ? AND "state" = ? LIMIT 1`, |
| 229 | provider, email, ProjectUserStatePreRegistered) |
| 230 | } |
| 231 | } |
| 232 | |
| 233 | if err != nil && !enableSignUp { |
| 234 | // new user, not even pre-registered |
| 235 | err = errors.New("user does not exists, sign up disabled") |
| 236 | return |
| 237 | } |
| 238 | |
| 239 | if err != nil { |
| 240 | u = &ProjectUser{ |
| 241 | Name: name, |
| 242 | Email: email, |
| 243 | State: signUpState, |
| 244 | Provider: provider, |
| 245 | ProviderUID: uid, |
| 246 | Extra: extra, |
| 247 | } |
| 248 | |
| 249 | exists = false |
| 250 | err = nil |
| 251 | } else { |
| 252 | if u.State == ProjectUserStateDisabled { |
| 253 | // disabled |
| 254 | err = errors.New("account is disabled") |
| 255 | return |
| 256 | } |
| 257 | |
| 258 | u.LastLogin = now |
| 259 | u.Name = name |
| 260 | u.Email = email |
| 261 | u.Extra = extra |
| 262 | } |
| 263 |
no test coverage detected