diff --git a/cmd/cognito_test/jwtstuff/main.go b/cmd/cognito_test/jwtstuff/main.go new file mode 100644 index 00000000..58fee34b --- /dev/null +++ b/cmd/cognito_test/jwtstuff/main.go @@ -0,0 +1,73 @@ +package main + +import ( + "fmt" + + "queryorchestration/internal/rbac" // Replace with your actual module name +) + +func main() { + // Example with local key provider for testing + localProvider := rbac.NewLocalKeyProvider("private_key.pem", "public_key.pem") + + // Generate a mock JWT with multiple Cognito groups + groups := []string{"admins", "developers", "querybuilders", "uploaders", "exporters"} + tokenString, err := rbac.GenerateMockJWT(localProvider, "test-user-id", "test@example.com", groups) + if err != nil { + fmt.Println("Error generating token:", err) + return + } + + fmt.Printf("raw token: %s\n", tokenString) + + token, claims, err := rbac.ValidateJWT(tokenString, localProvider) + if err != nil { + fmt.Println("Token validation failed:", err) + return + } + + // Print token details for debugging + rbac.PrintTokenDetails(token) + + // Example with Cognito key provider for production + /* + cognitoProvider := rbac.NewCognitoKeyProvider("us-east-1", "us-east-1_XXXXXXXXX") + token, claims, err := rbac.ValidateJWT(tokenString, cognitoProvider) + */ + + if token.Valid { + // Extract the token details + details := rbac.ExtractTokenDetails(token, claims) + + fmt.Println("Token is valid.") + fmt.Println("User ID:", details.UserID) + fmt.Println("Email:", details.Email) + fmt.Println("Expires:", details.Expiration) + + if len(details.Groups) > 0 { + fmt.Println("User Groups:") + for _, group := range details.Groups { + fmt.Println("-", group) + } + } else { + fmt.Println("No groups found in token.") + } + + // Check if user is in a specific group + if rbac.HasGroup(claims, "admins") { + fmt.Println("User is an admin.") + } + + // Check if user is in any of these groups + if rbac.HasAnyGroup(claims, []string{"developers", "querybuilders"}) { + fmt.Println("User can modify or query data.") + } + + // Check if user is in all of these groups + if rbac.HasAllGroups(claims, []string{"uploaders", "exporters"}) { + fmt.Println("User can both upload and export data.") + } + } else { + fmt.Println("Invalid token") + } +} diff --git a/cmd/cognito_test/jwtstuff/private_key.pem b/cmd/cognito_test/jwtstuff/private_key.pem new file mode 100644 index 00000000..c6ad7f8f --- /dev/null +++ b/cmd/cognito_test/jwtstuff/private_key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDX5vunPVZ3fVNY +dwJzOvTsgoHWEQlkXs/FSjHz90HzLCloZ8/g7yqIEPwmxmHHkHVjMJryyhzoOhnU +6OYuDDFiTlWL6UFX74+EC/bVDVFWOU016R6WZX+paeIn7JV7pvovoG+WCRgaypUy +rJ4FGAMNel8uuq1KCrhV5UsQ6e6IGJ3bry+mRp9+Pqk91viWj1JVc1t+t2IfyJMY +/Hka0FiobnIAVSQPrI6ULoZul80ndB26mK2WRsr6A+S/DVHZLJ2qvtxrtdqXsK+m +tr+MKrBWFhcnMrNkYCCTEFWC4TiyYIXWGWhHSNj87CIaboggQ2ybLvAiulFvrgf8 +ES6LyRj3AgMBAAECggEAZ7MkMGG/xEjH3XfcD2jD901/+0fXkQQRG5vVfm7GmHwf +r2wdZta5QP2XfzBOCsKR/4B7DB6T3974RVFQLdHhbmxdnoP8xLXl4vC0MATjilyf +f0NnU6mQtdiLrc1uxyOei32t2wynLUccfmh2xc+Qt8qNKS60yRl5DJjDg245CdiW +ZhN40svLKfeVPallv2zrIZRbySEWXsCZRzBE+CYNrdRTWXSp45xCrRn+lseUxQXH +n+VoaP2KzHGgE4Lv5476EtVAq9G1yVN6Z0+8xWOiG9s+X3BNKPXWP4BGvg9tjBi0 +77U/hYrytMEPu8RV0ZR0zvlFVItqjujdKOJ9zJWTIQKBgQD/shNiXwCG/Ywrvs/g +lWNkvM+8iYyALtCuOR7rsuR0QP0OnC9HsZbttOwMwiC8yJiMZ7DuBWp7iqfjmPs7 +90dTxn4iQNkdoUE1DrobViPp+7pWIHqDH82r/Gy3nwMXLt/UFxi85lYd1Oo3us9C +ICvhFmzGAzIfiTKTXIJqJF9EqQKBgQDYKMe2ACP4rGVmJTSTkMn9c22gDTeCMEgI +dvlZOS7PJXAsznlnpTH+KLEyJhRenj08VxO6LcXI1urTe5G5aPStutBzods2X/iM +i1CmtOzeRGOkDVmqdYGgk0SXvTQg/z9MnwYCv+a904LQdMQ7TGgaoCYMJc3qWLO7 +p+/qGSZUnwKBgBvZZ2cVddc+EmBJXhbV7odwUSf1y0nCz5PKQOXnDB7lXSqUNEoY +u5mUVQlms24cYxEX0ht6l4hxJ6wQY3y6iBhFzEMq0Pr7L0D6I6cKkMrRUhBDZVSW +yC3tRmIRfaKuxk4xXc5lQAfrwr7jJ+PJ4T2Y1awTeQgaR1npf4LUB1RRAoGBAL+t +GbrX0Q33wUqcf0zDPXoT2wfr8GbvbVCkP2PRAyMIrbnttVYk9HnNl6NChRmJ8/8H +sCSN5i679StnDcd9vEo5uBJxWjOTUpE+EFxjXw+RUVHtzK8M18+OB2sOiaUg8f59 +nRTfGjsFzaAPitqSXFYP4O0wsLG3ylkDCAlsF8M9AoGALYTvOBdGJn/31XazCSeS +v2/iYnn41aw2DzxEYIn+QfkKH7Ctc39dfYV1jrhoI7m2T90GJKYfiZidd27fzmib +aPGQhCRFS7NPj2wI4kAFftRRtowIzHwEvVi1VvKWbyZII04FLU6aNVWrZE/E+2f5 +/4AmcI3dqS5PhGQEystcvhY= +-----END PRIVATE KEY----- diff --git a/cmd/cognito_test/jwtstuff/public_key.pem b/cmd/cognito_test/jwtstuff/public_key.pem new file mode 100644 index 00000000..66fcd0ac --- /dev/null +++ b/cmd/cognito_test/jwtstuff/public_key.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1+b7pz1Wd31TWHcCczr0 +7IKB1hEJZF7PxUox8/dB8ywpaGfP4O8qiBD8JsZhx5B1YzCa8soc6DoZ1OjmLgwx +Yk5Vi+lBV++PhAv21Q1RVjlNNekelmV/qWniJ+yVe6b6L6BvlgkYGsqVMqyeBRgD +DXpfLrqtSgq4VeVLEOnuiBid268vpkaffj6pPdb4lo9SVXNbfrdiH8iTGPx5GtBY +qG5yAFUkD6yOlC6GbpfNJ3QdupitlkbK+gPkvw1R2Sydqr7ca7Xal7Cvpra/jCqw +VhYXJzKzZGAgkxBVguE4smCF1hloR0jY/OwiGm6IIENsmy7wIrpRb64H/BEui8kY +9wIDAQAB +-----END PUBLIC KEY-----