client

package module
v0.20.1 Latest Latest
Warning

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

Go to latest
Published: Oct 18, 2021 License: MPL-2.0 Imports: 13 Imported by: 0

README

Golang Nexus Client

Introduction

Sonatype Nexus Golang Client

Development and testing

Start a Nexus Docker container

$ docker run -d -p 8081:8081 --name nexus sonatype/nexus3

Get the Admin password

$ docker exec -ti nexus /bin/bash -c 'cat /nexus-data/admin.password'

Set config as environment variables

$ export NEXUS_URL=http://127.0.0.1:8081
$ export NEXUS_USERNAME=admin
$ export NEXUS_PASSWORD=<random-password-from-above>

Run tests

$ make test

The tests assume Nexus Pro features. If you do not have a Nexus Pro license you can skip the pro tests by setting the SKIP_PRO_TESTS environment variable:

$ export SKIP_PRO_TESTS=true

Author

Datadrivers GmbH

Documentation

Index

Constants

View Source
const (
	BlobstoreTypeFile = "File"
	BlobstoreTypeS3   = "S3"
)
View Source
const (
	// ContentTypeApplicationJSON ...
	ContentTypeApplicationJSON = "application/json"
	// ContentTypeTextPlain ...
	ContentTypeTextPlain = "text/plain"
)
View Source
const (

	// PrivilegeDomains
	PrivilegeDomainAll                = "*"
	PrivilegeDomainAPIKey             = "apikey"
	PrivilegeDomainAnalytics          = "analytics"
	PrivilegeDomainAtlas              = "atlas"
	PrivilegeDomainBlobstores         = "blobstores"
	PrivilegeDomainBundles            = "bundles"
	PrivilegeDomainCapabilities       = "capabilities"
	PrivilegeDomainComponent          = "component"
	PrivilegeDomainDatastores         = "datastores"
	PrivilegeDomainHealthcheck        = "healthcheck"
	PrivilegeDomainHealthcheckSummary = "healthchecksummary"
	PrivilegeDomainIQViolationSummery = "iq-violation-summary"
	PrivilegeDomainLDAP               = "ldap"
	PrivilegeDomainLicensing          = "licensing"
	PrivilegeDomainLogging            = "logging"
	PrivilegeDomainMetrics            = "metrics"
	PrivilegeDomainPrivileges         = "privileges"
	PrivilegeDomainRoles              = "roles"
	PrivilegeDomainSearch             = "search"
	PrivilegeDomainSelectors          = "selectors"
	PrivilegeDomainSettings           = "settings"
	PrivilegeDomainSSLTruststore      = "ssl-truststore"
	PrivilegeDomainTasks              = "tasks"
	PrivilegeDomainUsers              = "users"
	PrivilegeDomainUsersChangePW      = "userschangepw"
	PrivilegeDomainWonderland         = "wonderland"

	// PrivilegeTypes
	PrivilegeTypeApplication     = "application"
	PrivilegeTypeContentSelector = "repository-content-selector"
	PrivilegeTypeRepositoryAdmin = "repository-admin"
	PrivilegeTypeRepositoryView  = "repository-view"
	PrivilegeTypeScript          = "script"
	PrivilegeTypeWildcard        = "wildcard"
)
View Source
const (
	RepositoryFormatApt    = "apt"
	RepositoryFormatBower  = "bower"
	RepositoryFormatConan  = "conan"
	RepositoryFormatDocker = "docker"
	RepositoryFormatGitLFS = "gitlfs"
	RepositoryFormatGo     = "go"
	RepositoryFormatHelm   = "helm"
	RepositoryFormatMaven2 = "maven2"
	RepositoryFormatNPM    = "npm"
	RepositoryFormatNuget  = "nuget"
	RepositoryFormatP2     = "p2"
	RepositoryFormatPyPi   = "pypi"
	RepositoryFormatRAW    = "raw"
	RepositoryFormatRuby   = "rubygems"
	RepositoryFormatYum    = "yum"

	RepositoryTypeGroup  = "group"
	RepositoryTypeHosted = "hosted"
	RepositoryTypeProxy  = "proxy"
)

Variables

Functions

This section is empty.

Types

type AnonymousConfig added in v0.20.1

type AnonymousConfig struct {
	Enabled   bool   `json:"enabled"`
	UserID    string `json:"userId"`
	RealmName string `json:"realmName"`
}

Anonymous config

type Asset added in v0.20.1

type Asset struct {
	DownloadUrl string `json:"downloadUrl,omitempty"`
	Path        string `json:"path,omitempty"`
	ID          string `json:"id,omitempty"`
	Repository  string `json:"repository,omitempty"`
	Format      string `json:"format,omitempty"`
}

type AssetList added in v0.20.1

type AssetList struct {
	Items             []Asset `json:"items,omitempty"`
	ContinuationToken string  `json:"continuationToken,omitempty"`
}

type Blobstore added in v0.20.1

type Blobstore struct {
	AvailableSpaceInBytes int    `json:"availableSpaceInBytes"`
	BlobCount             int    `json:"blobCount"`
	Name                  string `json:"name"`
	Path                  string `json:"path,omitempty"` // only if type File
	TotalSizeInBytes      int    `json:"totalSizeInBytes"`
	Type                  string `json:"type"`

	*BlobstoreS3BucketConfiguration `json:"bucketConfiguration,omitempty"`
	*BlobstoreSoftQuota             `json:"softQuota,omitempty"`
}

Blobstore data

type BlobstoreS3AdvancedBucketConnection added in v0.20.1

type BlobstoreS3AdvancedBucketConnection struct {
	Endpoint       string `json:"endpoint"`
	SignerType     string `json:"signerType"`
	ForcePathStyle bool   `json:"forcePathStyle"`
}

BlobstoreS3AdvancedBucketConnection data

type BlobstoreS3Bucket added in v0.20.1

type BlobstoreS3Bucket struct {
	Expiration int    `json:"expiration"`
	Name       string `json:"name"`
	Prefix     string `json:"prefix"`
	Region     string `json:"region"`
}

BlobstoreS3Bucket data

type BlobstoreS3BucketConfiguration added in v0.20.1

type BlobstoreS3BucketConfiguration struct {
	*BlobstoreS3Bucket                   `json:"bucket,omitempty"`
	*BlobstoreS3Encryption               `json:"encryption,omitempty"`
	*BlobstoreS3BucketSecurity           `json:"bucketSecurity,omitempty"`
	*BlobstoreS3AdvancedBucketConnection `json:"advancedBucketConnection,omitempty"`
}

BlobstoreS3BucketConfiguration data

type BlobstoreS3BucketSecurity added in v0.20.1

type BlobstoreS3BucketSecurity struct {
	AccessKeyID     string `json:"accessKeyId"`
	Role            string `json:"role"`
	SecretAccessKey string `json:"secretAccessKey"`
	SessionToken    string `json:"sessionToken"`
}

BlobstoreS3BucketSecurity data

type BlobstoreS3Encryption added in v0.20.1

type BlobstoreS3Encryption struct {
	Key  string `json:"encryptionKey"`
	Type string `json:"encryptionType"`
}

BlobstoreS3Encryption data

type BlobstoreSoftQuota added in v0.20.1

type BlobstoreSoftQuota struct {
	Limit int    `json:"limit"`
	Type  string `json:"type"`
}

BlobstoreSoftQuota data

type Certificate added in v0.20.1

type Certificate struct {
	Id                      string `json:"id"`
	Fingerprint             string `json:"fingerprint"`
	SerialNumber            string `json:"serialNumber"`
	IssuerCommonName        string `json:"issuerCommonName"`
	IssuerOrganization      string `json:"issuerOrganization"`
	IssuerOrganizationUnit  string `json:"issuerOrganizationalUnit"`
	SubjectCommonName       string `json:"subjectCommonName"`
	SubjectOrganization     string `json:"subjectOrganization"`
	SubjectOrganizationUnit string `json:"subjectOrganizationalUnit"`
	Pem                     string `json:"pem"`
	IssuedOn                int64  `json:"issuedOn"`
	ExpiresOn               int64  `json:"expiresOn"`
}

type CertificateRequest added in v0.20.1

type CertificateRequest struct {
	Host string `url:"host"`
	Port int    `url:"port"`
}

func NewCertificateRequest added in v0.20.1

func NewCertificateRequest(proxyUrl string) (*CertificateRequest, error)

type Client

type Client interface {
	AnonymousRead() (*AnonymousConfig, error)
	AnonymousUpdate(AnonymousConfig) error
	AssetRead(string) (*Asset, error)
	AssetDelete(string) error
	AssetList(string) ([]Asset, error)
	BlobstoreCreate(Blobstore) error
	BlobstoreDelete(string) error
	BlobstoreRead(string) (*Blobstore, error)
	BlobstoreUpdate(string, Blobstore) error
	CertificateCreate(*Certificate) error
	CertificateDelete(string) error
	CertificateGet(*CertificateRequest) (*Certificate, error)
	CertificateList() (*[]Certificate, error)
	ContentSelectorCreate(ContentSelector) error
	ContentSelectorDelete(string) error
	ContentSelectorRead(string) (*ContentSelector, error)
	ContentSelectorUpdate(string, ContentSelector) error
	ContentType() string
	ContentTypeJSON()
	ContentTypeTextPlain()
	LDAPChangeOrder([]string) error
	LDAPCreate(LDAP) error
	LDAPDelete(string) error
	LDAPList() ([]LDAP, error)
	LDAPRead(string) (*LDAP, error)
	LDAPUpdate(string, LDAP) error
	PrivilegeCreate(Privilege) error
	PrivilegeDelete(string) error
	PrivilegeRead(string) (*Privilege, error)
	PrivilegeUpdate(string, Privilege) error
	Privileges() ([]Privilege, error)
	RealmsActivate([]string) error
	RealmsActive() ([]string, error)
	RealmsAvailable() ([]Realm, error)
	RepositoryCreate(Repository) error
	RepositoryDelete(string) error
	RepositoryRead(string) (*Repository, error)
	RepositoryUpdate(string, Repository) error
	RepositoryList() ([]Repository, error)
	ComponentRead(string) (*Component, error)
	ComponentUpload(string, Component) error
	ComponentDelete(string) error
	ComponentList(string) ([]Component, error)
	RoleCreate(Role) error
	RoleDelete(string) error
	RoleRead(string) (*Role, error)
	RoleUpdate(string, Role) error
	RoutingRuleCreate(*RoutingRule) error
	RoutingRuleDelete(string) error
	RoutingRuleRead(string) (*RoutingRule, error)
	RoutingRuleUpdate(*RoutingRule) error
	RoutingRulesLists() ([]RoutingRule, error)
	SAMLApply(SAML) error
	SAMLRead() (*SAML, error)
	SAMLDelete() error
	ScriptCreate(*Script) error
	ScriptDelete(string) error
	ScriptLists() ([]Script, error)
	ScriptRead(string) (*Script, error)
	ScriptRun(string) error
	ScriptUpdate(*Script) error
	UserChangePassword(string, string) error
	UserCreate(User) error
	UserDelete(string) error
	UserRead(string) (*User, error)
	UserUpdate(string, User) error
	UserTokensApply(UserTokenConfiguration) error
	UserTokensRead() (*UserTokenConfiguration, error)
}

Client represents the Nexus API Client interface

func NewClient

func NewClient(config Config) Client

NewClient returns an instance of client that implements the Client interface

type Component added in v0.20.1

type Component struct {
	ID         string `json:"id,omitempty"`
	Repository string `json:"repository,omitempty"`
	Format     string `json:"format,omitempty"`
	Group      string `json:"group,omitempty"`
	Name       string `json:"name,omitempty"`
	Version    string `json:"version,omitempty"`
}

Component is the base structure for Nexus Component

type ComponentList added in v0.20.1

type ComponentList struct {
	Items             []Component `json:"items,omitempty"`
	ContinuationToken string      `json:"continuationToken,omitempty"`
}

type Config

type Config struct {
	URL      string `json:"url"`
	Username string `json:"username"`
	Password string `json:"password"`
	Insecure bool   `json:"insecure"`
}

Config is the configuration structure used to instantiate the Nexus client

type ContentSelector added in v0.20.1

type ContentSelector struct {
	Description string `json:"description"`
	Expression  string `json:"expression"`
	Name        string `json:"name"`
}

ContentSelector data

type LDAP added in v0.20.1

type LDAP struct {
	AuthPassword                string `json:"authPassword"`
	AuthRealm                   string `json:"authRealm,omitempty"`
	AuthSchema                  string `json:"authScheme"`
	AuthUserName                string `json:"authUsername,omitempty"`
	ConnectionRetryDelaySeconds uint   `json:"connectionRetryDelaySeconds"`
	ConnectionTimeoutSeconds    uint   `json:"connectionTimeoutSeconds"`
	GroupBaseDn                 string `json:"groupBaseDn,omitempty"`
	GroupIDAttribute            string `json:"groupIdAttribute,omitempty"`
	GroupMemberAttribute        string `json:"groupMemberAttribute,omitempty"`
	GroupMemberFormat           string `json:"groupMemberFormat,omitempty"`
	GroupObjectClass            string `json:"groupObjectClass,omitempty"`
	GroupSubtree                bool   `json:"groupSubtree,omitempty"`
	GroupType                   string `json:"groupType"`
	Host                        string `json:"host"`
	ID                          string `json:"id"`
	LDAPGroupsAsRoles           bool   `json:"ldapGroupsAsRoles,omitempty"`
	MaxIncidentCount            uint   `json:"maxIncidentsCount"`
	Name                        string `json:"name"`
	Port                        uint   `json:"port"`
	Protocol                    string `json:"protocol"`
	SearchBase                  string `json:"searchBase"`
	UseTrustStore               bool   `json:"useTrustStore,omitempty"`
	UserBaseDN                  string `json:"userBaseDn,omitempty"`
	UserEmailAddressAttribute   string `json:"userEmailAddressAttribute,omitempty"`
	UserIDAttribute             string `json:"userIdAttribute,omitempty"`
	UserLDAPFilter              string `json:"userLdapFilter,omitempty"`
	UserMemberOfAttribute       string `json:"userMemberOfAttribute,omitempty"`
	UserObjectClass             string `json:"userObjectClass,omitempty"`
	UserPasswordAttribute       string `json:"userPasswordAttribute,omitempty"`
	UserRealNameAttribute       string `json:"userRealNameAttribute,omitempty"`
	UserSubtree                 bool   `json:"userSubtree,omitempty"`
}

LDAP data structure

type Privilege added in v0.20.1

type Privilege struct {
	Actions         []string `json:"actions,omitempty"`
	ContentSelector string   `json:"contentSelector,omitempty"`
	Description     string   `json:"description"`
	Domain          string   `json:"domain,omitempty"`
	Format          string   `json:"format,omitempty"`
	Name            string   `json:"name"`
	Pattern         string   `json:"pattern,omitempty"`
	ScriptName      string   `json:"scriptName,omitempty"`
	ReadOnly        bool     `json:"readOnly"`
	Repository      string   `json:"repository,omitempty"`
	Type            string   `json:"type"`
}

Privilege data

type Realm added in v0.20.1

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

Realm represents an instance of Nexus Realm

type Repository

type Repository struct {
	Format          string  `json:"format"`
	Name            string  `json:"name"`
	Online          bool    `json:"online"`
	RoutingRuleName *string `json:"routingRuleName,omitempty"`
	Type            string  `json:"type"`
	Url             string  `json:"url"`

	// Apt Repository data
	*RepositoryApt        `json:"apt,omitempty"`
	*RepositoryAptSigning `json:"aptSigning,omitempty"`

	// RepositoryBower data
	*RepositoryBower `json:"bower,omitempty"`

	// RepositoryCleanup data
	*RepositoryCleanup `json:"cleanup,omitempty"`

	// Docker Repository data
	*RepositoryDocker      `json:"docker,omitempty"`
	*RepositoryDockerProxy `json:"dockerProxy,omitempty"`

	// Group data
	*RepositoryGroup `json:"group,omitempty"`

	// HTTPClient
	*RepositoryHTTPClient `json:"httpClient,omitempty"`

	// Maven Reporitoy data
	*RepositoryMaven `json:"maven,omitempty"`

	// Cache data for proxy Repository
	*RepositoryNegativeCache `json:"negativeCache,omitempty"`

	// Nuget Proxy Repository data
	*RepositoryNugetProxy `json:"nugetProxy,omitempty"`

	// Proxy Repository data
	*RepositoryProxy `json:"proxy,omitempty"`

	// Repository storage data
	*RepositoryStorage `json:"storage,omitempty"`

	// Yum Repository data
	*RepositoryYum `json:"yum,omitempty"`

	// Components
	*RepositoryComponent `json:"component,omitempty"`
}

Repository ...

type RepositoryApt added in v0.2.0

type RepositoryApt struct {
	Distribution string `json:"distribution,omitempty"`
	Flat         bool   `json:"flat"`
}

RepositoryApt contains data of hosted repositories of format Apt

type RepositoryAptSigning added in v0.2.0

type RepositoryAptSigning struct {
	Keypair    string `json:"keypair"`
	Passphrase string `json:"passphrase"`
}

RepositoryAptSigning contains signing data of hosted repositores of format Apt

type RepositoryBower added in v0.3.0

type RepositoryBower struct {
	RewritePackageUrls bool `json:"rewritePackageUrls"`
}

RepositoryBower contains data of bower repositories

type RepositoryCleanup

type RepositoryCleanup struct {
	PolicyNames []string `json:"policyNames"`
}

RepositoryCleanup ...

type RepositoryComponent added in v0.20.1

type RepositoryComponent struct {
	ProprietaryComponents bool `json:"proprietaryComponents"`
}

RepositoryComponent ...

type RepositoryDocker added in v0.2.0

type RepositoryDocker struct {
	ForceBasicAuth bool `json:"forceBasicAuth"`
	HTTPPort       *int `json:"httpPort,omitempty"`
	HTTPSPort      *int `json:"httpsPort,omitempty"`
	V1Enabled      bool `json:"v1Enabled"`
}

RepositoryDocker contains data of a Docker Repositoriy

type RepositoryDockerProxy added in v0.2.0

type RepositoryDockerProxy struct {
	IndexType string  `json:"indexType"`
	IndexURL  *string `json:"indexUrl,omitempty"`
}

RepositoryDockerProxy contains data of a Docker Proxy Repository

type RepositoryGroup added in v0.3.0

type RepositoryGroup struct {
	MemberNames []string `json:"memberNames,omitempty"`
}

RepositoryGroup contains repository group configuration data

type RepositoryHTTPClient added in v0.2.0

type RepositoryHTTPClient struct {
	Authentication *RepositoryHTTPClientAuthentication `json:"authentication,omitempty"`
	AutoBlock      bool                                `json:"autoBlock"`
	Blocked        bool                                `json:"blocked"`
	Connection     *RepositoryHTTPClientConnection     `json:"connection,omitempty"`
}

RepositoryHTTPClient ...

type RepositoryHTTPClientAuthentication added in v0.2.0

type RepositoryHTTPClientAuthentication struct {
	NTLMDomain string `json:"ntlmDomain,omitempty"`
	NTLMHost   string `json:"ntlmHost,omitempty"`
	Password   string `json:"password,omitempty"`
	Type       string `json:"type,omitempty"`
	Username   string `json:"username,omitempty"`
}

RepositoryHTTPClientAuthentication ...

type RepositoryHTTPClientConnection added in v0.2.0

type RepositoryHTTPClientConnection struct {
	EnableCircularRedirects *bool  `json:"enableCircularRedirects,omitempty"`
	EnableCookies           *bool  `json:"enableCookies,omitempty"`
	Retries                 *int   `json:"retries,omitempty"`
	Timeout                 *int   `json:"timeout,omitempty"`
	UserAgentSuffix         string `json:"userAgentSuffix,omitempty"`
}

RepositoryHTTPClientConnection ...

type RepositoryMaven added in v0.3.0

type RepositoryMaven struct {
	VersionPolicy string `json:"versionPolicy"`
	LayoutPolicy  string `json:"layoutPolicy"`
}

RepositoryMaven contains additional data of maven repository

type RepositoryNegativeCache added in v0.2.0

type RepositoryNegativeCache struct {
	Enabled bool `json:"enabled"`
	TTL     int  `json:"timeToLive"`
}

RepositoryNegativeCache ...

type RepositoryNugetProxy added in v0.20.1

type RepositoryNugetProxy struct {
	QueryCacheItemMaxAge int `json:"queryCacheItemMaxAge"`
}

RepositoryNugetProxy contains data specific to proxy repositories of format Nuget

type RepositoryProxy added in v0.2.0

type RepositoryProxy struct {
	ContentMaxAge  int    `json:"contentMaxAge"`
	MetadataMaxAge int    `json:"metadataMaxAge"`
	RemoteURL      string `json:"remoteUrl,omitempty"`
}

RepositoryProxy contains Proxy Repository data

type RepositoryStorage

type RepositoryStorage struct {
	BlobStoreName               string  `json:"blobStoreName,omitempty"`
	StrictContentTypeValidation bool    `json:"strictContentTypeValidation"`
	WritePolicy                 *string `json:"writePolicy,omitempty"`
}

RepositoryStorage contains repository storage

type RepositoryYum added in v0.20.1

type RepositoryYum struct {
	RepodataDepth int    `json:"repodataDepth"`
	DeployPolicy  string `json:"deployPolicy"`
}

RepositoryYum contains data of hosted repositories of format Yum

type Role

type Role struct {
	ID          string   `json:"id"`
	Name        string   `json:"name"`
	Description string   `json:"description"`
	Privileges  []string `json:"privileges"`
	Roles       []string `json:"roles"`
}

Role ...

type RoutingRule added in v0.20.1

type RoutingRule struct {
	// Name of the routing rule
	Name string `json:"name"`

	//Description of the routing rule
	Description string `json:"description,omitempty"`

	// The mode describe how to hande with mathing requests
	// Possible values: "BLOCK" or "ALLOW"
	Mode RoutingRuleMode `json:"mode"`

	// Regular expressions used to identify request paths that are allowed or blocked (depending on above mode)
	Matchers []string `json:"matchers"`
}

RoutingRule is like a filter you can apply to groups in terms of security access and general component retrieval, and can reduce the number of repositories within a group accessed in order to retrieve an component.

type RoutingRuleMode added in v0.20.1

type RoutingRuleMode string
const (
	RoutingRuleModeAllow RoutingRuleMode = "ALLOW"
	RoutingRuleModeBlock RoutingRuleMode = "BLOCK"
)

func (RoutingRuleMode) IsValid added in v0.20.1

func (m RoutingRuleMode) IsValid() error

IsValid checks the values of the enum RoutingRuleMode

type SAML added in v0.20.1

type SAML struct {
	EntityId                   string `json:"entityId,omitempty"`
	IdpMetadata                string `json:"idpMetadata"`
	UsernameAttribute          string `json:"usernameAttribute"`
	FirstNameAttribute         string `json:"firstNameAttribute,omitempty"`
	LastNameAttribute          string `json:"lastNameAttribute,omitempty"`
	EmailAttribute             string `json:"emailAttribute,omitempty"`
	GroupsAttribute            string `json:"groupsAttribute,omitempty"`
	ValidateResponseSignature  bool   `json:"validateResponseSignature,omitempty"`
	ValidateAssertionSignature bool   `json:"validateAssertionSignature,omitempty"`
}

SAML data structure

type Script added in v0.20.1

type Script struct {
	Name    string `json:"name"`
	Content string `json:"content"`
	Type    string `json:"type"`
}

Script describe a groovy script object that can be run on the nexus server

type User

type User struct {
	UserID       string   `json:"userId"`
	FirstName    string   `json:"firstName"`
	LastName     string   `json:"lastName"`
	EmailAddress string   `json:"emailAddress"`
	Password     string   `json:"password"`
	Status       string   `json:"status"`
	Source       string   `json:"source"`
	Roles        []string `json:"roles"`
}

User ..

type UserTokenConfiguration added in v0.20.1

type UserTokenConfiguration struct {
	Enabled        bool `json:"enabled"`
	ProtectContent bool `json:"protectContent"`
}

UserTokenConfiguration data structure

Jump to

Keyboard shortcuts

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