Compare commits
5 Commits
892f093d93
...
be03a6c686
Author | SHA1 | Date |
---|---|---|
Derrick Hammer | be03a6c686 | |
Derrick Hammer | 29d6db2009 | |
Derrick Hammer | 40309311bd | |
Derrick Hammer | a9d153a22f | |
Derrick Hammer | a14dad43ed |
|
@ -5,6 +5,7 @@ import (
|
|||
"git.lumeweb.com/LumeWeb/portal/logger"
|
||||
"github.com/kataras/iris/v12"
|
||||
"go.uber.org/zap"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func tryParseRequest(r interface{}, ctx iris.Context) (interface{}, bool) {
|
||||
|
@ -70,3 +71,16 @@ func (c Controller) respondJSON(data interface{}) {
|
|||
logger.Get().Error("failed to generate response", zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
func getCurrentUserId(ctx iris.Context) uint {
|
||||
usr := ctx.User()
|
||||
|
||||
if usr == nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
sid, _ := usr.GetID()
|
||||
userID, _ := strconv.Atoi(sid)
|
||||
|
||||
return uint(userID)
|
||||
}
|
||||
|
|
|
@ -112,6 +112,25 @@ func (f *FilesController) GetStatusBy(cidString string) {
|
|||
f.respondJSON(&response.StatusResponse{Status: statusCode})
|
||||
|
||||
}
|
||||
|
||||
func (f *FilesController) PostPinBy(cidString string) {
|
||||
ctx := f.Ctx
|
||||
|
||||
hashHex, valid := validateCid(cidString, true, ctx)
|
||||
|
||||
if !valid {
|
||||
return
|
||||
}
|
||||
|
||||
err := files.Pin(hashHex, getCurrentUserId(ctx))
|
||||
if internalError(ctx, err) {
|
||||
logger.Get().Error(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
f.Ctx.StatusCode(iris.StatusCreated)
|
||||
}
|
||||
|
||||
func validateCid(cidString string, validateStatus bool, ctx iris.Context) (string, bool) {
|
||||
_, err := cid.Valid(cidString)
|
||||
if sendError(ctx, err, iris.StatusBadRequest) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package middleware
|
||||
|
||||
import (
|
||||
"git.lumeweb.com/LumeWeb/portal/service/account"
|
||||
"git.lumeweb.com/LumeWeb/portal/service/auth"
|
||||
"github.com/kataras/iris/v12"
|
||||
)
|
||||
|
@ -13,8 +14,15 @@ func VerifyJwt(ctx iris.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
if err := auth.VerifyLoginToken(token); err != nil {
|
||||
acct, err := auth.VerifyLoginToken(token)
|
||||
|
||||
if err != nil {
|
||||
ctx.StopWithError(iris.StatusUnauthorized, auth.ErrInvalidToken)
|
||||
return
|
||||
}
|
||||
|
||||
err = ctx.SetUser(account.NewUser(acct))
|
||||
if err != nil {
|
||||
ctx.StopWithError(iris.StatusInternalServerError, err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
package account
|
||||
|
||||
import (
|
||||
"git.lumeweb.com/LumeWeb/portal/model"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type User struct {
|
||||
account *model.Account
|
||||
}
|
||||
|
||||
func (u User) GetID() (string, error) {
|
||||
return strconv.Itoa(int(u.account.ID)), nil
|
||||
}
|
||||
|
||||
func NewUser(account *model.Account) *User {
|
||||
return &User{account: account}
|
||||
}
|
|
@ -167,30 +167,30 @@ func Logout(token string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func VerifyLoginToken(token string) error {
|
||||
func VerifyLoginToken(token string) (*model.Account, error) {
|
||||
uvt, err := jwt.Decode([]byte(token))
|
||||
if err != nil {
|
||||
return ErrInvalidToken
|
||||
return nil, ErrInvalidToken
|
||||
}
|
||||
|
||||
var claim jwt.Claims
|
||||
|
||||
err = uvt.Claims(&claim)
|
||||
if err != nil {
|
||||
return ErrInvalidToken
|
||||
return nil, ErrInvalidToken
|
||||
}
|
||||
|
||||
session := model.LoginSession{}
|
||||
if err := db.Get().Model(session).Where("token = ?", token).First(&session).Error; err != nil {
|
||||
logger.Get().Debug(ErrInvalidToken.Error(), zap.Error(err), zap.String("token", token))
|
||||
return ErrInvalidToken
|
||||
return nil, ErrInvalidToken
|
||||
}
|
||||
|
||||
_, err = jwt.Verify(jwt.HS256, sharedKey, []byte(token), blocklist)
|
||||
if err != nil {
|
||||
db.Get().Delete(&session)
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return nil
|
||||
return &session.Account, nil
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue