ribice/gorsk

View on GitHub
pkg/api/auth/service.go

Summary

Maintainability
A
35 mins
Test Coverage
package auth

import (
    "github.com/go-pg/pg/v9"
    "github.com/go-pg/pg/v9/orm"
    "github.com/labstack/echo"

    "github.com/ribice/gorsk"
    "github.com/ribice/gorsk/pkg/api/auth/platform/pgsql"
)

// New creates new iam service
func New(db *pg.DB, udb UserDB, j TokenGenerator, sec Securer, rbac RBAC) Auth {
    return Auth{
        db:   db,
        udb:  udb,
        tg:   j,
        sec:  sec,
        rbac: rbac,
    }
}

// Initialize initializes auth application service
func Initialize(db *pg.DB, j TokenGenerator, sec Securer, rbac RBAC) Auth {
    return New(db, pgsql.User{}, j, sec, rbac)
}

// Service represents auth service interface
type Service interface {
    Authenticate(echo.Context, string, string) (gorsk.AuthToken, error)
    Refresh(echo.Context, string) (string, error)
    Me(echo.Context) (gorsk.User, error)
}

// Auth represents auth application service
type Auth struct {
    db   *pg.DB
    udb  UserDB
    tg   TokenGenerator
    sec  Securer
    rbac RBAC
}

// UserDB represents user repository interface
type UserDB interface {
    View(orm.DB, int) (gorsk.User, error)
    FindByUsername(orm.DB, string) (gorsk.User, error)
    FindByToken(orm.DB, string) (gorsk.User, error)
    Update(orm.DB, gorsk.User) error
}

// TokenGenerator represents token generator (jwt) interface
type TokenGenerator interface {
    GenerateToken(gorsk.User) (string, error)
}

// Securer represents security interface
type Securer interface {
    HashMatchesPassword(string, string) bool
    Token(string) string
}

// RBAC represents role-based-access-control interface
type RBAC interface {
    User(echo.Context) gorsk.AuthUser
}