metabase

package
v0.18.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 9, 2023 License: MIT Imports: 21 Imported by: 0

README

Metabase

Usage

Using default environment variable names:

import ("github.com/grokify/goauth")

httpClient, authResponse, clientConfig, err :=
  metabase.NewClientEnv(nil)

Authentication

To query the Metabase API you need to retrieve a bearer token. You can do this with the following cURL command which is also implemented in the AuthRequest function:

curl -v -H "Content-Type: application/json" \
  -d '{"username":"myusername","password":"mypassword"}' \
  -XPOST 'http://example.com/api/session'

You will receive a response like:

{"id":"11112222-3333-4444-5555-666677778888"}

You can then use the id in the X-Metabase-Session header for subsequent API calls. Here's an example:

curl -XGET 'https://example.com/api/database' \
  -H 'X-Metabase-Session: 11112222-3333-4444-5555-666677778888'

Documentation

Index

Constants

View Source
const (
	HeaderMetabaseSession = "X-Metabase-Session"
	RelPathAPIDatabase    = "api/database"
	RelPathAPISession     = "api/session"
	RelPathAPIUserCurrent = "api/user/current"

	// Example environment variables
	EnvMetabaseBaseURL       = "METABASE_BASE_URL"
	EnvMetabaseUsername      = "METABASE_USERNAME"
	EnvMetabasePassword      = "METABASE_PASSWORD"
	EnvMetabaseSessionID     = "METABASE_SESSION_ID"
	EnvMetabaseTLSSkipVerify = "METABASE_TLS_SKIP_VERIFY"
)
View Source
const (
	CurrentUserURLPath = "/api/user/current"
)

Variables

View Source
var (
	TLSInsecureSkipVerify = false
)

Functions

func AuthRequest

func AuthRequest(authURL, username, password string, tlsSkipVerify bool) (*http.Response, error)

AuthRequest creates an authentiation request that returns a id that is used in Metabase API requests. It follows the following curl command: curl -v -H "Content-Type: application/json" -d '{"username":"myusername","password":"mypassword"}' -XPOST 'http://example.com/api/session'

func BuildURL

func BuildURL(server, urlpath string) string

func NewClientEnv

func NewClientEnv(opts *ConfigEnvOpts) (*http.Client, *AuthResponse, *Config, error)

func NewClientSessionID

func NewClientSessionID(sessionID string, allowInsecure bool) *http.Client

func RetrieveQuestions

func RetrieveQuestions(cu ClientUtil, q2s QuestionsToSlug, dir string) (map[string][]byte, error)

Types

type AuthResponse

type AuthResponse struct {
	ID string `json:"id,omitempty"`
}

func NewClient

func NewClient(cfg Config) (*http.Client, *AuthResponse, error)

func NewClientPassword

func NewClientPassword(baseURL, username, password string, allowInsecure bool) (*http.Client, *AuthResponse, error)

NewClient returns a *http.Client that will add the Metabase Session header to each request.

func NewClientPasswordWithSessionID

func NewClientPasswordWithSessionID(baseURL, username, password, sessionID string, allowInsecure bool) (*http.Client, *AuthResponse, error)

NewClientPasswordWithSessionId returns a *http.Client first attempting to use the supplied `sessionId` with a fallback to `username` and `password`.

type ClientUtil

type ClientUtil struct {
	HTTPClient *http.Client
	BaseURL    string
}

func NewClientUtil

func NewClientUtil(baseURL, username, password string, tlsSkipVerify bool) (*ClientUtil, error)

func (*ClientUtil) BuildMetabaseCardAPI

func (cu *ClientUtil) BuildMetabaseCardAPI(cardID int, format string) string

func (*ClientUtil) GetCurrentUser

func (cu *ClientUtil) GetCurrentUser() (User, *http.Response, error)

func (*ClientUtil) GetQuestionData

func (cu *ClientUtil) GetQuestionData(cardID int) ([]byte, error)

func (*ClientUtil) GetSCIMUser

func (cu *ClientUtil) GetSCIMUser() (scim.User, error)

func (*ClientUtil) GetStoreQuestionData

func (cu *ClientUtil) GetStoreQuestionData(cardID int, filename string, perm os.FileMode) ([]byte, error)

type Config

type Config struct {
	BaseURL       string
	SessionID     string
	Username      string
	Password      string
	TLSSkipVerify bool
}

Config is a basic struct to hold API access information for Metabase.

func (*Config) NewClient

func (cfg *Config) NewClient() (*http.Client, *AuthResponse, error)

func (*Config) Validate

func (cfg *Config) Validate() error

type ConfigEnvOpts

type ConfigEnvOpts struct {
	EnvPaths                 []string
	EnvPathsLoad             bool
	EnvMetabaseBaseURL       string
	EnvMetabaseSessionID     string
	EnvMetabaseUsername      string
	EnvMetabasePassword      string // #nosec G101
	EnvMetabaseTLSSkipVerify string
}

func (*ConfigEnvOpts) Config

func (opts *ConfigEnvOpts) Config() Config

func (*ConfigEnvOpts) Defaultify

func (opts *ConfigEnvOpts) Defaultify()

func (*ConfigEnvOpts) LoadEnv

func (opts *ConfigEnvOpts) LoadEnv() error

type QuestionsToSlug

type QuestionsToSlug struct {
	QuestionMap map[string]int
}

type User

type User struct {
	Email       string    `json:"email,omitempty"`
	LdapAuth    bool      `json:"ldap_auth,omitempty"`
	FirstName   string    `json:"first_name,omitempty"`
	LastLogin   time.Time `json:"last_login,omitempty"`
	IsActive    bool      `json:"is_active,omitempty"`
	IsQbnewb    bool      `json:"is_qbnewb,omitempty"`
	IsSuperuser bool      `json:"is_superuser,omitempty"`
	ID          int       `json:"id,omitempty"`
	LastName    string    `json:"last_name,omitempty"`
	DateJoined  time.Time `json:"date_joined,omitempty"`
	CommonName  string    `json:"common_name,omitempty"`
	GoogleAuth  bool      `json:"google_auth,omitempty"`
}

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL