♻️ 转移到 Dealer #1
							
								
								
									
										57
									
								
								.idea/workspace.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										57
									
								
								.idea/workspace.xml
									
									
									
										generated
									
									
									
								
							| @@ -4,9 +4,17 @@ | |||||||
|     <option name="autoReloadType" value="ALL" /> |     <option name="autoReloadType" value="ALL" /> | ||||||
|   </component> |   </component> | ||||||
|   <component name="ChangeListManager"> |   <component name="ChangeListManager"> | ||||||
|     <list default="true" id="18dd0d68-b4b8-40db-9734-9119b5c848bd" name="更改" comment=":zap: Add cache into metadata fetching"> |     <list default="true" id="18dd0d68-b4b8-40db-9734-9119b5c848bd" name="更改" comment=":recycle: Moved onto dealer"> | ||||||
|       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> |       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> | ||||||
|       <change beforePath="$PROJECT_DIR$/pkg/internal/server/api/attachments_api.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/api/attachments_api.go" afterDir="false" /> |       <change beforePath="$PROJECT_DIR$/go.mod" beforeDir="false" afterPath="$PROJECT_DIR$/go.mod" afterDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/go.sum" beforeDir="false" afterPath="$PROJECT_DIR$/go.sum" afterDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/pkg/internal/gap/client.go" beforeDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/pkg/internal/gap/server.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/gap/server.go" afterDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/pkg/internal/server/exts/auth.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/server/exts/auth.go" afterDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/pkg/internal/services/auth.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/internal/services/auth.go" afterDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/pkg/internal/services/jwt.go" beforeDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/pkg/main.go" beforeDir="false" afterPath="$PROJECT_DIR$/pkg/main.go" afterDir="false" /> | ||||||
|  |       <change beforePath="$PROJECT_DIR$/settings.toml" beforeDir="false" afterPath="$PROJECT_DIR$/settings.toml" afterDir="false" /> | ||||||
|     </list> |     </list> | ||||||
|     <option name="SHOW_DIALOG" value="false" /> |     <option name="SHOW_DIALOG" value="false" /> | ||||||
|     <option name="HIGHLIGHT_CONFLICTS" value="true" /> |     <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||||||
| @@ -36,28 +44,28 @@ | |||||||
|     <option name="hideEmptyMiddlePackages" value="true" /> |     <option name="hideEmptyMiddlePackages" value="true" /> | ||||||
|     <option name="showLibraryContents" value="true" /> |     <option name="showLibraryContents" value="true" /> | ||||||
|   </component> |   </component> | ||||||
|   <component name="PropertiesComponent">{ |   <component name="PropertiesComponent"><![CDATA[{ | ||||||
|   "keyToString": { |   "keyToString": { | ||||||
|     "DefaultGoTemplateProperty": "Go File", |     "DefaultGoTemplateProperty": "Go File", | ||||||
|     "Go Build.Backend.executor": "Run", |     "Go Build.Backend.executor": "Run", | ||||||
|     "Go 构建.Backend.executor": "Run", |     "Go 构建.Backend.executor": "Run", | ||||||
|     "RunOnceActivity.ShowReadmeOnStart": "true", |     "RunOnceActivity.ShowReadmeOnStart": "true", | ||||||
|     "RunOnceActivity.go.formatter.settings.were.checked": "true", |     "RunOnceActivity.go.formatter.settings.were.checked": "true", | ||||||
|     "RunOnceActivity.go.migrated.go.modules.settings": "true", |     "RunOnceActivity.go.migrated.go.modules.settings": "true", | ||||||
|     "RunOnceActivity.go.modules.automatic.dependencies.download": "true", |     "RunOnceActivity.go.modules.automatic.dependencies.download": "true", | ||||||
|     "RunOnceActivity.go.modules.go.list.on.any.changes.was.set": "true", |     "RunOnceActivity.go.modules.go.list.on.any.changes.was.set": "true", | ||||||
|     "git-widget-placeholder": "master", |     "git-widget-placeholder": "refactor/dealer", | ||||||
|     "go.import.settings.migrated": "true", |     "go.import.settings.migrated": "true", | ||||||
|     "go.sdk.automatically.set": "true", |     "go.sdk.automatically.set": "true", | ||||||
|     "last_opened_file_path": "/Users/littlesheep/Documents/Projects/Hydrogen/Paperclip/pkg/internal/grpc", |     "last_opened_file_path": "/Users/littlesheep/Documents/Projects/Hydrogen/Paperclip/pkg/internal/grpc", | ||||||
|     "node.js.detected.package.eslint": "true", |     "node.js.detected.package.eslint": "true", | ||||||
|     "node.js.selected.package.eslint": "(autodetect)", |     "node.js.selected.package.eslint": "(autodetect)", | ||||||
|     "nodejs_package_manager_path": "npm", |     "nodejs_package_manager_path": "npm", | ||||||
|     "run.code.analysis.last.selected.profile": "pProject Default", |     "run.code.analysis.last.selected.profile": "pProject Default", | ||||||
|     "settings.editor.selected.configurable": "preferences.lookFeel", |     "settings.editor.selected.configurable": "preferences.lookFeel", | ||||||
|     "vue.rearranger.settings.migration": "true" |     "vue.rearranger.settings.migration": "true" | ||||||
|   } |   } | ||||||
| }</component> | }]]></component> | ||||||
|   <component name="RecentsManager"> |   <component name="RecentsManager"> | ||||||
|     <key name="CopyFile.RECENT_KEYS"> |     <key name="CopyFile.RECENT_KEYS"> | ||||||
|       <recent name="$PROJECT_DIR$/pkg/internal/grpc" /> |       <recent name="$PROJECT_DIR$/pkg/internal/grpc" /> | ||||||
| @@ -116,7 +124,8 @@ | |||||||
|     <MESSAGE value=":arrow_up: Upgrade Passport to fix bug" /> |     <MESSAGE value=":arrow_up: Upgrade Passport to fix bug" /> | ||||||
|     <MESSAGE value=":ambulance: Fix getting user panic" /> |     <MESSAGE value=":ambulance: Fix getting user panic" /> | ||||||
|     <MESSAGE value=":zap: Add cache into metadata fetching" /> |     <MESSAGE value=":zap: Add cache into metadata fetching" /> | ||||||
|     <option name="LAST_COMMIT_MESSAGE" value=":zap: Add cache into metadata fetching" /> |     <MESSAGE value=":recycle: Moved onto dealer" /> | ||||||
|  |     <option name="LAST_COMMIT_MESSAGE" value=":recycle: Moved onto dealer" /> | ||||||
|   </component> |   </component> | ||||||
|   <component name="VgoProject"> |   <component name="VgoProject"> | ||||||
|     <settings-migrated>true</settings-migrated> |     <settings-migrated>true</settings-migrated> | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								go.mod
									
									
									
									
									
								
							| @@ -3,12 +3,10 @@ module git.solsynth.dev/hydrogen/paperclip | |||||||
| go 1.21.6 | go 1.21.6 | ||||||
|  |  | ||||||
| require ( | require ( | ||||||
| 	git.solsynth.dev/hydrogen/passport v0.0.0-20240623083719-86b2cd81400a | 	git.solsynth.dev/hydrogen/dealer v0.0.0-20240714155615-ad83100677ab | ||||||
| 	github.com/go-playground/validator/v10 v10.17.0 | 	github.com/go-playground/validator/v10 v10.17.0 | ||||||
| 	github.com/gofiber/fiber/v2 v2.52.4 | 	github.com/gofiber/fiber/v2 v2.52.4 | ||||||
| 	github.com/golang-jwt/jwt/v5 v5.2.0 |  | ||||||
| 	github.com/google/uuid v1.6.0 | 	github.com/google/uuid v1.6.0 | ||||||
| 	github.com/hashicorp/consul/api v1.29.1 |  | ||||||
| 	github.com/json-iterator/go v1.1.12 | 	github.com/json-iterator/go v1.1.12 | ||||||
| 	github.com/minio/minio-go/v7 v7.0.70 | 	github.com/minio/minio-go/v7 v7.0.70 | ||||||
| 	github.com/robfig/cron/v3 v3.0.1 | 	github.com/robfig/cron/v3 v3.0.1 | ||||||
| @@ -34,6 +32,7 @@ require ( | |||||||
| 	github.com/go-playground/universal-translator v0.18.1 // indirect | 	github.com/go-playground/universal-translator v0.18.1 // indirect | ||||||
| 	github.com/go-sql-driver/mysql v1.7.1 // indirect | 	github.com/go-sql-driver/mysql v1.7.1 // indirect | ||||||
| 	github.com/goccy/go-json v0.10.2 // indirect | 	github.com/goccy/go-json v0.10.2 // indirect | ||||||
|  | 	github.com/hashicorp/consul/api v1.29.1 // indirect | ||||||
| 	github.com/hashicorp/errwrap v1.1.0 // indirect | 	github.com/hashicorp/errwrap v1.1.0 // indirect | ||||||
| 	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect | 	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect | ||||||
| 	github.com/hashicorp/go-hclog v1.6.3 // indirect | 	github.com/hashicorp/go-hclog v1.6.3 // indirect | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								go.sum
									
									
									
									
									
								
							| @@ -1,7 +1,5 @@ | |||||||
| git.solsynth.dev/hydrogen/passport v0.0.0-20240623081149-7ddbea8bcb86 h1:cxjBOhemnyxf49CJyPmnt1RKFHerK45rXXBPwsIFrhA= | git.solsynth.dev/hydrogen/dealer v0.0.0-20240714155615-ad83100677ab h1:hxqJkL4Ha3Y3SfeSA9TPKBJK6mtY88Q2uialHsDbGf0= | ||||||
| git.solsynth.dev/hydrogen/passport v0.0.0-20240623081149-7ddbea8bcb86/go.mod h1:tUr7x1v0trG3ALDacdDuhJiPRPgFhJ1Si9OqNlYbgSk= | git.solsynth.dev/hydrogen/dealer v0.0.0-20240714155615-ad83100677ab/go.mod h1:eZwAwP7ahL7TO8GWBlYFYDdjlna+8zHYbDfNabnuUEU= | ||||||
| git.solsynth.dev/hydrogen/passport v0.0.0-20240623083719-86b2cd81400a h1:oxNbS6Q+sSOfYUQTcx9/awCmlk/lpVP997hgpMmFsyw= |  | ||||||
| git.solsynth.dev/hydrogen/passport v0.0.0-20240623083719-86b2cd81400a/go.mod h1:tUr7x1v0trG3ALDacdDuhJiPRPgFhJ1Si9OqNlYbgSk= |  | ||||||
| github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= | github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= | ||||||
| github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||||
| github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||||
| @@ -64,8 +62,6 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x | |||||||
| github.com/gofiber/fiber/v2 v2.52.4 h1:P+T+4iK7VaqUsq2PALYEfBBo6bJZ4q3FP8cZ84EggTM= | github.com/gofiber/fiber/v2 v2.52.4 h1:P+T+4iK7VaqUsq2PALYEfBBo6bJZ4q3FP8cZ84EggTM= | ||||||
| github.com/gofiber/fiber/v2 v2.52.4/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= | github.com/gofiber/fiber/v2 v2.52.4/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= | ||||||
| github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | ||||||
| github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw= |  | ||||||
| github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= |  | ||||||
| github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= | github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= | ||||||
| github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= | github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= | ||||||
| github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= | github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= | ||||||
|   | |||||||
| @@ -1,12 +0,0 @@ | |||||||
| package gap |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"git.solsynth.dev/hydrogen/passport/pkg/hyper" |  | ||||||
| 	"github.com/spf13/viper" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| var H *hyper.HyperConn |  | ||||||
|  |  | ||||||
| func NewHyperClient() { |  | ||||||
| 	H = hyper.NewHyperConn(viper.GetString("consul.addr")) |  | ||||||
| } |  | ||||||
| @@ -2,38 +2,41 @@ package gap | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"git.solsynth.dev/hydrogen/dealer/pkg/hyper" | ||||||
|  | 	"git.solsynth.dev/hydrogen/dealer/pkg/proto" | ||||||
|  | 	"github.com/rs/zerolog/log" | ||||||
| 	"strings" | 	"strings" | ||||||
|  |  | ||||||
| 	"github.com/hashicorp/consul/api" |  | ||||||
| 	"github.com/spf13/viper" | 	"github.com/spf13/viper" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func Register() error { | var H *hyper.HyperConn | ||||||
| 	cfg := api.DefaultConfig() |  | ||||||
| 	cfg.Address = viper.GetString("consul.addr") |  | ||||||
|  |  | ||||||
| 	client, err := api.NewClient(cfg) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
|  | func RegisterService() error { | ||||||
| 	grpcBind := strings.SplitN(viper.GetString("grpc_bind"), ":", 2) | 	grpcBind := strings.SplitN(viper.GetString("grpc_bind"), ":", 2) | ||||||
|  | 	httpBind := strings.SplitN(viper.GetString("bind"), ":", 2) | ||||||
|  |  | ||||||
| 	outboundIp, _ := GetOutboundIP() | 	outboundIp, _ := GetOutboundIP() | ||||||
| 	port, _ := strconv.Atoi(grpcBind[1]) |  | ||||||
|  |  | ||||||
| 	registration := new(api.AgentServiceRegistration) | 	grpcOutbound := fmt.Sprintf("%s:%s", outboundIp, grpcBind[1]) | ||||||
| 	registration.ID = viper.GetString("id") | 	httpOutbound := fmt.Sprintf("%s:%s", outboundIp, httpBind[1]) | ||||||
| 	registration.Name = "Hydrogen.Paperclip" |  | ||||||
| 	registration.Address = outboundIp.String() | 	var err error | ||||||
| 	registration.Port = port | 	H, err = hyper.NewHyperConn(viper.GetString("dealer.addr"), &proto.ServiceInfo{ | ||||||
| 	registration.Check = &api.AgentServiceCheck{ | 		Id:       viper.GetString("id"), | ||||||
| 		GRPC:                           fmt.Sprintf("%s:%s", outboundIp, grpcBind[1]), | 		Type:     hyper.ServiceTypeFileProvider, | ||||||
| 		Timeout:                        "5s", | 		Label:    "Paperclip", | ||||||
| 		Interval:                       "1m", | 		GrpcAddr: grpcOutbound, | ||||||
| 		DeregisterCriticalServiceAfter: "3m", | 		HttpAddr: &httpOutbound, | ||||||
|  | 	}) | ||||||
|  | 	if err == nil { | ||||||
|  | 		go func() { | ||||||
|  | 			err := H.KeepRegisterService() | ||||||
|  | 			if err != nil { | ||||||
|  | 				log.Error().Err(err).Msg("An error occurred while registering service...") | ||||||
|  | 			} | ||||||
|  | 		}() | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return client.Agent().ServiceRegister(registration) | 	return err | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| package exts | package exts | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"git.solsynth.dev/hydrogen/dealer/pkg/proto" | ||||||
| 	"git.solsynth.dev/hydrogen/paperclip/pkg/internal/services" | 	"git.solsynth.dev/hydrogen/paperclip/pkg/internal/services" | ||||||
| 	"git.solsynth.dev/hydrogen/passport/pkg/proto" |  | ||||||
| 	"github.com/gofiber/fiber/v2" | 	"github.com/gofiber/fiber/v2" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func LinkAccountMiddleware(c *fiber.Ctx) error { | func LinkAccountMiddleware(c *fiber.Ctx) error { | ||||||
| 	if val, ok := c.Locals("p_user").(*proto.Userinfo); ok { | 	if val, ok := c.Locals("p_user").(*proto.UserInfo); ok { | ||||||
| 		if account, err := services.LinkAccount(val); err != nil { | 		if account, err := services.LinkAccount(val); err != nil { | ||||||
| 			return fiber.NewError(fiber.StatusInternalServerError, err.Error()) | 			return fiber.NewError(fiber.StatusInternalServerError, err.Error()) | ||||||
| 		} else { | 		} else { | ||||||
|   | |||||||
| @@ -3,14 +3,14 @@ package services | |||||||
| import ( | import ( | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"git.solsynth.dev/hydrogen/dealer/pkg/proto" | ||||||
| 	"git.solsynth.dev/hydrogen/paperclip/pkg/internal/database" | 	"git.solsynth.dev/hydrogen/paperclip/pkg/internal/database" | ||||||
| 	"git.solsynth.dev/hydrogen/paperclip/pkg/internal/models" | 	"git.solsynth.dev/hydrogen/paperclip/pkg/internal/models" | ||||||
| 	"git.solsynth.dev/hydrogen/passport/pkg/proto" |  | ||||||
| 	"gorm.io/gorm" | 	"gorm.io/gorm" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func LinkAccount(userinfo *proto.Userinfo) (models.Account, error) { | func LinkAccount(userinfo *proto.UserInfo) (models.Account, error) { | ||||||
| 	var account models.Account | 	var account models.Account | ||||||
| 	if userinfo == nil { | 	if userinfo == nil { | ||||||
| 		return account, fmt.Errorf("remote userinfo was not found") | 		return account, fmt.Errorf("remote userinfo was not found") | ||||||
|   | |||||||
| @@ -1,81 +0,0 @@ | |||||||
| package services |  | ||||||
|  |  | ||||||
| import ( |  | ||||||
| 	"fmt" |  | ||||||
| 	"github.com/gofiber/fiber/v2" |  | ||||||
| 	"time" |  | ||||||
|  |  | ||||||
| 	"github.com/golang-jwt/jwt/v5" |  | ||||||
| 	"github.com/spf13/viper" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| type PayloadClaims struct { |  | ||||||
| 	jwt.RegisteredClaims |  | ||||||
|  |  | ||||||
| 	Type string `json:"typ"` |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const ( |  | ||||||
| 	JwtAccessType  = "access" |  | ||||||
| 	JwtRefreshType = "refresh" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| const ( |  | ||||||
| 	CookieAccessKey  = "passport_auth_key" |  | ||||||
| 	CookieRefreshKey = "passport_refresh_key" |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| func EncodeJwt(id string, typ, sub string, aud []string, exp time.Time) (string, error) { |  | ||||||
| 	tk := jwt.NewWithClaims(jwt.SigningMethodHS512, PayloadClaims{ |  | ||||||
| 		jwt.RegisteredClaims{ |  | ||||||
| 			Subject:   sub, |  | ||||||
| 			Audience:  aud, |  | ||||||
| 			Issuer:    fmt.Sprintf("https://%s", viper.GetString("domain")), |  | ||||||
| 			ExpiresAt: jwt.NewNumericDate(exp), |  | ||||||
| 			NotBefore: jwt.NewNumericDate(time.Now()), |  | ||||||
| 			IssuedAt:  jwt.NewNumericDate(time.Now()), |  | ||||||
| 			ID:        id, |  | ||||||
| 		}, |  | ||||||
| 		typ, |  | ||||||
| 	}) |  | ||||||
|  |  | ||||||
| 	return tk.SignedString([]byte(viper.GetString("secret"))) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func DecodeJwt(str string) (PayloadClaims, error) { |  | ||||||
| 	var claims PayloadClaims |  | ||||||
| 	tk, err := jwt.ParseWithClaims(str, &claims, func(token *jwt.Token) (interface{}, error) { |  | ||||||
| 		if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { |  | ||||||
| 			return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"]) |  | ||||||
| 		} |  | ||||||
| 		return []byte(viper.GetString("secret")), nil |  | ||||||
| 	}) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return claims, err |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if data, ok := tk.Claims.(*PayloadClaims); ok { |  | ||||||
| 		return *data, nil |  | ||||||
| 	} else { |  | ||||||
| 		return claims, fmt.Errorf("unexpected token payload: not payload claims type") |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func SetJwtCookieSet(c *fiber.Ctx, access, refresh string) { |  | ||||||
| 	c.Cookie(&fiber.Cookie{ |  | ||||||
| 		Name:     CookieAccessKey, |  | ||||||
| 		Value:    access, |  | ||||||
| 		Domain:   viper.GetString("security.cookie_domain"), |  | ||||||
| 		SameSite: viper.GetString("security.cookie_samesite"), |  | ||||||
| 		Expires:  time.Now().Add(60 * time.Minute), |  | ||||||
| 		Path:     "/", |  | ||||||
| 	}) |  | ||||||
| 	c.Cookie(&fiber.Cookie{ |  | ||||||
| 		Name:     CookieRefreshKey, |  | ||||||
| 		Value:    refresh, |  | ||||||
| 		Domain:   viper.GetString("security.cookie_domain"), |  | ||||||
| 		SameSite: viper.GetString("security.cookie_samesite"), |  | ||||||
| 		Expires:  time.Now().Add(24 * 30 * time.Hour), |  | ||||||
| 		Path:     "/", |  | ||||||
| 	}) |  | ||||||
| } |  | ||||||
| @@ -44,10 +44,8 @@ func main() { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Connect other services | 	// Connect other services | ||||||
| 	if err := gap.Register(); err != nil { | 	if err := gap.RegisterService(); err != nil { | ||||||
| 		log.Error().Err(err).Msg("An error occurred when registering service to gateway...") | 		log.Error().Err(err).Msg("An error occurred when registering service to dealer...") | ||||||
| 	} else { |  | ||||||
| 		gap.NewHyperClient() |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Configure timed tasks | 	// Configure timed tasks | ||||||
|   | |||||||
| @@ -12,8 +12,8 @@ accepts_usage = ["p.avatar", "p.banner", "i.attachment", "m.attachment"] | |||||||
| database = false | database = false | ||||||
| print_routes = false | print_routes = false | ||||||
|  |  | ||||||
| [consul] | [dealer] | ||||||
| addr = "127.0.0.1:8500" | addr = "127.0.0.1:7442" | ||||||
|  |  | ||||||
| [security] | [security] | ||||||
| cookie_domain = "localhost" | cookie_domain = "localhost" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user