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.
docker/licensing is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.
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"
)
funcpanicOnErr(errerror) {
iferr!=nil {
panic(err)
}
}
funcmain() {
hubURI, err:=url.Parse(hubURL)
panicOnErr(err)
// setup clientc, err:=licensing.New(&licensing.Config{
BaseURI: *hubURI,
HTTPClient: nil,
PublicKeys: []string{pubKey},
})
panicOnErr(err)
// grab tokenctx:=context.Background()
token, err:=c.LoginViaAuth(ctx, username, password)
panicOnErr(err)
// fetch dockerID, if not already knownid, err:=c.GetHubUserByName(ctx, username)
panicOnErr(err)
subs, err:=c.ListSubscriptions(ctx, token, id.ID)
panicOnErr(err)
// find first available subscription with given featurevarfeaturedSub*model.Subscriptionfor_, sub:=rangesubs {
_, ok:=sub.GetFeatureValue(appFeature)
ifok {
featuredSub=subbreak
}
}
iffeaturedSub==nil {
fmt.Println("account has no subscriptions with the desired feature entitlements")
return
}
// download license file for this subscriptionsubLic, err:=c.DownloadLicenseFromHub(ctx, token, featuredSub.ID)
panicOnErr(err)
// verify license is issued by corresponding keypair and is not expiredlicFile, err:=c.VerifyLicense(ctx, *subLic)
panicOnErr(err)
fmt.Println("license summary: ", c.SummarizeLicense(licFile))
}