public async Task <ResponseModel <UserModel> > VerifyContactAsync(Guid userId, ContactMethodType method, string userSubmittedVerificationCode) { var rs = await this.QueryUser(userId, IncludeOptions.Entities); if (rs.Code == ResponseCode.NoData) { return(ResponseModel <UserModel> .Error(ResponseCode.InvalidCredentials)); } if (rs.Code != ResponseCode.Ok) { return(ResponseModel <UserModel> .Error(rs.Code, rs.Message)); } UserComposite composite = rs.Data[0]; switch (method) { case ContactMethodType.Email: if (composite.User.EmailVerification == null) { break; } else if (composite.User.EmailVerification.ExpiresAt < DateTime.UtcNow) { return(ResponseModel <UserModel> .Error(ResponseCode.EmailVerificationCodeExpired)); } else if (composite.User.EmailVerification.Code != userSubmittedVerificationCode) { return(ResponseModel <UserModel> .Error(ResponseCode.InvalidEmailVerificationCode)); } else { composite.UserEntity.User.Verified(method); // update the entity // send it back to table storage with the updates var rsUpdate = await this.UpdateEntity <UserEntity>(composite.UserEntity); } break; default: break; } return(ResponseModel <UserModel> .Success(composite.UserEntity.User)); }
public async Task <ResponseModel <UserComposite> > QueryUser(Guid userId, IncludeOptions options = IncludeOptions.None) { TableQuery <UserEntity> query = new TableQuery <UserEntity>().Where(UserEntity.QueryKey(userId)); var rs = await QueryEntities <UserEntity>(query); if (rs.Code != ResponseCode.Ok) { return(ResponseModel <UserComposite> .Error(rs.Code, rs.Message)); } UserComposite c = new UserComposite(userId); c.User = rs.Data[0].User; if ((options & IncludeOptions.Entities) == IncludeOptions.Entities) { c.UserEntity = rs.Data[0]; } return(ResponseModel <UserComposite> .Success(c)); }