client

package
v0.1.14 Latest Latest
Warning

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

Go to latest
Published: Apr 13, 2026 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Overview

Package client provides a client for the Tableau REST API.

API Endpoints Used:

Authentication:
- POST /api/{version}/auth/signin                                                           - Sign in with Personal Access Token

Sites:
- GET  /api/{version}/sites/{siteId}                                                        - Get site details

Users:
- GET    /api/{version}/sites/{siteId}/users                                                - List users (paginated)
- GET    /api/{version}/sites/{siteId}/users/{userId}                                       - Verify current user
- POST   /api/{version}/sites/{siteId}/users                                                - Add user to site
- PUT    /api/{version}/sites/{siteId}/users/{userId}                                       - Update user site role
- DELETE /api/{version}/sites/{siteId}/users/{userId}                                       - Remove user from site

Groups:
- GET    /api/{version}/sites/{siteId}/groups                                               - List groups (paginated)
- GET    /api/{version}/sites/{siteId}/groups/{groupId}/users                               - List group members (paginated)
- POST   /api/{version}/sites/{siteId}/groups/{groupId}/users                               - Add user to group
- DELETE /api/{version}/sites/{siteId}/groups/{groupId}/users/{userId}                      - Remove user from group

Projects:
- GET    /api/{version}/sites/{siteId}/projects                                                                              - List projects (paginated, supports filter)
- GET    /api/{version}/sites/{siteId}/projects?filter=id:eq:{projectId}                                                     - Get project by ID
- GET    /api/{version}/sites/{siteId}/projects?filter=name:eq:{projectName}                                                 - Get project by name
- GET    /api/{version}/sites/{siteId}/projects/{projectId}/permissions                                                      - Get project permissions
- PUT    /api/{version}/sites/{siteId}/projects/{projectId}/permissions                                                      - Add project permission
- DELETE /api/{version}/sites/{siteId}/projects/{projectId}/permissions/users/{userId}/{cap}/{mode}                          - Delete user project permission
- DELETE /api/{version}/sites/{siteId}/projects/{projectId}/permissions/groups/{groupId}/{cap}/{mode}                        - Delete group project permission
- GET    /api/{version}/sites/{siteId}/projects/{projectId}/default-permissions/workbooks                                    - Get project default workbook permissions
- PUT    /api/{version}/sites/{siteId}/projects/{projectId}/default-permissions/workbooks                                    - Add project default workbook permission
- DELETE /api/{version}/sites/{siteId}/projects/{projectId}/default-permissions/workbooks/users/{userId}/{cap}/{mode}        - Delete user default workbook permission
- DELETE /api/{version}/sites/{siteId}/projects/{projectId}/default-permissions/workbooks/groups/{groupId}/{cap}/{mode}      - Delete group default workbook permission

Workbooks:
- GET    /api/{version}/sites/{siteId}/workbooks                                            - List workbooks (paginated)
- GET    /api/{version}/sites/{siteId}/workbooks/{workbookId}                               - Get workbook details
- GET    /api/{version}/sites/{siteId}/workbooks/{workbookId}/views                         - List workbook views
- GET    /api/{version}/sites/{siteId}/workbooks/{workbookId}/permissions                   - Get workbook permissions
- PUT    /api/{version}/sites/{siteId}/workbooks/{workbookId}/permissions                   - Add workbook permission
- DELETE /api/{version}/sites/{siteId}/workbooks/{workbookId}/permissions/users/{userId}/{cap}/{mode}   - Delete user workbook permission
- DELETE /api/{version}/sites/{siteId}/workbooks/{workbookId}/permissions/groups/{groupId}/{cap}/{mode} - Delete group workbook permission

Views:
- GET    /api/{version}/sites/{siteId}/views                                                - List views (paginated)
- GET    /api/{version}/sites/{siteId}/views/{viewId}/permissions                           - Get view permissions
- PUT    /api/{version}/sites/{siteId}/views/{viewId}/permissions                           - Add view permission
- DELETE /api/{version}/sites/{siteId}/views/{viewId}/permissions/users/{userId}/{cap}/{mode}   - Delete user view permission
- DELETE /api/{version}/sites/{siteId}/views/{viewId}/permissions/groups/{groupId}/{cap}/{mode} - Delete group view permission

IDP Configurations:
- GET  /api/{version}/sites/{siteId}/site-auth-configurations                               - List IDP configurations

Authentication:

  • Personal Access Token (PAT) via /auth/signin, then X-Tableau-Auth header

Pagination:

  • Uses pageSize and pageNumber query parameters (1-based, default pageSize=100)
  • Responses include pagination object with pageNumber, pageSize, totalAvailable

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BuildBaseURL

func BuildBaseURL(serverPath, apiVersion string) (string, error)

BuildBaseURL constructs the Tableau REST API base URL from a server path and API version. It preserves the scheme if provided (useful for HTTP-based testing), otherwise defaults to HTTPS. The apiVersion parameter is expected to be non-empty; the caller (config layer) is responsible for providing a default via field.WithDefaultValue.

Types

type Capabilities

type Capabilities struct {
	Capability []*Capability `json:"capability"`
}

type Capability

type Capability struct {
	Name string `json:"name"`
	Mode string `json:"mode"`
}

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client is an HTTP client for the Tableau REST API.

func New

func New(ctx context.Context, serverPath, siteID, accessTokenName, accessTokenSecret, apiVersion string) (*Client, error)

New creates an authenticated Tableau API client.

func (*Client) AddProjectDefaultWorkbookGroupPermission

func (c *Client) AddProjectDefaultWorkbookGroupPermission(ctx context.Context, projectID, groupID, capabilityName, capabilityMode string) (annotations.Annotations, error)

AddProjectDefaultWorkbookGroupPermission adds a default workbook group permission to a project.

func (*Client) AddProjectDefaultWorkbookPermission

func (c *Client) AddProjectDefaultWorkbookPermission(ctx context.Context, projectID, userID, capabilityName, capabilityMode string) (annotations.Annotations, error)

AddProjectDefaultWorkbookPermission adds a default workbook user permission to a project.

func (*Client) AddProjectGroupPermission

func (c *Client) AddProjectGroupPermission(ctx context.Context, projectID, groupID, capabilityName, capabilityMode string) (annotations.Annotations, error)

AddProjectGroupPermission adds a group permission to a project.

func (*Client) AddProjectPermission

func (c *Client) AddProjectPermission(ctx context.Context, projectID, userID, capabilityName, capabilityMode string) (annotations.Annotations, error)

AddProjectPermission adds a user permission to a project.

func (*Client) AddUserToGroup

func (c *Client) AddUserToGroup(ctx context.Context, groupId, userId string) (annotations.Annotations, error)

AddUserToGroup adds a user to a group.

func (*Client) AddUserToSite

func (c *Client) AddUserToSite(ctx context.Context, user CreateUserRequest) (*User, annotations.Annotations, error)

AddUserToSite creates a new user on the site.

func (*Client) AddViewGroupPermission

func (c *Client) AddViewGroupPermission(ctx context.Context, viewID, groupID, capabilityName, capabilityMode string) (annotations.Annotations, error)

AddViewGroupPermission adds a group permission to a view.

func (*Client) AddViewPermission

func (c *Client) AddViewPermission(ctx context.Context, viewID, userID, capabilityName, capabilityMode string) (annotations.Annotations, error)

AddViewPermission adds a user permission to a view.

func (*Client) AddWorkbookGroupPermission

func (c *Client) AddWorkbookGroupPermission(ctx context.Context, workbookID, groupID, capabilityName, capabilityMode string) (annotations.Annotations, error)

AddWorkbookGroupPermission adds a group permission to a workbook.

func (*Client) AddWorkbookPermission

func (c *Client) AddWorkbookPermission(ctx context.Context, workbookID, userID, capabilityName, capabilityMode string) (annotations.Annotations, error)

AddWorkbookPermission adds a user permission to a workbook.

func (*Client) DeleteProjectDefaultWorkbookGroupPermission

func (c *Client) DeleteProjectDefaultWorkbookGroupPermission(ctx context.Context, projectID, groupID, capabilityName, capabilityMode string) (annotations.Annotations, error)

DeleteProjectDefaultWorkbookGroupPermission removes a default workbook group permission from a project.

func (*Client) DeleteProjectDefaultWorkbookPermission

func (c *Client) DeleteProjectDefaultWorkbookPermission(ctx context.Context, projectID, userID, capabilityName, capabilityMode string) (annotations.Annotations, error)

DeleteProjectDefaultWorkbookPermission removes a default workbook user permission from a project.

func (*Client) DeleteProjectGroupPermission

func (c *Client) DeleteProjectGroupPermission(ctx context.Context, projectID, groupID, capabilityName, capabilityMode string) (annotations.Annotations, error)

DeleteProjectGroupPermission removes a group permission from a project.

func (*Client) DeleteProjectPermission

func (c *Client) DeleteProjectPermission(ctx context.Context, projectID, userID, capabilityName, capabilityMode string) (annotations.Annotations, error)

DeleteProjectPermission removes a user permission from a project.

func (*Client) DeleteViewGroupPermission

func (c *Client) DeleteViewGroupPermission(ctx context.Context, viewID, groupID, capabilityName, capabilityMode string) (annotations.Annotations, error)

DeleteViewGroupPermission removes a group permission from a view.

func (*Client) DeleteViewPermission

func (c *Client) DeleteViewPermission(ctx context.Context, viewID, userID, capabilityName, capabilityMode string) (annotations.Annotations, error)

DeleteViewPermission removes a user permission from a view.

func (*Client) DeleteWorkbookGroupPermission

func (c *Client) DeleteWorkbookGroupPermission(ctx context.Context, workbookID, groupID, capabilityName, capabilityMode string) (annotations.Annotations, error)

DeleteWorkbookGroupPermission removes a group permission from a workbook.

func (*Client) DeleteWorkbookPermission

func (c *Client) DeleteWorkbookPermission(ctx context.Context, workbookID, userID, capabilityName, capabilityMode string) (annotations.Annotations, error)

DeleteWorkbookPermission removes a user permission from a workbook.

func (*Client) FindIdpConfigurationByName

func (c *Client) FindIdpConfigurationByName(ctx context.Context, name string) (*IdpConfiguration, annotations.Annotations, error)

FindIdpConfigurationByName returns the enabled IDP configuration matching the given name (case-insensitive). Searches all enabled configs, not just SAML/OPENID. Returns nil if no match is found.

func (*Client) GetGroupUsers

func (c *Client) GetGroupUsers(ctx context.Context, groupId, pageToken string) ([]*User, string, annotations.Annotations, error)

GetGroupUsers returns a page of users in a group.

func (*Client) GetGroups

func (c *Client) GetGroups(ctx context.Context, pageToken string) ([]*Group, string, annotations.Annotations, error)

GetGroups returns a page of groups on the site.

func (*Client) GetProject

func (c *Client) GetProject(ctx context.Context, name string, id string) (*Project, annotations.Annotations, error)

GetProjectByName returns a single project by name using a server-side filter. Returns nil if no project with that name is found.

func (*Client) GetProjectDefaultWorkbookPermissions

func (c *Client) GetProjectDefaultWorkbookPermissions(ctx context.Context, projectID string) ([]*GranteeCapabilities, annotations.Annotations, error)

GetProjectDefaultWorkbookPermissions returns the default workbook permissions for a project.

func (*Client) GetProjectPermissions

func (c *Client) GetProjectPermissions(ctx context.Context, projectID string) ([]*GranteeCapabilities, annotations.Annotations, error)

GetProjectPermissions returns permissions for a project.

func (*Client) GetProjects

func (c *Client) GetProjects(ctx context.Context, pageToken string, opts ...ReqOpt) ([]*Project, string, annotations.Annotations, error)

GetProjects returns a page of projects on the site, optionally filtered by query parameters.

func (*Client) GetSite

func (c *Client) GetSite(ctx context.Context) (*Site, annotations.Annotations, error)

GetSite returns site details of the site the user is logged in to.

func (*Client) GetUsers

func (c *Client) GetUsers(ctx context.Context, pageToken string, opts ...ReqOpt) ([]*User, string, annotations.Annotations, error)

GetUsers returns a page of users on the site, optionally filtered by query parameters.

func (*Client) GetViewPermissions

func (c *Client) GetViewPermissions(ctx context.Context, viewID string) ([]*GranteeCapabilities, annotations.Annotations, error)

GetViewPermissions returns permissions for a view.

func (*Client) GetWorkbook

func (c *Client) GetWorkbook(ctx context.Context, workbookID string) (*Workbook, annotations.Annotations, error)

GetWorkbook returns a single workbook by ID.

func (*Client) GetWorkbookPermissions

func (c *Client) GetWorkbookPermissions(ctx context.Context, workbookID string) ([]*GranteeCapabilities, annotations.Annotations, error)

GetWorkbookPermissions returns permissions for a workbook.

func (*Client) GetWorkbookViews

func (c *Client) GetWorkbookViews(ctx context.Context, workbookID string) ([]*View, annotations.Annotations, error)

GetWorkbookViews returns views for a specific workbook. This endpoint does not support pagination — it returns all views in a single response without a pagination object, so no page handling is needed.

func (*Client) GetWorkbooks

func (c *Client) GetWorkbooks(ctx context.Context, pageToken string, opts ...ReqOpt) ([]*Workbook, string, annotations.Annotations, error)

GetWorkbooks returns a page of workbooks on the site, optionally filtered by query parameters.

func (*Client) ListEnabledIdpConfigurations

func (c *Client) ListEnabledIdpConfigurations(ctx context.Context) ([]*IdpConfiguration, annotations.Annotations, error)

ListEnabledIdpConfigurations returns only enabled SAML/OIDC IDP configurations. The Tableau API does not support server-side filtering, so this lists all configurations and filters client-side.

func (*Client) ListIdpConfigurations

func (c *Client) ListIdpConfigurations(ctx context.Context) ([]*IdpConfiguration, annotations.Annotations, error)

ListIdpConfigurations returns IDP configurations for the site. Returns an error (codes.NotFound) if the endpoint is unavailable, which can happen on older on-premises Tableau Server (<2023.3 / API <3.22). Callers are responsible for deciding how to handle the unavailable case.

func (*Client) RemoveUserFromGroup

func (c *Client) RemoveUserFromGroup(ctx context.Context, groupId, userId string) (annotations.Annotations, error)

RemoveUserFromGroup removes a user from a group.

func (*Client) RemoveUserFromSite

func (c *Client) RemoveUserFromSite(ctx context.Context, userId string) (annotations.Annotations, error)

RemoveUserFromSite removes a user from the site.

func (*Client) UpdateUserSiteRole

func (c *Client) UpdateUserSiteRole(ctx context.Context, userId, siteRole string) (annotations.Annotations, error)

UpdateUserSiteRole updates a user's site role.

type CreateUserRequest

type CreateUserRequest struct {
	// has to be name in the payload
	Email              string `json:"name"`
	SiteRole           string `json:"siteRole"`
	AuthSetting        string `json:"authSetting,omitempty"`
	IdpConfigurationId string `json:"idpConfigurationId,omitempty"`
}

type Credentials

type Credentials struct {
	Site                      Site   `json:"site"`
	User                      User   `json:"user"`
	Token                     string `json:"token"`
	EstimatedTimeToExpiration string `json:"estimatedTimeToExpiration"`
}

func Login

func Login(ctx context.Context, httpClient *http.Client, baseUrl, contentUrl, accessToken, tokenName string) (*Credentials, error)

Login authenticates with a Personal Access Token and returns session credentials.

type GranteeCapabilities

type GranteeCapabilities struct {
	User         *UserRef     `json:"user,omitempty"`
	Group        *GroupRef    `json:"group,omitempty"`
	Capabilities Capabilities `json:"capabilities"`
}

type Group

type Group struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

type GroupRef

type GroupRef struct {
	ID string `json:"id"`
}

type IdpConfiguration

type IdpConfiguration struct {
	IdpConfigurationId   string `json:"idpConfigurationId"`
	IdpConfigurationName string `json:"idpConfigurationName"`
	AuthSetting          string `json:"authSetting"`
	Enabled              bool   `json:"enabled"`
}

type OwnerRef

type OwnerRef struct {
	ID string `json:"id"`
}

type Pagination

type Pagination struct {
	PageNumber     string `json:"pageNumber"`
	PageSize       string `json:"pageSize"`
	TotalAvailable string `json:"totalAvailable"`
}

type Project

type Project struct {
	ID                 string    `json:"id"`
	Name               string    `json:"name"`
	Description        string    `json:"description"`
	ContentPermissions string    `json:"contentPermissions"`
	ParentProjectId    string    `json:"parentProjectId,omitempty"`
	Owner              *OwnerRef `json:"owner,omitempty"`
}

type ProjectRef

type ProjectRef struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

type ReqOpt

type ReqOpt func(u *url.URL)

ReqOpt is a function that modifies a URL with query parameters.

func WithFilter

func WithFilter(filter string) ReqOpt

WithFilter adds a filter query parameter (e.g. "siteRole:eq:Viewer").

type Site

type Site struct {
	ID         string `json:"id"`
	ContentURL string `json:"contentUrl"`
	Name       string `json:"name"`
}

type User

type User struct {
	Email       string     `json:"email"`
	ID          string     `json:"id"`
	FullName    string     `json:"fullName"`
	Name        string     `json:"name"`
	SiteRole    string     `json:"siteRole"`
	AuthSetting string     `json:"authSetting"`
	LastLogin   *time.Time `json:"lastLogin"`
}

type UserRef

type UserRef struct {
	ID string `json:"id"`
}

type View

type View struct {
	ID         string       `json:"id"`
	Name       string       `json:"name"`
	ContentURL string       `json:"contentUrl"`
	Workbook   *WorkbookRef `json:"workbook,omitempty"`
}

type Workbook

type Workbook struct {
	ID         string      `json:"id"`
	Name       string      `json:"name"`
	ContentURL string      `json:"contentUrl"`
	ShowTabs   string      `json:"showTabs"`
	Project    *ProjectRef `json:"project,omitempty"`
	Owner      *OwnerRef   `json:"owner,omitempty"`
}

type WorkbookRef

type WorkbookRef struct {
	ID string `json:"id"`
}

Jump to

Keyboard shortcuts

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