|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- package http
-
- import (
- "context"
- "net/http"
-
- "github.com/gin-gonic/gin"
- "gitlink.org.cn/cloudream/common/pkgs/async"
- "gitlink.org.cn/cloudream/common/pkgs/logger"
- "gitlink.org.cn/cloudream/jcs-pub/client/internal/services"
- cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api"
- )
-
- type ServerEventChan = async.UnboundChannel[ServerEvent]
-
- type ServerEvent interface {
- IsServerEvent() bool
- }
-
- type ExitEvent struct {
- ServerEvent
- Err error
- }
-
- type Server struct {
- cfg *Config
- httpSrv *http.Server
- svc *services.Service
- eventChan *ServerEventChan
- }
-
- func NewServer(cfg *Config, svc *services.Service) *Server {
- return &Server{
- cfg: cfg,
- svc: svc,
- eventChan: async.NewUnboundChannel[ServerEvent](),
- }
- }
-
- func (s *Server) Start() *ServerEventChan {
- go func() {
- if s.cfg == nil {
- return
- }
-
- engine := gin.New()
- s.httpSrv = &http.Server{
- Addr: s.cfg.Listen,
- Handler: engine,
- }
-
- s.initRouters(engine)
-
- logger.Infof("start serving http at: %s", s.cfg.Listen)
-
- err := s.httpSrv.ListenAndServe()
- if err != nil {
- logger.Infof("http stopped with error: %s", err.Error())
- } else {
- logger.Infof("http stopped")
- }
-
- s.eventChan.Send(ExitEvent{Err: err})
- }()
- return s.eventChan
- }
-
- func (s *Server) Stop() {
- if s.httpSrv == nil {
- s.eventChan.Send(ExitEvent{})
- return
- }
-
- s.httpSrv.Shutdown(context.Background())
- }
-
- func (s *Server) initRouters(engine *gin.Engine) {
- rt := engine.Use()
-
- // initTemp(rt, s)
-
- s.routeV1(engine, rt)
-
- rt.GET(cliapi.ObjectListPathByPath, s.Object().ListByPath)
- rt.GET(cliapi.ObjectListByIDsPath, s.Object().ListByIDs)
- rt.GET(cliapi.ObjectDownloadPath, s.Object().Download)
- rt.GET(cliapi.ObjectDownloadByPathPath, s.Object().DownloadByPath)
- rt.POST(cliapi.ObjectUploadPath, s.Object().Upload)
- rt.GET(cliapi.ObjectGetPackageObjectsPath, s.Object().GetPackageObjects)
- rt.POST(cliapi.ObjectUpdateInfoPath, s.Object().UpdateInfo)
- rt.POST(cliapi.ObjectUpdateInfoByPathPath, s.Object().UpdateInfoByPath)
- rt.POST(cliapi.ObjectMovePath, s.Object().Move)
- rt.POST(cliapi.ObjectDeletePath, s.Object().Delete)
- rt.POST(cliapi.ObjectDeleteByPathPath, s.Object().DeleteByPath)
- rt.POST(cliapi.ObjectClonePath, s.Object().Clone)
-
- rt.GET(cliapi.PackageGetPath, s.Package().Get)
- rt.GET(cliapi.PackageGetByFullNamePath, s.Package().GetByFullName)
- rt.POST(cliapi.PackageCreatePath, s.Package().Create)
- rt.POST(cliapi.PackageCreateLoadPath, s.Package().CreateLoad)
- rt.POST(cliapi.PackageDeletePath, s.Package().Delete)
- rt.POST(cliapi.PackageClonePath, s.Package().Clone)
- rt.GET(cliapi.PackageListBucketPackagesPath, s.Package().ListBucketPackages)
- // rt.GET(cdsapi.PackageGetCachedStoragesPath, s.Package().GetCachedStorages)
-
- rt.POST(cliapi.UserSpaceLoadPackagePath, s.UserSpace().LoadPackage)
- rt.POST(cliapi.UserSpaceCreatePackagePath, s.UserSpace().CreatePackage)
- rt.GET(cliapi.UserSpaceGetPath, s.UserSpace().Get)
-
- // rt.POST(cdsapi.CacheMovePackagePath, s.Cache().MovePackage)
-
- rt.GET(cliapi.BucketGetByNamePath, s.Bucket().GetByName)
- rt.POST(cliapi.BucketCreatePath, s.Bucket().Create)
- rt.POST(cliapi.BucketDeletePath, s.Bucket().Delete)
- rt.GET(cliapi.BucketListAllPath, s.Bucket().ListAll)
- }
-
- func (s *Server) routeV1(eg *gin.Engine, rt gin.IRoutes) {
- v1 := eg.Group("/v1")
-
- awsAuth := NewAWSAuth(s.cfg)
-
- v1.GET(cliapi.ObjectListPathByPath, awsAuth.Auth, s.Object().ListByPath)
- v1.GET(cliapi.ObjectListByIDsPath, awsAuth.Auth, s.Object().ListByIDs)
- v1.GET(cliapi.ObjectDownloadPath, awsAuth.Auth, s.Object().Download)
- v1.GET(cliapi.ObjectDownloadByPathPath, awsAuth.Auth, s.Object().DownloadByPath)
- v1.POST(cliapi.ObjectUploadPath, awsAuth.AuthWithoutBody, s.Object().Upload)
- v1.GET(cliapi.ObjectGetPackageObjectsPath, awsAuth.Auth, s.Object().GetPackageObjects)
- v1.POST(cliapi.ObjectUpdateInfoPath, awsAuth.Auth, s.Object().UpdateInfo)
- v1.POST(cliapi.ObjectUpdateInfoByPathPath, awsAuth.Auth, s.Object().UpdateInfoByPath)
- v1.POST(cliapi.ObjectMovePath, awsAuth.Auth, s.Object().Move)
- v1.POST(cliapi.ObjectDeletePath, awsAuth.Auth, s.Object().Delete)
- v1.POST(cliapi.ObjectDeleteByPathPath, awsAuth.Auth, s.Object().DeleteByPath)
- v1.POST(cliapi.ObjectClonePath, awsAuth.Auth, s.Object().Clone)
-
- v1.GET(cliapi.PackageGetPath, awsAuth.Auth, s.Package().Get)
- v1.GET(cliapi.PackageGetByFullNamePath, awsAuth.Auth, s.Package().GetByFullName)
- v1.POST(cliapi.PackageCreatePath, awsAuth.Auth, s.Package().Create)
- v1.POST(cliapi.PackageCreateLoadPath, awsAuth.Auth, s.Package().CreateLoad)
- v1.POST(cliapi.PackageDeletePath, awsAuth.Auth, s.Package().Delete)
- v1.POST(cliapi.PackageClonePath, awsAuth.Auth, s.Package().Clone)
- v1.GET(cliapi.PackageListBucketPackagesPath, awsAuth.Auth, s.Package().ListBucketPackages)
- // v1.GET(cdsapi.PackageGetCachedStoragesPath, awsAuth.Auth, s.Package().GetCachedStorages)
-
- v1.POST(cliapi.UserSpaceLoadPackagePath, awsAuth.Auth, s.UserSpace().LoadPackage)
- v1.POST(cliapi.UserSpaceCreatePackagePath, awsAuth.Auth, s.UserSpace().CreatePackage)
- v1.GET(cliapi.UserSpaceGetPath, awsAuth.Auth, s.UserSpace().Get)
-
- // v1.POST(cdsapi.CacheMovePackagePath, awsAuth.Auth, s.Cache().MovePackage)
-
- v1.GET(cliapi.BucketGetByNamePath, awsAuth.Auth, s.Bucket().GetByName)
- v1.POST(cliapi.BucketCreatePath, awsAuth.Auth, s.Bucket().Create)
- v1.POST(cliapi.BucketDeletePath, awsAuth.Auth, s.Bucket().Delete)
- v1.GET(cliapi.BucketListAllPath, awsAuth.Auth, s.Bucket().ListAll)
-
- rt.POST(cliapi.ObjectNewMultipartUploadPath, s.Object().NewMultipartUpload)
- rt.POST(cliapi.ObjectUploadPartPath, s.Object().UploadPart)
- rt.POST(cliapi.ObjectCompleteMultipartUploadPath, s.Object().CompleteMultipartUpload)
-
- rt.GET(cliapi.PresignedObjectListByPathPath, awsAuth.PresignedAuth, s.Presigned().ObjectListByPath)
- rt.GET(cliapi.PresignedObjectDownloadByPathPath, awsAuth.PresignedAuth, s.Presigned().ObjectDownloadByPath)
- rt.GET(cliapi.PresignedObjectDownloadPath, awsAuth.PresignedAuth, s.Presigned().ObjectDownload)
- rt.POST(cliapi.PresignedObjectUploadPath, awsAuth.PresignedAuth, s.Presigned().ObjectUpload)
-
- rt.POST(cliapi.PresignedObjectNewMultipartUploadPath, awsAuth.PresignedAuth, s.Presigned().ObjectNewMultipartUpload)
- rt.POST(cliapi.PresignedObjectUploadPartPath, awsAuth.PresignedAuth, s.Presigned().ObjectUploadPart)
- rt.POST(cliapi.PresignedObjectCompleteMultipartUploadPath, awsAuth.PresignedAuth, s.Presigned().ObjectCompleteMultipartUpload)
-
- // 不需要鉴权
- rt.GET(cliapi.MountDumpStatusPath, s.Mount().DumpStatus)
- }
|