| package registry |
| |
| import ( |
| "net/http" |
| |
| "github.com/docker/docker/cliconfig" |
| ) |
| |
| type Service struct { |
| Config *ServiceConfig |
| } |
| |
| // NewService returns a new instance of Service ready to be |
| // installed no an engine. |
| func NewService(options *Options) *Service { |
| return &Service{ |
| Config: NewServiceConfig(options), |
| } |
| } |
| |
| // Auth contacts the public registry with the provided credentials, |
| // and returns OK if authentication was sucessful. |
| // It can be used to verify the validity of a client's credentials. |
| func (s *Service) Auth(authConfig *cliconfig.AuthConfig) (string, error) { |
| addr := authConfig.ServerAddress |
| if addr == "" { |
| // Use the official registry address if not specified. |
| addr = IndexServerAddress() |
| } |
| index, err := s.ResolveIndex(addr) |
| if err != nil { |
| return "", err |
| } |
| endpoint, err := NewEndpoint(index, nil) |
| if err != nil { |
| return "", err |
| } |
| authConfig.ServerAddress = endpoint.String() |
| return Login(authConfig, endpoint) |
| } |
| |
| // Search queries the public registry for images matching the specified |
| // search terms, and returns the results. |
| func (s *Service) Search(term string, authConfig *cliconfig.AuthConfig, headers map[string][]string) (*SearchResults, error) { |
| repoInfo, err := s.ResolveRepository(term) |
| if err != nil { |
| return nil, err |
| } |
| |
| // *TODO: Search multiple indexes. |
| endpoint, err := repoInfo.GetEndpoint(http.Header(headers)) |
| if err != nil { |
| return nil, err |
| } |
| r, err := NewSession(endpoint.client, authConfig, endpoint) |
| if err != nil { |
| return nil, err |
| } |
| return r.SearchRepositories(repoInfo.GetSearchTerm()) |
| } |
| |
| // ResolveRepository splits a repository name into its components |
| // and configuration of the associated registry. |
| func (s *Service) ResolveRepository(name string) (*RepositoryInfo, error) { |
| return s.Config.NewRepositoryInfo(name) |
| } |
| |
| // ResolveIndex takes indexName and returns index info |
| func (s *Service) ResolveIndex(name string) (*IndexInfo, error) { |
| return s.Config.NewIndexInfo(name) |
| } |