本文整理汇总了Golang中golang.org/x/crypto/ssh/terminal.Terminal类的典型用法代码示例。如果您正苦于以下问题:Golang Terminal类的具体用法?Golang Terminal怎么用?Golang Terminal使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Terminal类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: updateTerminalSize
func updateTerminalSize(term *terminal.Terminal) {
width, height, err := terminal.GetSize(0)
if err != nil {
return
}
term.SetSize(width, height)
}
开发者ID:carriercomm,项目名称:pond,代码行数:7,代码来源:cli.go
示例2: newStartedMongoState
// newStartedMongoState takes a term argument to have a context for printing
func (msh *mongoStateHolder) newStartedMongoState(replicaID, backupID, mongodPath, mongoPath, mountPath string,
term *terminal.Terminal, driver *strata.Driver) (*mongoState, error) {
mongoState := mongoState{}
var err error
mongoState.dbpath, err = ioutil.TempDir("", "mongoq_")
if err != nil {
return &mongoState, err
}
if err := driver.RestoreReadOnly(replicaID, backupID, mountPath, mongoState.dbpath); err != nil {
return &mongoState, err
}
// Try to start mongod
// Look for output text to determine success
// If output text indicates that port is already in use, try another port
for mongoState.mongod == nil {
mongoState.mongod = exec.Command(mongodPath, "--port="+strconv.Itoa(msh.nextPort),
"--dbpath="+mongoState.dbpath, "--storageEngine=rocksdb", "--rocksdbConfigString=max_open_files=10")
mongodOut, err := mongoState.mongod.StdoutPipe()
if err != nil {
return &mongoState, err
}
defer mongodOut.Close()
if err := mongoState.mongod.Start(); err != nil {
return &mongoState, err
}
// Wait until mongod is ready to accept a connection
for {
buf := make([]byte, 10000)
n, _ := mongodOut.Read(buf)
term.Write(buf[:n]) // If there is a problem starting mongod, the user should see it and kill process
rec := string(buf[:n])
if strings.Contains(rec, "waiting for connections on port") {
mongodOut.Close()
break
} else if strings.Contains(rec, "Address already in use for socket") {
mongodOut.Close()
if err := mongoState.mongod.Process.Kill(); err != nil {
return &mongoState, err
}
mongoState.mongod = nil
term.Write([]byte("MONGOQ Trying to start mongod again on another port\n"))
msh.nextPort++
break
}
}
}
mongoState.mongo = exec.Command(mongoPath, "--port="+strconv.Itoa(msh.nextPort))
msh.nextPort++
mongoState.mongoPty, err = pty.Start(mongoState.mongo)
return &mongoState, err
}
开发者ID:facebookgo,项目名称:rocks-strata,代码行数:57,代码来源:mongoq.go
示例3: terminalMessage
func terminalMessage(term *terminal.Terminal, color []byte, msg string, critical bool) {
line := make([]byte, 0, len(msg)+16)
line = append(line, ' ')
line = append(line, color...)
line = append(line, '*')
line = append(line, term.Escape.Reset...)
line = append(line, []byte(fmt.Sprintf(" (%s) ", time.Now().Format(time.Kitchen)))...)
if critical {
line = append(line, term.Escape.Red...)
}
line = appendTerminalEscaped(line, []byte(msg))
if critical {
line = append(line, term.Escape.Reset...)
}
line = append(line, '\n')
term.Write(line)
}
开发者ID:PMaynard,项目名称:coyim,代码行数:18,代码来源:term.go
示例4: remoteShellHandler
func remoteShellHandler(ws *websocket.Conn) {
var httpErr *errors.HTTP
defer func() {
defer ws.Close()
if httpErr != nil {
var msg string
switch httpErr.Code {
case http.StatusUnauthorized:
msg = "no token provided or session expired, please login again\n"
default:
msg = httpErr.Message + "\n"
}
ws.Write([]byte("Error: " + msg))
}
}()
r := ws.Request()
token := context.GetAuthToken(r)
if token == nil {
httpErr = &errors.HTTP{
Code: http.StatusUnauthorized,
Message: "no token provided",
}
return
}
appName := r.URL.Query().Get(":appname")
a, err := getAppFromContext(appName, r)
if err != nil {
if herr, ok := err.(*errors.HTTP); ok {
httpErr = herr
} else {
httpErr = &errors.HTTP{
Code: http.StatusInternalServerError,
Message: err.Error(),
}
}
return
}
allowed := permission.Check(token, permission.PermAppRunShell, contextsForApp(&a)...)
if !allowed {
httpErr = permission.ErrUnauthorized
return
}
buf := &optionalWriterCloser{}
var term *terminal.Terminal
unitID := r.URL.Query().Get("unit")
width, _ := strconv.Atoi(r.URL.Query().Get("width"))
height, _ := strconv.Atoi(r.URL.Query().Get("height"))
clientTerm := r.URL.Query().Get("term")
evt, err := event.New(&event.Opts{
Target: appTarget(appName),
Kind: permission.PermAppRunShell,
Owner: token,
CustomData: event.FormToCustomData(r.Form),
Allowed: event.Allowed(permission.PermAppReadEvents, contextsForApp(&a)...),
DisableLock: true,
})
if err != nil {
httpErr = &errors.HTTP{
Code: http.StatusInternalServerError,
Message: err.Error(),
}
return
}
defer func() {
var finalErr error
if httpErr != nil {
finalErr = httpErr
}
for term != nil {
buf.disableWrite = true
var line string
line, err = term.ReadLine()
if err != nil {
break
}
fmt.Fprintf(evt, "> %s\n", line)
}
evt.Done(finalErr)
}()
term = terminal.NewTerminal(buf, "")
opts := provision.ShellOptions{
Conn: &cmdLogger{base: ws, term: term},
Width: width,
Height: height,
Unit: unitID,
Term: clientTerm,
}
err = a.Shell(opts)
if err != nil {
httpErr = &errors.HTTP{
Code: http.StatusInternalServerError,
Message: err.Error(),
}
}
}
开发者ID:tsuru,项目名称:tsuru,代码行数:95,代码来源:shell.go
示例5: enroll
func enroll(config *Config, term *terminal.Terminal) bool {
var err error
warn(term, "Enrolling new config file")
var domain string
for {
term.SetPrompt("Account (i.e. [email protected], enter to quit): ")
if config.Account, err = term.ReadLine(); err != nil || len(config.Account) == 0 {
return false
}
parts := strings.SplitN(config.Account, "@", 2)
if len(parts) != 2 {
alert(term, "invalid username (want [email protected]): "+config.Account)
continue
}
domain = parts[1]
break
}
term.SetPrompt("Enable debug logging to /tmp/xmpp-client-debug.log? ")
if debugLog, err := term.ReadLine(); err != nil || debugLog != "yes" {
info(term, "Not enabling debug logging...")
} else {
info(term, "Debug logging enabled...")
config.RawLogFile = "/tmp/xmpp-client-debug.log"
}
term.SetPrompt("Use Tor?: ")
if useTorQuery, err := term.ReadLine(); err != nil || len(useTorQuery) == 0 || useTorQuery[0] != 'y' && useTorQuery[0] != 'Y' {
info(term, "Not using Tor...")
config.UseTor = false
} else {
info(term, "Using Tor...")
config.UseTor = true
}
term.SetPrompt("File to import libotr private key from (enter to generate): ")
var priv otr.PrivateKey
for {
importFile, err := term.ReadLine()
if err != nil {
return false
}
if len(importFile) > 0 {
privKeyBytes, err := ioutil.ReadFile(importFile)
if err != nil {
alert(term, "Failed to open private key file: "+err.Error())
continue
}
if !priv.Import(privKeyBytes) {
alert(term, "Failed to parse libotr private key file (the parser is pretty simple I'm afraid)")
continue
}
break
} else {
info(term, "Generating private key...")
priv.Generate(rand.Reader)
break
}
}
config.PrivateKey = priv.Serialize(nil)
config.OTRAutoAppendTag = true
config.OTRAutoStartSession = true
config.OTRAutoTearDown = false
// List well known Tor hidden services.
knownTorDomain := map[string]string{
"jabber.ccc.de": "okj7xc6j2szr2y75.onion",
"riseup.net": "4cjw6cwpeaeppfqz.onion",
"jabber.calyxinstitute.org": "ijeeynrc6x2uy5ob.onion",
"jabber.otr.im": "5rgdtlawqkcplz75.onion",
"wtfismyip.com": "ofkztxcohimx34la.onion",
}
// Autoconfigure well known Tor hidden services.
if hiddenService, ok := knownTorDomain[domain]; ok && config.UseTor {
const torProxyURL = "socks5://127.0.0.1:9050"
info(term, "It appears that you are using a well known server and we will use its Tor hidden service to connect.")
config.Server = hiddenService
config.Port = 5222
config.Proxies = []string{torProxyURL}
term.SetPrompt("> ")
return true
}
var proxyStr string
proxyDefaultPrompt := ", enter for none"
if config.UseTor {
proxyDefaultPrompt = ", which is the default"
}
term.SetPrompt("Proxy (i.e socks5://127.0.0.1:9050" + proxyDefaultPrompt + "): ")
for {
if proxyStr, err = term.ReadLine(); err != nil {
return false
}
//.........这里部分代码省略.........
开发者ID:twstrike,项目名称:xmpp-client,代码行数:101,代码来源:config.go
示例6: enroll
func enroll(conf *config.ApplicationConfig, currentConf *config.Account, term *terminal.Terminal) bool {
var err error
warn(term, "Enrolling new config file")
var domain string
for {
term.SetPrompt("Account (i.e. [email protected], enter to quit): ")
if currentConf.Account, err = term.ReadLine(); err != nil || len(currentConf.Account) == 0 {
return false
}
parts := strings.SplitN(currentConf.Account, "@", 2)
if len(parts) != 2 {
alert(term, "invalid username (want [email protected]): "+currentConf.Account)
continue
}
domain = parts[1]
break
}
term.SetPrompt("Enable debug logging to /tmp/xmpp-client-debug.log? ")
if debugLog, err := term.ReadLine(); err != nil || !config.ParseYes(debugLog) {
info(term, "Not enabling debug logging...")
} else {
info(term, "Debug logging enabled...")
conf.RawLogFile = "/tmp/xmpp-client-debug.log"
}
term.SetPrompt("Use Tor?: ")
if useTorQuery, err := term.ReadLine(); err != nil || len(useTorQuery) == 0 || !config.ParseYes(useTorQuery) {
info(term, "Not using Tor...")
currentConf.RequireTor = false
} else {
info(term, "Using Tor...")
currentConf.RequireTor = true
}
term.SetPrompt("File to import libotr private key from (enter to generate): ")
var pkeys []otr3.PrivateKey
for {
importFile, err := term.ReadLine()
if err != nil {
return false
}
if len(importFile) > 0 {
privKeyBytes, err := ioutil.ReadFile(importFile)
if err != nil {
alert(term, "Failed to open private key file: "+err.Error())
continue
}
var priv otr3.DSAPrivateKey
if !priv.Import(privKeyBytes) {
alert(term, "Failed to parse libotr private key file (the parser is pretty simple I'm afraid)")
continue
}
pkeys = append(pkeys, &priv)
break
} else {
info(term, "Generating private key...")
pkeys, err = otr3.GenerateMissingKeys([][]byte{})
if err != nil {
alert(term, "Failed to generate private key - this implies something is really bad with your system, so we bail out now")
return false
}
break
}
}
currentConf.PrivateKeys = config.SerializedKeys(pkeys)
currentConf.OTRAutoAppendTag = true
currentConf.OTRAutoStartSession = true
currentConf.OTRAutoTearDown = false
// Force Tor for servers with well known Tor hidden services.
if _, ok := servers.Get(domain); ok && currentConf.RequireTor {
const torProxyURL = "socks5://127.0.0.1:9050"
info(term, "It appears that you are using a well known server and we will use its Tor hidden service to connect.")
currentConf.Proxies = []string{torProxyURL}
term.SetPrompt("> ")
return true
}
var proxyStr string
proxyDefaultPrompt := ", enter for none"
if currentConf.RequireTor {
proxyDefaultPrompt = ", which is the default"
}
term.SetPrompt("Proxy (i.e socks5://127.0.0.1:9050" + proxyDefaultPrompt + "): ")
for {
if proxyStr, err = term.ReadLine(); err != nil {
return false
}
if len(proxyStr) == 0 {
if !currentConf.RequireTor {
break
} else {
proxyStr = "socks5://127.0.0.1:9050"
}
//.........这里部分代码省略.........
开发者ID:PMaynard,项目名称:coyim,代码行数:101,代码来源:ui.go
示例7: promptForForm
// promptForForm runs an XEP-0004 form and collects responses from the user.
func promptForForm(term *terminal.Terminal, user, password, title, instructions string, fields []interface{}) error {
info(term, "The server has requested the following information. Text that has come from the server will be shown in red.")
// formStringForPrinting takes a string form the form and returns an
// escaped version with codes to make it show as red.
formStringForPrinting := func(s string) string {
var line []byte
line = append(line, term.Escape.Red...)
line = appendTerminalEscaped(line, []byte(s))
line = append(line, term.Escape.Reset...)
return string(line)
}
write := func(s string) {
term.Write([]byte(s))
}
var tmpDir string
showMediaEntries := func(questionNumber int, medias [][]xmpp.Media) {
if len(medias) == 0 {
return
}
write("The following media blobs have been provided by the server with this question:\n")
for i, media := range medias {
for j, rep := range media {
if j == 0 {
write(fmt.Sprintf(" %d. ", i+1))
} else {
write(" ")
}
write(fmt.Sprintf("Data of type %s", formStringForPrinting(rep.MIMEType)))
if len(rep.URI) > 0 {
write(fmt.Sprintf(" at %s\n", formStringForPrinting(rep.URI)))
continue
}
var fileExt string
switch rep.MIMEType {
case "image/png":
fileExt = "png"
case "image/jpeg":
fileExt = "jpeg"
}
if len(tmpDir) == 0 {
var err error
if tmpDir, err = ioutil.TempDir("", "xmppclient"); err != nil {
write(", but failed to create temporary directory in which to save it: " + err.Error() + "\n")
continue
}
}
filename := filepath.Join(tmpDir, fmt.Sprintf("%d-%d-%d", questionNumber, i, j))
if len(fileExt) > 0 {
filename = filename + "." + fileExt
}
out, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0600)
if err != nil {
write(", but failed to create file in which to save it: " + err.Error() + "\n")
continue
}
out.Write(rep.Data)
out.Close()
write(", saved in " + filename + "\n")
}
}
write("\n")
}
var err error
if len(title) > 0 {
write(fmt.Sprintf("Title: %s\n", formStringForPrinting(title)))
}
if len(instructions) > 0 {
write(fmt.Sprintf("Instructions: %s\n", formStringForPrinting(instructions)))
}
questionNumber := 0
for _, field := range fields {
questionNumber++
write("\n")
switch field := field.(type) {
case *xmpp.FixedFormField:
write(formStringForPrinting(field.Text))
write("\n")
questionNumber--
case *xmpp.BooleanFormField:
write(fmt.Sprintf("%d. %s\n\n", questionNumber, formStringForPrinting(field.Label)))
showMediaEntries(questionNumber, field.Media)
term.SetPrompt("Please enter yes, y, no or n: ")
TryAgain:
//.........这里部分代码省略.........
开发者ID:PMaynard,项目名称:coyim,代码行数:101,代码来源:ui.go
示例8: readLine
func readLine(shell *terminal.Terminal, t *testing.T) {
if _, err := shell.ReadLine(); err != nil && err != io.EOF {
t.Errorf("unable to read line: %v", err)
}
}
开发者ID:GamerockSA,项目名称:dex,代码行数:5,代码来源:session_test.go
示例9: main
func main() {
var (
filename string
site string
username string
password string
line string
buf []byte
db *keyrack.Database
oldState *terminal.State
term *terminal.Terminal
termio TermIO
group *keyrack.Group
//trail []*keyrack.Group
groupView GroupView
matched bool
quit bool
err error
)
if len(os.Args) != 2 {
fmt.Printf("Syntax: %s <filename>\n", os.Args[0])
os.Exit(1)
}
filename = os.Args[1]
// setup terminal
oldState, err = terminal.MakeRaw(0)
if err != nil {
panic(err)
}
defer terminal.Restore(0, oldState)
termio.Input = os.Stdin
termio.Output = os.Stdout
term = terminal.NewTerminal(termio, "> ")
if _, err = os.Stat(filename); os.IsNotExist(err) {
db, err = keyrack.NewDatabase()
} else {
password, err = term.ReadPassword("Password: ")
if err == nil {
db, err = keyrack.LoadDatabase(filename, []byte(password))
}
password = ""
}
group = db.Top()
for err == nil && !quit {
groupView.Group = group
buf, err = groupView.Render()
if err != nil {
break
}
_, err = term.Write(buf)
if err != nil {
break
}
line, err = term.ReadLine()
if err != nil {
break
}
switch line {
case "q":
password, err = term.ReadPassword("Password: ")
if err == nil {
err = db.Save(filename, []byte(password))
}
password = ""
quit = true
case "ng", "new group":
term.SetPrompt("Group name: ")
line, err = term.ReadLine()
if err != nil {
break
}
if line == "" {
term.Write([]byte("Group creation cancelled.\n"))
} else {
err = group.AddGroup(line)
if err != nil {
if err == keyrack.ErrGroupExists {
term.Write([]byte("Group already exists.\n"))
} else {
break
}
}
}
term.SetPrompt("> ")
case "nl", "new login":
term.SetPrompt("Site name: ")
site, err = term.ReadLine()
if err != nil {
break
}
//.........这里部分代码省略.........
开发者ID:viking,项目名称:go-keyrack,代码行数:101,代码来源:main.go
注:本文中的golang.org/x/crypto/ssh/terminal.Terminal类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论