mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
// Copyright (c) 2017 Gorillalabs. All rights reserved.
|
|
|
|
package middleware
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/StackExchange/dnscontrol/v4/pkg/powershell/utils"
|
|
"github.com/juju/errors"
|
|
)
|
|
|
|
type session struct {
|
|
upstream Middleware
|
|
name string
|
|
}
|
|
|
|
func NewSession(upstream Middleware, config *SessionConfig) (Middleware, error) {
|
|
asserted, ok := config.Credential.(credential)
|
|
if ok {
|
|
credentialParamValue, err := asserted.prepare(upstream)
|
|
if err != nil {
|
|
return nil, errors.Annotate(err, "Could not setup credentials")
|
|
}
|
|
|
|
config.Credential = credentialParamValue
|
|
}
|
|
|
|
name := "goSess" + utils.CreateRandomString(8)
|
|
args := strings.Join(config.ToArgs(), " ")
|
|
|
|
_, _, err := upstream.Execute(fmt.Sprintf("$%s = New-PSSession %s", name, args))
|
|
if err != nil {
|
|
return nil, errors.Annotate(err, "Could not create new PSSession")
|
|
}
|
|
|
|
return &session{upstream, name}, nil
|
|
}
|
|
|
|
func (s *session) Execute(cmd string) (string, string, error) {
|
|
return s.upstream.Execute(fmt.Sprintf("Invoke-Command -Session $%s -Script {%s}", s.name, cmd))
|
|
}
|
|
|
|
func (s *session) Exit() {
|
|
s.upstream.Execute(fmt.Sprintf("Disconnect-PSSession -Session $%s", s.name))
|
|
s.upstream.Exit()
|
|
}
|