/// <summary> /// Generates a random token /// </summary> /// <returns></returns> public async Task <string> MakeOauthToken(DeltaConnection conn, ObjectId oauthApp, uint oauthScope) { //Generate a unique string string token = Tools.SecureStringTool.GenerateSecureString(62); while (await conn.AuthenticateUserToken(token) != null) { token = Tools.SecureStringTool.GenerateSecureString(62); } //Add some information. This is for future use token = "A." + token; //Now, create a token object DbToken t = new DbToken { created_utc = DateTime.UtcNow, token = token, user_id = _id, _id = MongoDB.Bson.ObjectId.GenerateNewId(), oauth_application = oauthApp, oauth_scope = oauthScope }; //Insert await conn.system_tokens.InsertOneAsync(t); //Return string return(token); }
/// <summary> /// Authenticates a user using their token /// </summary> /// <param name="conn"></param> /// <param name="token"></param> /// <returns></returns> public static async Task <DbUser> AuthenticateUserToken(DeltaDatabaseConnection conn, string token) { //First, get our token object DbToken tok = await conn.GetTokenByTokenAsync(token); if (tok == null) { return(null); } //Now, get our user var u = await conn.GetUserByIdAsync(tok.user_id); if (u == null) { return(null); } return(u); }