Categorygithub.com/docker/licensing
modulepackage
0.0.0-20190702165012-5f0f1276fe42
Repository: https://github.com/docker/licensing.git
Documentation: pkg.go.dev

# README

docker/licensing

Overview

licensing is a library for interacting with Docker issued product licenses. It facilitates user's authentication to the Docker Hub, provides a mechanism for retrieving a user's existing docker-issued subscriptions/licenses, detects and verifies locally stored licenses, and can be used to provision trial licenses for Docker Enterprise Edition.

License

docker/licensing is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

Usage

package main

import (
	"context"
	"fmt"
	"net/url"

	"github.com/docker/licensing"
	"github.com/docker/licensing/model"
)

const (
	hubURL      = "https://hub.docker.com"
	pubKey      = "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0Ka2lkOiBKN0xEOjY3VlI6TDVIWjpVN0JBOjJPNEc6NEFMMzpPRjJOOkpIR0I6RUZUSDo1Q1ZROk1GRU86QUVJVAoKTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUF5ZEl5K2xVN283UGNlWSs0K3MrQwpRNU9FZ0N5RjhDeEljUUlXdUs4NHBJaVpjaVk2NzMweUNZbndMU0tUbHcrVTZVQy9RUmVXUmlvTU5ORTVEczVUCllFWGJHRzZvbG0ycWRXYkJ3Y0NnKzJVVUgvT2NCOVd1UDZnUlBIcE1GTXN4RHpXd3ZheThKVXVIZ1lVTFVwbTEKSXYrbXE3bHA1blEvUnhyVDBLWlJBUVRZTEVNRWZHd20zaE1PL2dlTFBTK2hnS1B0SUhsa2c2L1djb3hUR29LUAo3OWQvd2FIWXhHTmw3V2hTbmVpQlN4YnBiUUFLazIxbGc3OThYYjd2WnlFQVRETXJSUjlNZUU2QWRqNUhKcFkzCkNveVJBUENtYUtHUkNLNHVvWlNvSXUwaEZWbEtVUHliYncwMDBHTyt3YTJLTjhVd2dJSW0waTVJMXVXOUdrcTQKempCeTV6aGdxdVVYYkc5YldQQU9ZcnE1UWE4MUR4R2NCbEp5SFlBcCtERFBFOVRHZzR6WW1YakpueFpxSEVkdQpHcWRldlo4WE1JMHVrZmtHSUkxNHdVT2lNSUlJclhsRWNCZi80Nkk4Z1FXRHp4eWNaZS9KR1grTEF1YXlYcnlyClVGZWhWTlVkWlVsOXdYTmFKQitrYUNxejVRd2FSOTNzR3crUVNmdEQwTnZMZTdDeU9IK0U2dmc2U3QvTmVUdmcKdjhZbmhDaVhJbFo4SE9mSXdOZTd0RUYvVWN6NU9iUHlrbTN0eWxyTlVqdDBWeUFtdHRhY1ZJMmlHaWhjVVBybQprNGxWSVo3VkQvTFNXK2k3eW9TdXJ0cHNQWGNlMnBLRElvMzBsSkdoTy8zS1VtbDJTVVpDcXpKMXlFbUtweXNICjVIRFc5Y3NJRkNBM2RlQWpmWlV2TjdVQ0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo="
	username    = "docker username"
	password    = "your password"
	appFeature  = "jump"
)

func panicOnErr(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {
	hubURI, err := url.Parse(hubURL)
	panicOnErr(err)

	// setup client
	c, err := licensing.New(&licensing.Config{
		BaseURI:    *hubURI,
		HTTPClient: nil,
		PublicKeys: []string{pubKey},
	})
	panicOnErr(err)

	// grab token
	ctx := context.Background()
	token, err := c.LoginViaAuth(ctx, username, password)
	panicOnErr(err)

	// fetch dockerID, if not already known
	id, err := c.GetHubUserByName(ctx, username)
	panicOnErr(err)

	subs, err := c.ListSubscriptions(ctx, token, id.ID)
	panicOnErr(err)

	// find first available subscription with given feature
	var featuredSub *model.Subscription
	for _, sub := range subs {
		_, ok := sub.GetFeatureValue(appFeature)
		if ok {
			featuredSub = sub
			break
		}
	}
	if featuredSub == nil {
		fmt.Println("account has no subscriptions with the desired feature entitlements")
		return
	}

	// download license file for this subscription
	subLic, err := c.DownloadLicenseFromHub(ctx, token, featuredSub.ID)
	panicOnErr(err)

	// verify license is issued by corresponding keypair and is not expired
	licFile, err := c.VerifyLicense(ctx, *subLic)
	panicOnErr(err)

	fmt.Println("license summary: ", c.SummarizeLicense(licFile))
}

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

New creates a new licensing Client.
StoreLicense will store the license on the host filesystem and swarm (if swarm is active).

# Variables

ErrUnlicensed returned when no license found.
ErrWorkerNode returned on a swarm worker node - lookup licenses on swarm managers.

# Structs

Config holds licensing client configuration.
RequestParams holds request parameters.

# Interfaces

Client represents the licensing package interface, including methods for authentication and interaction with Docker licensing, accounts, and billing services.
WrappedDockerClient provides methods useful for installing licenses to the wrapped docker engine or cluster.