tag v0.165.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.165.0 ---------------- * distro: move rhel9 into a generic distro (osbuild/images#1645) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * Revert "distro: drop `ImageType.BasePartitionTable()`" (osbuild/images#1691) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * Update dependencies 2025-07-20 (osbuild/images#1675) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger * defs: add missing `bootstrap_containers` (osbuild/images#1679) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * disk: handle adding `PReP` partition on PPC64/s390x (HMS-8884) (osbuild/images#1681) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * distro: bring per-distro checkOptions back (osbuild/images#1678) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * distro: cleanups in the pkg/distro/generic area (osbuild/images#1686) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * distro: move rhel8 into a generic distro (osbuild/images#1643) * Author: Michael Vogt, Reviewers: Nobody * distro: small followups for PR#1682 (osbuild/images#1689) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger, Tomáš Hozza * distro: unify transform/match into a single concept (osbuild/images#1682) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Tomáš Hozza * distros: de-duplicate runner build packages for centos10 (osbuild/images#1680) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * github: disable Go dep updates through dependabot (osbuild/images#1683) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza * repos: include almalinux 9.6 (osbuild/images#1677) * Author: Simon de Vlieger, Reviewers: Lukáš Zapletal, Tomáš Hozza * rhel9: wsl distribution config (osbuild/images#1694) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Sanne Raymaekers * test/manifests/all-customizations: don't embed local file via URI (osbuild/images#1684) * Author: Tomáš Hozza, Reviewers: Achilleas Koutsou, Brian C. Lane — Somewhere on the Internet, 2025-07-28 --- tag v0.166.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.166.0 ---------------- * customizations/subscription: conditionally enable semanage call (HMS-8866) (osbuild/images#1673) * Author: Sanne Raymaekers, Reviewers: Achilleas Koutsou, Michael Vogt * distro/rhel-10: versionlock shim-x64 in the azure-cvm image (osbuild/images#1697) * Author: Achilleas Koutsou, Reviewers: Michael Vogt, Simon de Vlieger * manifestmock: move container/pkg/commit mocks into helper (osbuild/images#1700) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * rhel9: `vagrant-libvirt`, `vagrant-virtualbox` (osbuild/images#1693) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Sanne Raymaekers * rhel{9,10}: centos WSL refinement (HMS-8922) (osbuild/images#1690) * Author: Simon de Vlieger, Reviewers: Ondřej Budai, Sanne Raymaekers, Tomáš Hozza — Somewhere on the Internet, 2025-07-29 --- tag v0.167.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.167.0 ---------------- * RHEL/Azure: drop obsolete WAAgentConfig keys [RHEL-93894] and remove loglevel kernel option [RHEL-102372] (osbuild/images#1611) * Author: Achilleas Koutsou, Reviewers: Michael Vogt, Ondřej Budai, Sanne Raymaekers * Update dependencies 2025-07-27 (osbuild/images#1699) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger * distro/rhel9: set default_kernel to kernel-uki-virt (osbuild/images#1704) * Author: Achilleas Koutsou, Reviewers: Ondřej Budai, Simon de Vlieger * distro: drop legacy loaders and update tests (osbuild/images#1687) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Tomáš Hozza * distro: fix issues with yaml distro definitions and enable yaml checks (osbuild/images#1702) * Author: Achilleas Koutsou, Reviewers: Michael Vogt, Ondřej Budai, Simon de Vlieger — Somewhere on the Internet, 2025-07-30 --- tag v0.168.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.168.0 ---------------- * distro: fix bug in variable substitution for static distros (osbuild/images#1710) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * rhel{9,10}: azure for non-RHEL (HMS-8949) (osbuild/images#1707) * Author: Simon de Vlieger, Reviewers: Achilleas Koutsou, Michael Vogt — Somewhere on the Internet, 2025-07-30 ---
100 lines
3.5 KiB
Go
100 lines
3.5 KiB
Go
package jwt
|
|
|
|
import (
|
|
"crypto"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
)
|
|
|
|
// Keyfunc will be used by the Parse methods as a callback function to supply
|
|
// the key for verification. The function receives the parsed, but unverified
|
|
// Token. This allows you to use properties in the Header of the token (such as
|
|
// `kid`) to identify which key to use.
|
|
//
|
|
// The returned any may be a single key or a VerificationKeySet containing
|
|
// multiple keys.
|
|
type Keyfunc func(*Token) (any, error)
|
|
|
|
// VerificationKey represents a public or secret key for verifying a token's signature.
|
|
type VerificationKey interface {
|
|
crypto.PublicKey | []uint8
|
|
}
|
|
|
|
// VerificationKeySet is a set of public or secret keys. It is used by the parser to verify a token.
|
|
type VerificationKeySet struct {
|
|
Keys []VerificationKey
|
|
}
|
|
|
|
// Token represents a JWT Token. Different fields will be used depending on
|
|
// whether you're creating or parsing/verifying a token.
|
|
type Token struct {
|
|
Raw string // Raw contains the raw token. Populated when you [Parse] a token
|
|
Method SigningMethod // Method is the signing method used or to be used
|
|
Header map[string]any // Header is the first segment of the token in decoded form
|
|
Claims Claims // Claims is the second segment of the token in decoded form
|
|
Signature []byte // Signature is the third segment of the token in decoded form. Populated when you Parse a token
|
|
Valid bool // Valid specifies if the token is valid. Populated when you Parse/Verify a token
|
|
}
|
|
|
|
// New creates a new [Token] with the specified signing method and an empty map
|
|
// of claims. Additional options can be specified, but are currently unused.
|
|
func New(method SigningMethod, opts ...TokenOption) *Token {
|
|
return NewWithClaims(method, MapClaims{}, opts...)
|
|
}
|
|
|
|
// NewWithClaims creates a new [Token] with the specified signing method and
|
|
// claims. Additional options can be specified, but are currently unused.
|
|
func NewWithClaims(method SigningMethod, claims Claims, opts ...TokenOption) *Token {
|
|
return &Token{
|
|
Header: map[string]any{
|
|
"typ": "JWT",
|
|
"alg": method.Alg(),
|
|
},
|
|
Claims: claims,
|
|
Method: method,
|
|
}
|
|
}
|
|
|
|
// SignedString creates and returns a complete, signed JWT. The token is signed
|
|
// using the SigningMethod specified in the token. Please refer to
|
|
// https://golang-jwt.github.io/jwt/usage/signing_methods/#signing-methods-and-key-types
|
|
// for an overview of the different signing methods and their respective key
|
|
// types.
|
|
func (t *Token) SignedString(key any) (string, error) {
|
|
sstr, err := t.SigningString()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
sig, err := t.Method.Sign(sstr, key)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return sstr + "." + t.EncodeSegment(sig), nil
|
|
}
|
|
|
|
// SigningString generates the signing string. This is the most expensive part
|
|
// of the whole deal. Unless you need this for something special, just go
|
|
// straight for the SignedString.
|
|
func (t *Token) SigningString() (string, error) {
|
|
h, err := json.Marshal(t.Header)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
c, err := json.Marshal(t.Claims)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return t.EncodeSegment(h) + "." + t.EncodeSegment(c), nil
|
|
}
|
|
|
|
// EncodeSegment encodes a JWT specific base64url encoding with padding
|
|
// stripped. In the future, this function might take into account a
|
|
// [TokenOption]. Therefore, this function exists as a method of [Token], rather
|
|
// than a global function.
|
|
func (*Token) EncodeSegment(seg []byte) string {
|
|
return base64.RawURLEncoding.EncodeToString(seg)
|
|
}
|