/// <summary> /// Manages the Metabase session token. Gets/renews token as needed. /// </summary> /// <param name="settings"></param> /// <param name="initialToken"> /// Optional. If defined, the API clients attempts to use this token instead of creating a new one. /// </param> public MetabaseSessionTokenManager(MetabaseApiSettings settings, string initialToken) { this._settings = settings; var handler = settings.IgnoreSSLErrors ? new HttpClientHandler { ServerCertificateCustomValidationCallback = (a, b, c, d) => true, } : new HttpClientHandler(); this._http = new HttpClient(handler) { BaseAddress = settings.MetabaseApiUrl, }; if (settings.MetabaseApiTimeout.HasValue) { try { this._http.Timeout = settings.MetabaseApiTimeout.Value; } catch (Exception e) { throw new Exception("Error setting API timeout to value " + settings.MetabaseApiTimeout.Value, e); } } if (string.IsNullOrEmpty(initialToken) == false) { sessionToken = new AsyncLazy <string>(() => Task.FromResult(initialToken)); } else { InvalidateSessionToken(); } }
/// <summary> /// Manages the Metabase session token. Gets/renews token as needed. /// </summary> /// <param name="settings"></param> /// <param name="initialToken"> /// Optional. If defined, the API clients attempts to use this token instead of creating a new one. /// </param> public MetabaseSessionTokenManager(MetabaseApiSettings settings, string initialToken) { this._settings = settings; var handler = new HttpClientHandler { ServerCertificateCustomValidationCallback = (a, b, c, d) => true, }; this._http = new HttpClient(handler) { BaseAddress = settings.MetabaseApiUrl, }; if (string.IsNullOrEmpty(initialToken) == false) { sessionToken = new AsyncLazy <string>(() => Task.FromResult(initialToken)); } else { InvalidateSessionToken(); } }
static async Task <MetabaseApi> InitApi(MetabaseApiSettings apiSettings) { const string filename = "metabase-token.txt"; string GetInitialToken() { try { return(File.ReadAllText(filename)); } catch (Exception e) { return(null); } } // get an existing token if available to work around Metabase throttling // https://github.com/metabase/metabase/issues/4979 var MetabaseInitialToken = GetInitialToken(); var metabaseSession = new MetabaseSessionTokenManager(apiSettings, MetabaseInitialToken); var api = new MetabaseApi(metabaseSession); try { await api.GetAllDashboards(); // attempt an API call to either validate or renew the session token var token = await metabaseSession.CurrentToken(); File.WriteAllText(filename, token); return(api); } catch (Exception e) { throw new Exception("Error initialising Metabase API for " + apiSettings.MetabaseApiUrl, e); } }
private Config(MetabaseApiSettings metabaseApiSettings) { MetabaseApiSettings = metabaseApiSettings; }
public TestQuestions(MetabaseApiSettings metabaseApiSettings) : base(metabaseApiSettings) { }
public Import(MetabaseApiSettings MetabaseApiSettings, string inputFilename, IReadOnlyDictionary <DatabaseId, DatabaseId> databaseMapping) : base(MetabaseApiSettings) { InputFilename = inputFilename; DatabaseMapping = databaseMapping; }
public Export(MetabaseApiSettings MetabaseApiSettings, string outputFilename) : base(MetabaseApiSettings) { OutputFilename = outputFilename; }
public Export(MetabaseApiSettings metabaseApiSettings, string outputFilename, bool excludePersonalCollections) : base(metabaseApiSettings) { OutputFilename = outputFilename; ExcludePersonalCollections = excludePersonalCollections; }