MCPcopy Create free account
hub / github.com/1Panel-dev/1Panel / EditRootCert

Method EditRootCert

agent/app/service/ssh.go:536–585  ·  view source on GitHub ↗
(req dto.RootCertOperate)

Source from the content-addressed store, hash-verified

534}
535
536func (u *SSHService) EditRootCert(req dto.RootCertOperate) error {
537 currentUser, err := user.Current()
538 if err != nil {
539 return fmt.Errorf("load current user failed, err: %v", err)
540 }
541 certItem, _ := hostRepo.GetCert(repo.WithByID(req.ID))
542 if certItem.ID == 0 {
543 return buserr.New("ErrRecordNotFound")
544 }
545 oldPublicItem, err := os.ReadFile(certItem.PublicKeyPath)
546 if err != nil {
547 return err
548 }
549
550 var cert model.RootCert
551 if err := copier.Copy(&cert, req); err != nil {
552 return err
553 }
554 cert.PrivateKeyPath = fmt.Sprintf("%s/.ssh/%s", currentUser.HomeDir, req.Name)
555 cert.PublicKeyPath = fmt.Sprintf("%s/.ssh/%s.pub", currentUser.HomeDir, req.Name)
556 if err := os.WriteFile(cert.PrivateKeyPath, []byte(req.PrivateKey), constant.FilePerm); err != nil {
557 return err
558 }
559 if err := os.WriteFile(cert.PublicKeyPath, []byte(req.PublicKey), constant.FilePerm); err != nil {
560 return err
561 }
562
563 authFilePath := currentUser.HomeDir + "/.ssh/authorized_keys"
564 authItem, err := os.ReadFile(authFilePath)
565 if err != nil {
566 return err
567 }
568 oldPublic := strings.ReplaceAll(string(oldPublicItem), "\n", "")
569 newPublic := strings.ReplaceAll(string(req.PublicKey), "\n", "")
570 lines := strings.Split(string(authItem), "\n")
571 var newFiles []string
572 for i := 0; i < len(lines); i++ {
573 if len(lines[i]) != 0 && lines[i] != oldPublic && lines[i] != newPublic {
574 newFiles = append(newFiles, lines[i])
575 }
576 }
577 newFiles = append(newFiles, newPublic)
578 if err := os.WriteFile(authFilePath, []byte(strings.Join(newFiles, "\n")), constant.FilePerm); err != nil {
579 return fmt.Errorf("refresh authorized_keys failed, err: %v", err)
580 }
581 if len(cert.PassPhrase) != 0 {
582 cert.PassPhrase, _ = encrypt.StringEncrypt(cert.PassPhrase)
583 }
584 return hostRepo.SaveCert(&cert)
585}
586
587func (u *SSHService) SearchRootCerts(req dto.SearchWithPage) (int64, interface{}, error) {
588 total, records, err := hostRepo.PageCert(req.Page, req.PageSize)

Callers

nothing calls this directly

Calls 5

CopyMethod · 0.80
WriteFileMethod · 0.80
GetCertMethod · 0.65
WithByIDMethod · 0.65
SaveCertMethod · 0.65

Tested by

no test coverage detected