Exemplo n.º 1
0
        /// <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();
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
 private Config(MetabaseApiSettings metabaseApiSettings)
 {
     MetabaseApiSettings = metabaseApiSettings;
 }
Exemplo n.º 5
0
 public TestQuestions(MetabaseApiSettings metabaseApiSettings) : base(metabaseApiSettings)
 {
 }
Exemplo n.º 6
0
 public Import(MetabaseApiSettings MetabaseApiSettings, string inputFilename, IReadOnlyDictionary <DatabaseId, DatabaseId> databaseMapping) : base(MetabaseApiSettings)
 {
     InputFilename   = inputFilename;
     DatabaseMapping = databaseMapping;
 }
Exemplo n.º 7
0
 public Export(MetabaseApiSettings MetabaseApiSettings, string outputFilename) : base(MetabaseApiSettings)
 {
     OutputFilename = outputFilename;
 }
Exemplo n.º 8
0
 public Export(MetabaseApiSettings metabaseApiSettings, string outputFilename, bool excludePersonalCollections) : base(metabaseApiSettings)
 {
     OutputFilename             = outputFilename;
     ExcludePersonalCollections = excludePersonalCollections;
 }