private async Task <bool> VerifyAuthentication(string plugin, bool nostatus = false) { IDownloadPlugin pp = DownloadPluginHandler.Instance.Plugins[plugin]; Dictionary <string, object> meta = Settings.Instance.AuthorizationsMetadataDictionary[plugin]; ISession session = await pp.Authenticate(meta); if (session.Status == ResponseStatus.Ok) { if (!nostatus) { labStatus.ForeColor = Color.Green; labStatus.Text = "OK"; } if (!Settings.Instance.OpenSessionsDictionary.ContainsKey(plugin)) { Settings.Instance.OpenSessionsDictionary.Add(plugin, session); } else { Settings.Instance.OpenSessionsDictionary[plugin] = session; } return(true); } if (!nostatus) { labStatus.ForeColor = Color.Red; labStatus.Text = session.ErrorMessage; } return(false); }
public async Task <T> AuthWrapper <T>(string plugin, Func <IDownloadPlugin, ISession, Task <T> > function) where T : Response, new() { if (!Plugins.ContainsKey(plugin)) { T t = new T(); t.Status = ResponseStatus.MissingPlugin; t.ErrorMessage = "Plugin '" + plugin + "' not found."; DoLogging(t); return(t); } IDownloadPlugin p = Plugins[plugin]; int retry = 0; T r; do { if (!Settings.Instance.OpenSessionsDictionary.ContainsKey(plugin)) { if (!Settings.Instance.AuthorizationsMetadataDictionary.ContainsKey(plugin)) { T t = new T(); t.Status = ResponseStatus.MissingAuthenticationParameters; t.ErrorMessage = "Authentication parameters for Plugin '" + plugin + "' are missing."; DoLogging(t); return(t); } ISession ses = await p.Authenticate(Settings.Instance.AuthorizationsMetadataDictionary[plugin]); if (ses.Status != ResponseStatus.Ok) { T t = new T(); ses.PropagateError(t); DoLogging(t); return(t); } Settings.Instance.OpenSessionsDictionary.Add(plugin, ses); DoChangeSettings(); } ISession s = Settings.Instance.OpenSessionsDictionary[plugin]; r = await function(p, s); if (r.Status != ResponseStatus.Ok) { if (r.Status == ResponseStatus.LoginRequired) { Settings.Instance.OpenSessionsDictionary.Remove(plugin); DoChangeSettings(); } DoLogging(r); } retry++; } while (r.Status == ResponseStatus.LoginRequired && retry <= Settings.Instance.NumberOfRetries); return(r); }