This file is indexed.

/usr/share/gocode/src/github.com/JamesClonk/vultr/lib/scripts.go is in golang-github-jamesclonk-vultr-dev 1.13.0-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package lib

import (
	"encoding/json"
	"fmt"
	"net/url"
	"sort"
	"strings"
)

// StartupScript on Vultr account
type StartupScript struct {
	ID      string `json:"SCRIPTID"`
	Name    string `json:"name"`
	Type    string `json:"type"`
	Content string `json:"script"`
}

type startupscripts []StartupScript

func (s startupscripts) Len() int      { return len(s) }
func (s startupscripts) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s startupscripts) Less(i, j int) bool {
	return strings.ToLower(s[i].Name) < strings.ToLower(s[j].Name)
}

// UnmarshalJSON implements json.Unmarshaller on StartupScript.
// Necessary because the SCRIPTID field has inconsistent types.
func (s *StartupScript) UnmarshalJSON(data []byte) (err error) {
	if s == nil {
		*s = StartupScript{}
	}

	var fields map[string]interface{}
	if err := json.Unmarshal(data, &fields); err != nil {
		return err
	}

	s.ID = fmt.Sprintf("%v", fields["SCRIPTID"])
	s.Name = fmt.Sprintf("%v", fields["name"])
	s.Type = fmt.Sprintf("%v", fields["type"])
	s.Content = fmt.Sprintf("%v", fields["script"])

	return
}

// GetStartupScripts returns a list of all startup scripts on the current Vultr account
func (c *Client) GetStartupScripts() (scripts []StartupScript, err error) {
	var scriptMap map[string]StartupScript
	if err := c.get(`startupscript/list`, &scriptMap); err != nil {
		return nil, err
	}

	for _, script := range scriptMap {
		if script.Type == "" {
			script.Type = "boot" // set default script type
		}
		scripts = append(scripts, script)
	}
	sort.Sort(startupscripts(scripts))
	return scripts, nil
}

// GetStartupScript returns the startup script with the given ID
func (c *Client) GetStartupScript(id string) (StartupScript, error) {
	scripts, err := c.GetStartupScripts()
	if err != nil {
		return StartupScript{}, err
	}

	for _, s := range scripts {
		if s.ID == id {
			return s, nil
		}
	}
	return StartupScript{}, nil
}

// CreateStartupScript creates a new startup script
func (c *Client) CreateStartupScript(name, content, scriptType string) (StartupScript, error) {
	values := url.Values{
		"name":   {name},
		"script": {content},
		"type":   {scriptType},
	}

	var script StartupScript
	if err := c.post(`startupscript/create`, values, &script); err != nil {
		return StartupScript{}, err
	}
	script.Name = name
	script.Content = content
	script.Type = scriptType

	return script, nil
}

// UpdateStartupScript updates an existing startup script
func (c *Client) UpdateStartupScript(script StartupScript) error {
	values := url.Values{
		"SCRIPTID": {script.ID},
	}
	if script.Name != "" {
		values.Add("name", script.Name)
	}
	if script.Content != "" {
		values.Add("script", script.Content)
	}

	if err := c.post(`startupscript/update`, values, nil); err != nil {
		return err
	}
	return nil
}

// DeleteStartupScript deletes an existing startup script from Vultr account
func (c *Client) DeleteStartupScript(id string) error {
	values := url.Values{
		"SCRIPTID": {id},
	}

	if err := c.post(`startupscript/destroy`, values, nil); err != nil {
		return err
	}
	return nil
}