summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2023-09-23 22:28:18 +0700
committerShulhan <ms@kilabit.info>2023-09-23 22:39:49 +0700
commit9c709996d9519d6552e44182440438d080b8789d (patch)
tree3c7e3b3a7d24e22b97bf436f0925aad6ce3f24bf
parentb91779462ac492d237ed89bd631ffa74aa8be03f (diff)
downloadawwan-9c709996d9519d6552e44182440438d080b8789d.tar.xz
all: move the parseTemplate as method of Session generateFileInput
-rw-r--r--session.go63
-rw-r--r--template.go61
2 files changed, 59 insertions, 65 deletions
diff --git a/session.go b/session.go
index 528cb87..fb848b8 100644
--- a/session.go
+++ b/session.go
@@ -5,11 +5,14 @@ package awwan
import (
"crypto/rsa"
+ "errors"
"fmt"
+ "io/fs"
"os"
"os/exec"
"path/filepath"
"strings"
+ "text/template"
"github.com/shuLhan/share/lib/ascii"
"github.com/shuLhan/share/lib/ini"
@@ -108,7 +111,7 @@ func (ses *Session) Copy(stmt *Statement) (err error) {
return fmt.Errorf("%s: two or more destination arguments is given", logp)
}
- src, err = parseTemplate(ses, stmt.cmd)
+ src, err = ses.generateFileInput(stmt.cmd)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -174,7 +177,7 @@ func (ses *Session) Put(stmt *Statement) (err error) {
return fmt.Errorf("%s: two or more destination arguments is given", logp)
}
- local, err = parseTemplate(ses, stmt.cmd)
+ local, err = ses.generateFileInput(stmt.cmd)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -212,7 +215,7 @@ func (ses *Session) SudoCopy(req *Request, stmt *Statement, withParseInput bool)
}
if withParseInput {
- src, err = parseTemplate(ses, stmt.cmd)
+ src, err = ses.generateFileInput(stmt.cmd)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -315,7 +318,7 @@ func (ses *Session) SudoPut(stmt *Statement) (err error) {
// Apply the session variables into local file to be copied first, and
// save them into cache directory.
- local, err = parseTemplate(ses, stmt.cmd)
+ local, err = ses.generateFileInput(stmt.cmd)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -465,6 +468,58 @@ func (ses *Session) executeScriptOnRemote(req *Request, pos linePosition) {
}
}
+// generateFileInput read the content of file input "in", apply the session
+// variables, and write the result to ".cache" directory, and return the
+// output file path as "out".
+//
+// For example, if the input file path is "{{.BaseDir}}/a/b/script" then the
+// output file path would be "{{.BaseDir}}/.cache/a/b/script".
+func (ses *Session) generateFileInput(in string) (out string, err error) {
+ var (
+ logp = `generateFileInput`
+
+ tmpl *template.Template
+ f *os.File
+ outDir string
+ base string
+ )
+
+ if libos.IsBinary(in) {
+ return in, nil
+ }
+
+ outDir = filepath.Join(ses.BaseDir, defCacheDir, filepath.Dir(in))
+ base = filepath.Base(in)
+ out = filepath.Join(outDir, base)
+
+ err = os.MkdirAll(outDir, 0700)
+ if err != nil {
+ return "", fmt.Errorf("%s %s: %w", logp, in, err)
+ }
+
+ tmpl, err = template.ParseFiles(in)
+ if err != nil {
+ return "", fmt.Errorf("%s %s: %w", logp, in, err)
+ }
+
+ f, err = os.Create(out)
+ if err != nil {
+ return "", fmt.Errorf("%s %s: %w", logp, in, err)
+ }
+
+ err = tmpl.Execute(f, ses)
+ if err != nil {
+ return "", fmt.Errorf("%s %s: %w", logp, in, err)
+ }
+
+ err = f.Close()
+ if err != nil {
+ return "", fmt.Errorf("%s %s: %w", logp, in, err)
+ }
+
+ return out, nil
+}
+
// generatePaths using baseDir return all paths from BaseDir to ScriptDir.
func (ses *Session) generatePaths() (err error) {
logp := "generatePaths"
diff --git a/template.go b/template.go
deleted file mode 100644
index 30d3afe..0000000
--- a/template.go
+++ /dev/null
@@ -1,61 +0,0 @@
-// SPDX-FileCopyrightText: 2019 M. Shulhan <ms@kilabit.info>
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-package awwan
-
-import (
- "fmt"
- "os"
- "path/filepath"
- "text/template"
-
- libos "github.com/shuLhan/share/lib/os"
-)
-
-// parseTemplate read the file input "in" and apply the session variables,
-// and write the result to ".cache" directory.
-func parseTemplate(ses *Session, in string) (out string, err error) {
- var (
- logp = "parseTemplate"
-
- tmpl *template.Template
- f *os.File
- outDir string
- base string
- )
-
- if libos.IsBinary(in) {
- return in, nil
- }
-
- outDir = filepath.Join(ses.BaseDir, defCacheDir, filepath.Dir(in))
- base = filepath.Base(in)
- out = filepath.Join(outDir, base)
-
- err = os.MkdirAll(outDir, 0700)
- if err != nil {
- return "", fmt.Errorf("%s %s: %w", logp, in, err)
- }
-
- tmpl, err = template.ParseFiles(in)
- if err != nil {
- return "", fmt.Errorf("%s %s: %w", logp, in, err)
- }
-
- f, err = os.Create(out)
- if err != nil {
- return "", fmt.Errorf("%s %s: %w", logp, in, err)
- }
-
- err = tmpl.Execute(f, ses)
- if err != nil {
- return "", fmt.Errorf("%s %s: %w", logp, in, err)
- }
-
- err = f.Close()
- if err != nil {
- return "", fmt.Errorf("%s %s: %w", logp, in, err)
- }
-
- return out, nil
-}