@@ -11,6 +11,7 @@ import (
1111 "github.com/1Panel-dev/1Panel/backend/app/repo"
1212 "github.com/1Panel-dev/1Panel/backend/buserr"
1313 "github.com/1Panel-dev/1Panel/backend/constant"
14+ "github.com/1Panel-dev/1Panel/backend/global"
1415 "github.com/1Panel-dev/1Panel/backend/i18n"
1516 "github.com/1Panel-dev/1Panel/backend/utils/common"
1617 "github.com/1Panel-dev/1Panel/backend/utils/files"
@@ -41,6 +42,7 @@ type IWebsiteSSLService interface {
4142 Upload (req request.WebsiteSSLUpload ) error
4243 ObtainSSL (apply request.WebsiteSSLApply ) error
4344 SyncForRestart () error
45+ DownloadFile (id uint ) (* os.File , error )
4446}
4547
4648func NewIWebsiteSSLService () IWebsiteSSLService {
@@ -425,6 +427,34 @@ func (w WebsiteSSLService) Upload(req request.WebsiteSSLUpload) error {
425427 return websiteSSLRepo .Create (context .Background (), websiteSSL )
426428}
427429
430+ func (w WebsiteSSLService ) DownloadFile (id uint ) (* os.File , error ) {
431+ websiteSSL , err := websiteSSLRepo .GetFirst (commonRepo .WithByID (id ))
432+ if err != nil {
433+ return nil , err
434+ }
435+ fileOp := files .NewFileOp ()
436+ dir := path .Join (global .CONF .System .BaseDir , "1panel/tmp/ssl" , websiteSSL .PrimaryDomain )
437+ if fileOp .Stat (dir ) {
438+ if err = fileOp .DeleteDir (dir ); err != nil {
439+ return nil , err
440+ }
441+ }
442+ if err = fileOp .CreateDir (dir , 0666 ); err != nil {
443+ return nil , err
444+ }
445+ if err = fileOp .WriteFile (path .Join (dir , "fullchain.pem" ), strings .NewReader (websiteSSL .Pem ), 0644 ); err != nil {
446+ return nil , err
447+ }
448+ if err = fileOp .WriteFile (path .Join (dir , "privkey.pem" ), strings .NewReader (websiteSSL .PrivateKey ), 0644 ); err != nil {
449+ return nil , err
450+ }
451+ fileName := websiteSSL .PrimaryDomain + ".zip"
452+ if err = fileOp .Compress ([]string {path .Join (dir , "fullchain.pem" ), path .Join (dir , "privkey.pem" )}, dir , fileName , files .SdkZip ); err != nil {
453+ return nil , err
454+ }
455+ return os .Open (path .Join (dir , fileName ))
456+ }
457+
428458func (w WebsiteSSLService ) SyncForRestart () error {
429459 sslList , err := websiteSSLRepo .List ()
430460 if err != nil {
0 commit comments