diff --git a/src/Zirconium/Core/App.cs b/src/Zirconium/Core/App.cs index dea0c46..7e3543a 100644 --- a/src/Zirconium/Core/App.cs +++ b/src/Zirconium/Core/App.cs @@ -29,6 +29,7 @@ namespace Zirconium.Core Database = new DatabaseConnector(this); PluginManager = new PluginManager(PluginHostAPI); PluginManager.LoadPlugins(config.PluginsDirPath, config.EnabledPlugins); + AuthManager.SetDefaultAuthProvider(); Log.Info("Zirconium is initialized successfully"); } diff --git a/src/Zirconium/Core/AuthManager.cs b/src/Zirconium/Core/AuthManager.cs index 3b9098b..f7e77f0 100644 --- a/src/Zirconium/Core/AuthManager.cs +++ b/src/Zirconium/Core/AuthManager.cs @@ -5,6 +5,7 @@ using JWT.Builder; using Newtonsoft.Json; using Zirconium.Utils; using Zirconium.Core.Plugins.Interfaces; +using System.Linq; namespace Zirconium.Core { @@ -14,13 +15,13 @@ namespace Zirconium.Core private string _secretString; private const long DEFAULT_TOKEN_EXPIRATION_TIME_HOURS = 24 * 3600000; private IList _authProviders; - private IAuthProvider _defaultAuthProvider; + public IAuthProvider DefaultAuthProvider { get; private set; } public AuthManager(App app) { _app = app; _authProviders = new List(); - _defaultAuthProvider = null; + DefaultAuthProvider = null; _secretString = Guid.NewGuid().ToString(); } @@ -37,7 +38,8 @@ namespace Zirconium.Core .Encode(); } - public string CreateToken(string entityID, string deviceID) { + public string CreateToken(string entityID, string deviceID) + { return CreateToken(entityID, deviceID, DEFAULT_TOKEN_EXPIRATION_TIME_HOURS); } @@ -49,17 +51,23 @@ namespace Zirconium.Core .MustVerifySignature() .Decode(token); var payload = JsonConvert.DeserializeObject(jsonPayload); - if (_defaultAuthProvider == null) { + if (DefaultAuthProvider == null) + { throw new Exception("Default auth provider isn't specified"); } - var validToken = _defaultAuthProvider.TestToken(token, payload); + var validToken = DefaultAuthProvider.TestToken(token, payload); if (!validToken) return null; return payload; } - public void AddAuthProvider(IAuthProvider provider) { + public void AddAuthProvider(IAuthProvider provider) + { _authProviders.Add(provider); } + + public void SetDefaultAuthProvider() { + DefaultAuthProvider = _authProviders.Where(x => x.GetAuthProviderName() == _app.Config.AuthenticationProvider).FirstOrDefault(); + } } } \ No newline at end of file diff --git a/src/Zirconium/Core/Plugins/Interfaces/IPluginHostAPI.cs b/src/Zirconium/Core/Plugins/Interfaces/IPluginHostAPI.cs index 4333feb..ddb8164 100644 --- a/src/Zirconium/Core/Plugins/Interfaces/IPluginHostAPI.cs +++ b/src/Zirconium/Core/Plugins/Interfaces/IPluginHostAPI.cs @@ -12,12 +12,14 @@ namespace Zirconium.Core.Plugins.Interfaces void UnhookCoreEvent(ICoreEventHandler handler); void FireEvent(CoreEvent coreEvent); string GenerateAuthToken(string entityID, string deviceID, int tokenExpirationMillis); + string GenerateAuthToken(string entityID, string deviceID); string[] GetServerDomains(); string GetServerID(); void SendMessage(Session session, BaseMessage message); dynamic GetSettings(IPluginAPI plugin); dynamic GetSettings(string pluginName); void ProvideAuth(IAuthProvider provider); + IAuthProvider GetAuthProvider(); IExposedSessionManager GetSessionManager(); void RegisterIPCService(IPluginAPI plugin, dynamic service); Task MakeIPCRequest(string pluginName, string methodName, dynamic paramsObject); diff --git a/src/Zirconium/Core/Plugins/PluginHostAPI.cs b/src/Zirconium/Core/Plugins/PluginHostAPI.cs index b27fb26..f6e8b8b 100644 --- a/src/Zirconium/Core/Plugins/PluginHostAPI.cs +++ b/src/Zirconium/Core/Plugins/PluginHostAPI.cs @@ -102,5 +102,15 @@ namespace Zirconium.Core.Plugins { return _app.Database.MongoDatabase; } + + public IAuthProvider GetAuthProvider() + { + return _app.AuthManager.DefaultAuthProvider; + } + + public string GenerateAuthToken(string entityID, string deviceID) + { + return _app.AuthManager.CreateToken(entityID, deviceID); + } } } \ No newline at end of file