server/pkg/oauth/apple/apple_test.go
Chang lue Tsen 8addcc584b init: 1.0.0
2025-04-25 12:08:29 +09:00

77 lines
1.9 KiB
Go

package apple
import (
"context"
"fmt"
"log"
"net/http"
"testing"
"github.com/gin-gonic/gin"
)
func TestAppleLogin(t *testing.T) {
t.Skipf("Skip TestAppleLogin test")
router := gin.Default()
router.LoadHTMLGlob("./*")
router.GET("/apple", func(c *gin.Context) {
c.HTML(http.StatusOK, "apple.html", gin.H{
"title": "Gin HTML Example",
"message": "Hello, Gin!",
})
})
router.POST("/auth/apple/callback", func(c *gin.Context) {
var req CallbackRequest
if err := c.ShouldBind(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request data"})
return
}
handleAppleCallBack(c, req)
})
_ = router.RunTLS(":8443", "certificate.crt", "private.key")
}
func handleAppleCallBack(ctx context.Context, request CallbackRequest) {
fmt.Printf("request: %+v\n", request)
// validate the token
client, err := New(Config{
TeamID: TeamID,
ClientID: ClientID,
KeyID: KeyID,
ClientSecret: ClientSecret,
RedirectURI: "https://test.ppanel.dev:8443/auth/apple/callback",
})
if err != nil {
fmt.Println("error creating apple client: " + err.Error())
return
}
resp, err := client.VerifyWebToken(ctx, request.Code)
if err != nil {
fmt.Println("error verifying token: " + err.Error())
return
}
if resp.Error != "" {
fmt.Printf("apple returned an error: %s - %s\n", resp.Error, resp.ErrorDescription)
return
}
// Get the unique user ID
unique, err := GetUniqueID(resp.IDToken)
if err != nil {
fmt.Println("error getting unique id: " + err.Error())
return
}
// Get the email
claim, err := GetClaims(resp.IDToken)
if err != nil {
fmt.Println("failed to get claims: " + err.Error())
return
}
email := (*claim)["email"]
emailVerified := (*claim)["email_verified"]
isPrivateEmail := (*claim)["is_private_email"]
// Voila!
log.Printf("\n unique: %s \n email: %s \n email_verified: %v \n is_private_email: %v", unique, email, emailVerified, isPrivateEmail)
}