@@ -31,15 +31,13 @@ import (
31
31
"time"
32
32
33
33
"cloud.google.com/go/compute/metadata"
34
- "github.com/coreos/go-oidc/v3/oidc"
35
34
"github.com/fullsailor/pkcs7"
36
- "github.com/golang-jwt/jwt"
35
+ "github.com/golang-jwt/jwt/v4 "
37
36
"github.com/google/uuid"
38
37
"github.com/moby/moby/pkg/namesgenerator"
39
38
"github.com/prometheus/client_golang/prometheus"
40
39
"github.com/stretchr/testify/assert"
41
40
"github.com/stretchr/testify/require"
42
- "golang.org/x/oauth2"
43
41
"golang.org/x/xerrors"
44
42
"google.golang.org/api/idtoken"
45
43
"google.golang.org/api/option"
@@ -1020,152 +1018,6 @@ func NewAWSInstanceIdentity(t *testing.T, instanceID string) (awsidentity.Certif
1020
1018
}
1021
1019
}
1022
1020
1023
- type OIDCConfig struct {
1024
- key * rsa.PrivateKey
1025
- issuer string
1026
- // These are optional
1027
- refreshToken string
1028
- oidcTokenExpires func () time.Time
1029
- tokenSource func () (* oauth2.Token , error )
1030
- }
1031
-
1032
- func WithRefreshToken (token string ) func (cfg * OIDCConfig ) {
1033
- return func (cfg * OIDCConfig ) {
1034
- cfg .refreshToken = token
1035
- }
1036
- }
1037
-
1038
- func WithTokenExpires (expFunc func () time.Time ) func (cfg * OIDCConfig ) {
1039
- return func (cfg * OIDCConfig ) {
1040
- cfg .oidcTokenExpires = expFunc
1041
- }
1042
- }
1043
-
1044
- func WithTokenSource (src func () (* oauth2.Token , error )) func (cfg * OIDCConfig ) {
1045
- return func (cfg * OIDCConfig ) {
1046
- cfg .tokenSource = src
1047
- }
1048
- }
1049
-
1050
- func NewOIDCConfig (t * testing.T , issuer string , opts ... func (cfg * OIDCConfig )) * OIDCConfig {
1051
- t .Helper ()
1052
-
1053
- block , _ := pem .Decode ([]byte (testRSAPrivateKey ))
1054
- pkey , err := x509 .ParsePKCS1PrivateKey (block .Bytes )
1055
- require .NoError (t , err )
1056
-
1057
- if issuer == "" {
1058
- issuer = "https://coder.com"
1059
- }
1060
-
1061
- cfg := & OIDCConfig {
1062
- key : pkey ,
1063
- issuer : issuer ,
1064
- }
1065
- for _ , opt := range opts {
1066
- opt (cfg )
1067
- }
1068
- return cfg
1069
- }
1070
-
1071
- func (* OIDCConfig ) AuthCodeURL (state string , _ ... oauth2.AuthCodeOption ) string {
1072
- return "/?state=" + url .QueryEscape (state )
1073
- }
1074
-
1075
- type tokenSource struct {
1076
- src func () (* oauth2.Token , error )
1077
- }
1078
-
1079
- func (s tokenSource ) Token () (* oauth2.Token , error ) {
1080
- return s .src ()
1081
- }
1082
-
1083
- func (cfg * OIDCConfig ) TokenSource (context.Context , * oauth2.Token ) oauth2.TokenSource {
1084
- if cfg .tokenSource == nil {
1085
- return nil
1086
- }
1087
- return tokenSource {
1088
- src : cfg .tokenSource ,
1089
- }
1090
- }
1091
-
1092
- func (cfg * OIDCConfig ) Exchange (_ context.Context , code string , _ ... oauth2.AuthCodeOption ) (* oauth2.Token , error ) {
1093
- token , err := base64 .StdEncoding .DecodeString (code )
1094
- if err != nil {
1095
- return nil , xerrors .Errorf ("decode code: %w" , err )
1096
- }
1097
-
1098
- var exp time.Time
1099
- if cfg .oidcTokenExpires != nil {
1100
- exp = cfg .oidcTokenExpires ()
1101
- }
1102
-
1103
- return (& oauth2.Token {
1104
- AccessToken : "token" ,
1105
- RefreshToken : cfg .refreshToken ,
1106
- Expiry : exp ,
1107
- }).WithExtra (map [string ]interface {}{
1108
- "id_token" : string (token ),
1109
- }), nil
1110
- }
1111
-
1112
- func (cfg * OIDCConfig ) EncodeClaims (t * testing.T , claims jwt.MapClaims ) string {
1113
- t .Helper ()
1114
-
1115
- if _ , ok := claims ["exp" ]; ! ok {
1116
- claims ["exp" ] = time .Now ().Add (time .Hour ).UnixMilli ()
1117
- }
1118
-
1119
- if _ , ok := claims ["iss" ]; ! ok {
1120
- claims ["iss" ] = cfg .issuer
1121
- }
1122
-
1123
- if _ , ok := claims ["sub" ]; ! ok {
1124
- claims ["sub" ] = "testme"
1125
- }
1126
-
1127
- signed , err := jwt .NewWithClaims (jwt .SigningMethodRS256 , claims ).SignedString (cfg .key )
1128
- require .NoError (t , err )
1129
-
1130
- return base64 .StdEncoding .EncodeToString ([]byte (signed ))
1131
- }
1132
-
1133
- func (cfg * OIDCConfig ) OIDCConfig (t * testing.T , userInfoClaims jwt.MapClaims , opts ... func (cfg * coderd.OIDCConfig )) * coderd.OIDCConfig {
1134
- // By default, the provider can be empty.
1135
- // This means it won't support any endpoints!
1136
- provider := & oidc.Provider {}
1137
- if userInfoClaims != nil {
1138
- resp , err := json .Marshal (userInfoClaims )
1139
- require .NoError (t , err )
1140
- srv := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
1141
- w .WriteHeader (http .StatusOK )
1142
- _ , _ = w .Write (resp )
1143
- }))
1144
- t .Cleanup (srv .Close )
1145
- cfg := & oidc.ProviderConfig {
1146
- UserInfoURL : srv .URL ,
1147
- }
1148
- provider = cfg .NewProvider (context .Background ())
1149
- }
1150
- newCFG := & coderd.OIDCConfig {
1151
- OAuth2Config : cfg ,
1152
- Verifier : oidc .NewVerifier (cfg .issuer , & oidc.StaticKeySet {
1153
- PublicKeys : []crypto.PublicKey {cfg .key .Public ()},
1154
- }, & oidc.Config {
1155
- SkipClientIDCheck : true ,
1156
- }),
1157
- Provider : provider ,
1158
- UsernameField : "preferred_username" ,
1159
- EmailField : "email" ,
1160
- AuthURLParams : map [string ]string {"access_type" : "offline" },
1161
- GroupField : "groups" ,
1162
- }
1163
- for _ , opt := range opts {
1164
- opt (newCFG )
1165
- }
1166
- return newCFG
1167
- }
1168
-
1169
1021
// NewAzureInstanceIdentity returns a metadata client and ID token validator for faking
1170
1022
// instance authentication for Azure.
1171
1023
func NewAzureInstanceIdentity (t * testing.T , instanceID string ) (x509.VerifyOptions , * http.Client ) {
@@ -1254,22 +1106,6 @@ func SDKError(t *testing.T, err error) *codersdk.Error {
1254
1106
return cerr
1255
1107
}
1256
1108
1257
- const testRSAPrivateKey = `-----BEGIN RSA PRIVATE KEY-----
1258
- MIICXQIBAAKBgQDLets8+7M+iAQAqN/5BVyCIjhTQ4cmXulL+gm3v0oGMWzLupUS
1259
- v8KPA+Tp7dgC/DZPfMLaNH1obBBhJ9DhS6RdS3AS3kzeFrdu8zFHLWF53DUBhS92
1260
- 5dCAEuJpDnNizdEhxTfoHrhuCmz8l2nt1pe5eUK2XWgd08Uc93h5ij098wIDAQAB
1261
- AoGAHLaZeWGLSaen6O/rqxg2laZ+jEFbMO7zvOTruiIkL/uJfrY1kw+8RLIn+1q0
1262
- wLcWcuEIHgKKL9IP/aXAtAoYh1FBvRPLkovF1NZB0Je/+CSGka6wvc3TGdvppZJe
1263
- rKNcUvuOYLxkmLy4g9zuY5qrxFyhtIn2qZzXEtLaVOHzPQECQQDvN0mSajpU7dTB
1264
- w4jwx7IRXGSSx65c+AsHSc1Rj++9qtPC6WsFgAfFN2CEmqhMbEUVGPv/aPjdyWk9
1265
- pyLE9xR/AkEA2cGwyIunijE5v2rlZAD7C4vRgdcMyCf3uuPcgzFtsR6ZhyQSgLZ8
1266
- YRPuvwm4cdPJMmO3YwBfxT6XGuSc2k8MjQJBAI0+b8prvpV2+DCQa8L/pjxp+VhR
1267
- Xrq2GozrHrgR7NRokTB88hwFRJFF6U9iogy9wOx8HA7qxEbwLZuhm/4AhbECQC2a
1268
- d8h4Ht09E+f3nhTEc87mODkl7WJZpHL6V2sORfeq/eIkds+H6CJ4hy5w/bSw8tjf
1269
- sz9Di8sGIaUbLZI2rd0CQQCzlVwEtRtoNCyMJTTrkgUuNufLP19RZ5FpyXxBO5/u
1270
- QastnN77KfUwdj3SJt44U/uh1jAIv4oSLBr8HYUkbnI8
1271
- -----END RSA PRIVATE KEY-----`
1272
-
1273
1109
func DeploymentValues (t testing.TB ) * codersdk.DeploymentValues {
1274
1110
var cfg codersdk.DeploymentValues
1275
1111
opts := cfg .Options ()
0 commit comments