internal static void AddDebugPurposeUserToken() { var token = UserToken.GenerateNew("meet", new string[] { "admin", "users" }, new Claim[] { new Claim("poi-categories", "") }, TimeSpan.FromMinutes(60), "web", "test"); _userCache.Add(new CacheItem("meet", token), new CacheItemPolicy() { SlidingExpiration = token.SlidingExpiration }); }
public static void AddDebugPurposeUserToken2(string Token, string[] Roles, Claim[] Claims, TimeSpan Expire, string DbName) { var token = UserToken.GenerateNew(Token, Roles, Claims, Expire, "web", DbName); _userCache.Add(new CacheItem(Token, token), new CacheItemPolicy() { SlidingExpiration = token.SlidingExpiration }); }
/// <summary> /// Kullanıcının login olup yeni bir token üretmesini sağlar. /// </summary> /// <param name="info"></param> /// <returns></returns> public static async Task <LoginOutput> Login(LoginInput info) { // Get users collection var users = App.MeetAppUsers; // Query user var filter = Builders <BsonDocument> .Filter.Eq("usr", info.usr); var user = await users.Find(filter).FirstOrDefaultAsync(); // Kullanıcı bulunamadı if (user == null) { return(LoginOutput.UserNotFound()); } // Şifreyi al var password = user["pwd"].AsString; // Şifresi hatalı: beyan edilen ile aynı değil if (password != info.pwd) { return(LoginOutput.InvalidPassword()); } // App hatalı if (!user["apps"].AsBsonDocument.Contains(info.appName)) { return(LoginOutput.InvalidApp()); } // App var ve okuduk var app = user["apps"][info.appName].AsBsonDocument; // Remove expires tokens: Expire etmiş olanlar temizlendi. // Elimizde temiz token listesi var. var tokens = removeExpiredTokens(app); var allowRecycle = app["allowRecycle"].AsBoolean; var totalCapacity = app["totalToken"].AsInt32; // Token yaratmak için yeterli kapasite yok. if (!allowRecycle && totalCapacity == tokens.Count) { return(LoginOutput.TooManyUsersLoggedIn()); } // Token yarat var username = user["usr"].AsString; var roles = user["roles"].AsString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var claims = getClaims(user["claims"].AsBsonDocument); var dbName = claims.GetValueFromClaim("gm-database"); // Demek ki sisteme veritabanı kaydedilmemiş. if (dbName == null) { return(LoginOutput.InvalidDb()); } // Kullanıcıyı yarat var token = UserToken.GenerateNew(username, roles, claims, TimeSpan.FromMinutes(info.slidingExpiration), info.appName, dbName); // Kapasite dolu ise eskilerden birisini sileceksin. if (tokens.Count == totalCapacity) { removeOldestToken(tokens); } // Yeni token eklensin tokens.Add(new BsonDocument() { { "token", token.Token }, { "createdAt", DateTime.Now }, { "slideExpireInMinutes", (int)token.SlidingExpiration.TotalMinutes } }); // Update database var f = Builders <BsonDocument> .Filter.Eq("usr", user["usr"].AsString); await users.ReplaceOneAsync(f, user); // add to cache _userCache.Add(new CacheItem(token.Token, token), new CacheItemPolicy() { SlidingExpiration = token.SlidingExpiration, RemovedCallback = CacheEntryRemovedCallback }); return(LoginOutput.OK(token)); }