Skip to content

Commit

Permalink
Merge pull request #140 from kimthu09/mai
Browse files Browse the repository at this point in the history
Add BE Customer, ShopGeneral | BE, FE for Dashboard
  • Loading branch information
kimthu09 authored Jan 13, 2024
2 parents 85318ae + 19125bc commit 74504dc
Show file tree
Hide file tree
Showing 142 changed files with 9,039 additions and 2,094 deletions.
8 changes: 7 additions & 1 deletion backend/.env
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,10 @@ DB_DATABASE=bookstoremanagement
DB_HOST=bsm-mysql:3306

FILE_LOGGING=false
SECRET_KEY=123456789
SECRET_KEY=123456789

EMAILFROM=[email protected]
SMTPUSER=BookStore
SMTPASS=BookStoreIsTheBest
SMTHOST=localhost
SMTPORT=3356
11 changes: 8 additions & 3 deletions backend/common/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ const (
TableSupplierDebtReportDetail string = "SupplierDebtReportDetail"
TableStockReport string = "StockReport"
TableStockReportDetail string = "StockReportDetail"
TableShopGeneral string = "ShopGeneral"
TableCustomer string = "Customer"
)

// FEATURE CODE
Expand Down Expand Up @@ -64,9 +66,12 @@ const (
SupplierPayFeatureCode = "SUPPLIER_PAY"
SupplierUpdateInfoFeatureCode = "SUPPLIER_UPDATE_INFO"

UserViewFeatureCode = "USER_VIEW"
UserUpdateInfoFeatureCode = "USER_UPDATE_INFO"
UserUpdateStatusFeatureCode = "USER_UPDATE_STATE"
CustomerViewFeatureCode = "CUSTOMER_VIEW"
CustomerCreateFeatureCode = "CUSTOMER_CREATE"
CustomerUpdateInfoFeatureCode = "CUSTOMER_UPDATE_INFO"

UserViewFeatureCode = "USER_VIEW"
UserUpdateInfoFeatureCode = "USER_UPDATE_INFO"

InvoiceCreateFeatureCode = "INVOICE_CREATE"
InvoiceViewFeatureCode = "INVOICE_VIEW"
Expand Down
40 changes: 40 additions & 0 deletions backend/component/appctx/app_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,46 @@ type AppContext interface {
GetSecretKey() string
GetStaticPath() string
GetServerHost() string
GetEmailTo() string
GetSMTPUser() string
GetSMTPPass() string
GetSMTPHost() string
GetSMTPPort() int
}

type appCtx struct {
db *gorm.DB
secretKey string
staticPath string
serverHost string
emailTo string
smtpUser string
smtpPass string
smtpHost string
smtpPort int
}

func NewAppContext(
db *gorm.DB,
secretKey string,
staticPath string,
serverHost string,
emailTo string,
smtpUser string,
smtpPass string,
smtpHost string,
smtpPort int,
) *appCtx {
return &appCtx{
db: db,
secretKey: secretKey,
staticPath: staticPath,
serverHost: serverHost,
emailTo: emailTo,
smtpUser: smtpUser,
smtpPass: smtpPass,
smtpHost: smtpHost,
smtpPort: smtpPort,
}
}

Expand All @@ -47,3 +67,23 @@ func (ctx *appCtx) GetStaticPath() string {
func (ctx *appCtx) GetServerHost() string {
return ctx.serverHost
}

func (ctx *appCtx) GetEmailTo() string {
return ctx.emailTo
}

func (ctx *appCtx) GetSMTPUser() string {
return ctx.smtpUser
}

func (ctx *appCtx) GetSMTPPass() string {
return ctx.smtpPass
}

func (ctx *appCtx) GetSMTPHost() string {
return ctx.smtpHost
}

func (ctx *appCtx) GetSMTPPort() int {
return ctx.smtpPort
}
50 changes: 50 additions & 0 deletions backend/component/tokenprovider/jwt/jwt.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ type myClaims struct {
jwt.RegisteredClaims
}

type myClaimsForEmail struct {
Payload tokenprovider.TokenPayloadEmail `json:"payload"`
jwt.RegisteredClaims
}

func (j *jwtProvider) Generate(data tokenprovider.TokenPayload, expiry int) (*tokenprovider.Token, error) {
t := jwt.NewWithClaims(jwt.SigningMethodHS256, myClaims{
data,
Expand Down Expand Up @@ -64,6 +69,51 @@ func (j *jwtProvider) Validate(myToken string) (*tokenprovider.TokenPayload, err
return &claims.Payload, nil
}

func (j *jwtProvider) GenerateTokenForPayLoadEmail(data tokenprovider.TokenPayloadEmail, expiry int) (*tokenprovider.Token, error) {
t := jwt.NewWithClaims(jwt.SigningMethodHS256, myClaimsForEmail{
data,
jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Local().Add(time.Second * time.Duration(expiry))),
IssuedAt: jwt.NewNumericDate(time.Now().Local()),
},
})

myToken, err := t.SignedString([]byte(j.secret))
if err != nil {
return nil, err
}

// return the token
return &tokenprovider.Token{
Token: myToken,
Expiry: expiry,
Created: time.Now(),
}, nil
}

func (j *jwtProvider) ValidateTokenForPayLoadEmail(myToken string) (*tokenprovider.TokenPayloadEmail, error) {
token, err := jwt.ParseWithClaims(myToken, &myClaimsForEmail{}, func(token *jwt.Token) (interface{}, error) {
return []byte(j.secret), nil
})

if err != nil {
return nil, tokenprovider.ErrInvalidToken
}

// validate the token
if !token.Valid {
return nil, tokenprovider.ErrInvalidToken
}

claims, ok := token.Claims.(*myClaimsForEmail)
if !ok {
return nil, tokenprovider.ErrInvalidToken
}

// return the token
return &claims.Payload, nil
}

func (j *jwtProvider) String() string {
return "JWT implement Provider"
}
2 changes: 2 additions & 0 deletions backend/component/tokenprovider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,7 @@ package tokenprovider

type Provider interface {
Generate(data TokenPayload, expiry int) (*Token, error)
GenerateTokenForPayLoadEmail(data TokenPayloadEmail, expiry int) (*Token, error)
Validate(token string) (*TokenPayload, error)
ValidateTokenForPayLoadEmail(token string) (*TokenPayloadEmail, error)
}
4 changes: 4 additions & 0 deletions backend/component/tokenprovider/token.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ type TokenPayload struct {
Role string `json:"role"`
}

type TokenPayloadEmail struct {
Email string `json:"email"`
}

var (
ErrNotFound = common.NewCustomError(
errors.New("token not found"),
Expand Down
Loading

0 comments on commit 74504dc

Please sign in to comment.