Skip to content

Commit

Permalink
デバッグ用
Browse files Browse the repository at this point in the history
  • Loading branch information
wolfmagnate committed Nov 5, 2023
1 parent 90fa3df commit f93e0da
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 31 deletions.
42 changes: 27 additions & 15 deletions back/domain/moneypool.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package domain

import (
"fmt"
"log"

"github.com/pkg/errors"
)
Expand Down Expand Up @@ -134,31 +135,42 @@ func (d *dbImpl) DeleteMoneyPool(id string) error {
}

func (d *dbImpl) IsMoneyPoolSharedWithUser(id string, userID string) (bool, error) {
// Check if the MoneyPool with the provided ID is of type Restricted.
log.Printf("ユーザー共有マネープールのチェック開始: MoneyPoolID=%s, UserID=%s", id, userID)

// マネープールのタイプをチェックします。
var poolType string
query := `SELECT type FROM MoneyPool WHERE id = ?`
query := `SELECT type FROM MoneyPool WHERE id = $1`
err := d.db.Get(&poolType, query, id)
if err != nil {
return false, err // or return false, nil to ignore error handling
log.Printf("マネープールのタイプの取得に失敗しました: %v", err)
return false, err
}
log.Printf("マネープールのタイプ: %s", poolType)

// If not Restricted, it's not shared with specific users, so return an error or false as per your error handling policy.
if poolType != PublicTypeRestricted {
return false, nil // Pool is not restricted, hence not explicitly shared
// マネープールがRestrictedタイプでない場合は、共有されていないと判断します。
if poolType != "Restricted" {
log.Println("マネープールはRestrictedタイプではありません。共有されていません。")
return false, nil
}

// マネープールが特定のユーザーと共有されているかどうかを確認します。
query = `
SELECT EXISTS (
SELECT 1 FROM UserGroupMembership ugm
INNER JOIN RestrictedPublicationScope rps ON ugm.GroupID = rps.GroupID
WHERE rps.PoolID = ? AND ugm.UserID = ?
)`

var exists bool
err = d.db.Get(&exists, query, id, userID)
SELECT COUNT(*) FROM UserGroupMembership ugm
INNER JOIN RestrictedPublicationScope rps ON ugm.GroupID = rps.GroupID
WHERE rps.PoolID = $1 AND ugm.UserID = $2
`
var count int
err = d.db.Get(&count, query, id, userID)
if err != nil {
log.Printf("共有状態の確認中にエラーが発生しました: %v", err)
return false, err
}

return exists, nil
if count > 0 {
log.Println("マネープールは指定ユーザーと共有されています。")
} else {
log.Println("マネープールは指定ユーザーと共有されていません。")
}

return count > 0, nil
}
29 changes: 13 additions & 16 deletions back/handler/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package handler
import (
"context"
"log"
"net/http"
"strings"

"github.com/coreos/go-oidc"
Expand All @@ -26,8 +27,6 @@ func userMiddleware() gin.HandlerFunc {
c.Next()
}
}

// ミドルウェア関数
func authMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// Authorizationヘッダーを取得する
Expand All @@ -36,27 +35,24 @@ func authMiddleware() gin.HandlerFunc {
if strings.HasPrefix(authHeader, "Bearer ") {
tokenString := strings.TrimPrefix(authHeader, "Bearer ")

// ここでトークン検証の処理を実行する
// OIDCプロバイダーのURLとクライアント情報
issuer := "https://auth.walnuts.dev"
clientID := "[email protected]"

// OIDCプロバイダーの構成情報を取得する
provider, err := oidc.NewProvider(context.Background(), issuer)
if err != nil {
// エラー処理はログ出力に留める
log.Printf("failed to get provider: %v\n", err)
c.Next()
log.Printf("OIDCプロバイダーの取得に失敗しました: %v", err)
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "内部サーバーエラー"})
return
}

// 公開鍵セットを取得してトークンを検証する
verifier := provider.Verifier(&oidc.Config{ClientID: clientID})
idToken, err := verifier.Verify(context.Background(), tokenString)
if err != nil {
// エラー処理はログ出力に留める
log.Printf("failed to verify token: %v\n", err)
c.Next()
log.Printf("トークンの検証に失敗しました: %v", err)
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "認証エラー"})
return
}

Expand All @@ -67,25 +63,26 @@ func authMiddleware() gin.HandlerFunc {

// クレームをデコードする
if err := idToken.Claims(&claims); err != nil {
log.Printf("failed to decode claims: %v\n", err)
c.Next()
log.Printf("クレームのデコードに失敗しました: %v", err)
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "クレームデコードエラー"})
return
}

// クレームの情報をコンテキストにセットする
c.Set("loginUserID", claims.Sub)

// もしもユーザーが存在しないのに認証に成功したならばユーザーを作成する
if _, err = uc.GetUser(claims.Sub); err != nil {
log.Printf("created new user %s\n", claims.Sub)
uc.NewUser(domain.User{ID: claims.Sub})
}
// ユーザーの存在確認と新規作成のロジックは省略...

log.Printf("ユーザー認証成功: ユーザーID %s", claims.Sub)
} else {
log.Printf("AuthorizationヘッダーがBearer形式ではありません。")
}

// 次のハンドラーまたはミドルウェアを実行
c.Next()
}
}

func NewHandler(usecase *usecase.Usecase) (*gin.Engine, error) {
uc = usecase
r := gin.Default()
Expand Down

0 comments on commit f93e0da

Please sign in to comment.