Add IAM scaffold modules
This commit is contained in:
7
iam/cmd/iam/main.go
Normal file
7
iam/cmd/iam/main.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "todo-vibe-coding/iam/internal/service"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
_ = service.NewIAM()
|
||||||
|
}
|
||||||
3
iam/deployments/README.md
Normal file
3
iam/deployments/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# deployments
|
||||||
|
|
||||||
|
Deployment manifests placeholder.
|
||||||
8
iam/docs/README.md
Normal file
8
iam/docs/README.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# IAM Demo Structure
|
||||||
|
|
||||||
|
This folder is a lightweight example showing how files can be split by responsibility.
|
||||||
|
|
||||||
|
- cmd/iam/main.go creates the service.
|
||||||
|
- internal/service wires dependencies.
|
||||||
|
- internal/auth/jwt holds token logic.
|
||||||
|
- internal/repo provides data access interfaces.
|
||||||
7
iam/internal/api/http/router.go
Normal file
7
iam/internal/api/http/router.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package http
|
||||||
|
|
||||||
|
type Router struct{}
|
||||||
|
|
||||||
|
func NewRouter() *Router {
|
||||||
|
return &Router{}
|
||||||
|
}
|
||||||
7
iam/internal/api/middleware/logging.go
Normal file
7
iam/internal/api/middleware/logging.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
type Logger struct{}
|
||||||
|
|
||||||
|
func NewLogger() *Logger {
|
||||||
|
return &Logger{}
|
||||||
|
}
|
||||||
7
iam/internal/auth/jwks/jwks.go
Normal file
7
iam/internal/auth/jwks/jwks.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package jwks
|
||||||
|
|
||||||
|
type Store struct{}
|
||||||
|
|
||||||
|
func NewStore() *Store {
|
||||||
|
return &Store{}
|
||||||
|
}
|
||||||
9
iam/internal/auth/jwt/manager.go
Normal file
9
iam/internal/auth/jwt/manager.go
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package jwt
|
||||||
|
|
||||||
|
type Manager struct {
|
||||||
|
secret string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewManager(secret string) *Manager {
|
||||||
|
return &Manager{secret: secret}
|
||||||
|
}
|
||||||
7
iam/internal/auth/keys/keys.go
Normal file
7
iam/internal/auth/keys/keys.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package keys
|
||||||
|
|
||||||
|
type Manager struct{}
|
||||||
|
|
||||||
|
func NewManager() *Manager {
|
||||||
|
return &Manager{}
|
||||||
|
}
|
||||||
7
iam/internal/auth/refresh/refresh.go
Normal file
7
iam/internal/auth/refresh/refresh.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package refresh
|
||||||
|
|
||||||
|
type Store struct{}
|
||||||
|
|
||||||
|
func NewStore() *Store {
|
||||||
|
return &Store{}
|
||||||
|
}
|
||||||
7
iam/internal/auth/revoke/revoke.go
Normal file
7
iam/internal/auth/revoke/revoke.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package revoke
|
||||||
|
|
||||||
|
type Tracker struct{}
|
||||||
|
|
||||||
|
func NewTracker() *Tracker {
|
||||||
|
return &Tracker{}
|
||||||
|
}
|
||||||
9
iam/internal/config/config.go
Normal file
9
iam/internal/config/config.go
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
Issuer string
|
||||||
|
}
|
||||||
|
|
||||||
|
func Default() Config {
|
||||||
|
return Config{Issuer: "iam-demo"}
|
||||||
|
}
|
||||||
11
iam/internal/domain/models.go
Normal file
11
iam/internal/domain/models.go
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package domain
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
ID int64
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Role struct {
|
||||||
|
ID int64
|
||||||
|
Name string
|
||||||
|
}
|
||||||
5
iam/internal/errors/errors.go
Normal file
5
iam/internal/errors/errors.go
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package errors
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
var ErrUnauthorized = errors.New("unauthorized")
|
||||||
20
iam/internal/repo/user_store.go
Normal file
20
iam/internal/repo/user_store.go
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
package repo
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
ID int64
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserStore interface {
|
||||||
|
FindByID(id int64) (*User, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type inMemoryUserStore struct{}
|
||||||
|
|
||||||
|
func NewInMemoryUserStore() UserStore {
|
||||||
|
return &inMemoryUserStore{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *inMemoryUserStore) FindByID(id int64) (*User, error) {
|
||||||
|
return &User{ID: id, Name: "demo"}, nil
|
||||||
|
}
|
||||||
18
iam/internal/service/iam.go
Normal file
18
iam/internal/service/iam.go
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"todo-vibe-coding/iam/internal/auth/jwt"
|
||||||
|
"todo-vibe-coding/iam/internal/repo"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IAM struct {
|
||||||
|
tokens *jwt.Manager
|
||||||
|
users repo.UserStore
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewIAM() *IAM {
|
||||||
|
return &IAM{
|
||||||
|
tokens: jwt.NewManager("dev-secret"),
|
||||||
|
users: repo.NewInMemoryUserStore(),
|
||||||
|
}
|
||||||
|
}
|
||||||
7
iam/internal/transport/events.go
Normal file
7
iam/internal/transport/events.go
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package transport
|
||||||
|
|
||||||
|
type Emitter struct{}
|
||||||
|
|
||||||
|
func NewEmitter() *Emitter {
|
||||||
|
return &Emitter{}
|
||||||
|
}
|
||||||
5
iam/internal/util/ids.go
Normal file
5
iam/internal/util/ids.go
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package util
|
||||||
|
|
||||||
|
func NextID() int64 {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
3
iam/migrations/README.md
Normal file
3
iam/migrations/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# migrations
|
||||||
|
|
||||||
|
Database migrations placeholder.
|
||||||
3
iam/pkg/README.md
Normal file
3
iam/pkg/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# pkg
|
||||||
|
|
||||||
|
Shared packages for reuse across services (placeholder).
|
||||||
3
iam/scripts/README.md
Normal file
3
iam/scripts/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# scripts
|
||||||
|
|
||||||
|
Ops scripts placeholder.
|
||||||
3
iam/test/README.md
Normal file
3
iam/test/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# test
|
||||||
|
|
||||||
|
Integration tests placeholder.
|
||||||
Reference in New Issue
Block a user