mirror of
https://github.com/blacktop/ipsw.git
synced 2026-06-07 12:27:36 +00:00
57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package appstore
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/golang-jwt/jwt/v5"
|
|
)
|
|
|
|
const defaultJWTLife = time.Minute
|
|
|
|
func (as *AppStore) createToken(life time.Duration) error {
|
|
|
|
if as.token != "" {
|
|
return nil
|
|
}
|
|
|
|
token := jwt.NewWithClaims(jwt.SigningMethodES256, jwt.RegisteredClaims{
|
|
Issuer: as.Iss,
|
|
IssuedAt: jwt.NewNumericDate(time.Now()),
|
|
ExpiresAt: jwt.NewNumericDate(time.Now().Add(life)), // Max 20 mins
|
|
Audience: jwt.ClaimStrings{"appstoreconnect-v1"},
|
|
})
|
|
token.Header["kid"] = as.Kid // Key ID
|
|
|
|
keyData, err := os.ReadFile(as.P8)
|
|
if err != nil {
|
|
return fmt.Errorf("createToken: failed to read p8 key: %v", err)
|
|
}
|
|
|
|
privateKey, err := jwt.ParseECPrivateKeyFromPEM(keyData)
|
|
if err != nil {
|
|
return fmt.Errorf("parsing private key: %w", err)
|
|
}
|
|
|
|
as.token, err = token.SignedString(privateKey)
|
|
if err != nil {
|
|
return fmt.Errorf("signing token: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetToken returns the current JWT token
|
|
func (as *AppStore) GetToken() string {
|
|
return as.token
|
|
}
|
|
|
|
// GenerateToken generates a new JWT token
|
|
func (as *AppStore) GenerateToken(life time.Duration) (string, error) {
|
|
if err := as.createToken(life); err != nil {
|
|
return "", err
|
|
}
|
|
return as.token, nil
|
|
}
|