Module: Template

Included in:
Exer::Make
Defined in:
lib/exer/template/main.rb,
lib/exer/template/functions.rb

Overview

Set of predefined functions in go language. Consist of function definitions, and main function that run it.

Constant Summary collapse

MAIN_FUNCTION =

Main functions in golang file.

{
  binary_exist: 'BinaryExist("COMMAND")',
  ruby_exist: 'RubyExist()',
  ruby_exec: 'RubyExec("COMMAND")',
  gem_install: 'GemInstall("COMMAND")',
  gem_run: 'GemRun("COMMAND")'
}.freeze
WAIT_FOR_ENTER =

Wait for user to press enter before exit. Useful only when you install gem without running.

"\n fmt.Println(\"\")\n fmt.Println(\"Press [ENTER] key to exit\")\nvar reader = bufio.NewReader(os.Stdin)\nreader.ReadString('\\\\n')\n"
GO_PACKAGES =
"package main\nimport (\"bytes\"; \"fmt\"; \"os\"; \"os/exec\"; \"syscall\"; \"runtime\";)\n"
BINARY_EXIST =
"func BinaryExist(binary string) (string, error) {\n  path, err := exec.LookPath(binary)\n  if err == nil {\n      fmt.Println(\"[+] Found\", binary, \"binary:\", path)\n  } else {\n      fmt.Println(\"[-]\", binary, \"binary not found in path\")\n  }\n  return path, err\n}\n"
RUBY_EXIST =
"func RubyExist() (string, error) {\n  rbin, rerr := BinaryExist(\"ruby\")\n\n  if rerr == nil {\n      RubyExec(\"print '[+] Ruby Version: ' + RUBY_VERSION\")\n      RubyExec(\"print '[+] Ruby Platform: ' + RUBY_PLATFORM\")\n  } else {\n      fmt.Println(\"Error:\", rerr)\n      os.Exit(1)\n  }\n  return rbin, rerr\n}\n"
RUBY_EXEC =
"func RubyExec(command string) (string, string, error) {\n  var stdout bytes.Buffer\n  var stderr bytes.Buffer\n\n  cmd := exec.Command(\"ruby\", \"-e\", command)\n\n  cmd.Stdout = &stdout\n  cmd.Stderr = &stderr\n  err := cmd.Run()\n\n  sout := stdout.String()\n  serr := stderr.String()\n\n  if err == nil {\n      fmt.Println(sout)\n  } else {\n      fmt.Println(\"Error:\", serr, err)\n  }\n  return sout, serr, err\n}\n"
GEM_INSTALL =
"func GemInstall(gem string) (string, string, error) {\n  _, gerr := exec.LookPath(\"gem\")\n  if gerr != nil { fmt.Println(gerr); os.Exit(1) }\n\n  var stdout bytes.Buffer\n  var stderr bytes.Buffer\n\n  cmd := exec.Command(\"gem\", \"install\", gem, \"--no-doc\")\n\n  cmd.Stdout = &stdout\n  cmd.Stderr = &stderr\n  err := cmd.Run()\n\n  sout := stdout.String()\n  serr := stderr.String()\n\n  if err == nil {\n      fmt.Println(sout)\n  } else {\n      fmt.Println(\"Error:\", serr, err)\n  }\n  return sout, serr, err\n}\n"
GEM_RUN =
"func GemRun(command string) {\n  envs := os.Environ()\n  cpath, cerr := BinaryExist(command)\n  if cerr != nil { GemInstall(command); cpath, cerr = BinaryExist(command) }\n\n  os := runtime.GOOS\n  switch os {\n  case \"windows\":\n      cmd := exec.Command(\"cmd\", \"/c\", \"start\", cpath)\n      err := cmd.Run()\n      if err != nil { fmt.Println(err) }\n  case \"linux\", \"darwin\":\n      com := []string{command}\n      err := syscall.Exec(cpath, com, envs)\n      if err != nil { fmt.Println(err) }\n  }\n}\n"
FUNCTION =

Predefined functions in golang. go_packages always go first.

{
  go_packages: GO_PACKAGES,
  binary_exist: BINARY_EXIST,
  ruby_exist: RUBY_EXIST,
  ruby_exec: RUBY_EXEC,
  gem_install: GEM_INSTALL,
  gem_run: GEM_RUN
}.freeze