From ce5c4c3a4adcefeb45ccde23b30498f5577a10e3 Mon Sep 17 00:00:00 2001 From: Mason Hensley Date: Fri, 20 Jul 2018 19:45:20 -0500 Subject: [PATCH] Add gitlab issue integration (#51) * Add gitlab issue integration * Clean up gitlab issue integration --- README.md | 20 ++++ example/comply.yml.example | 6 +- internal/cli/app.go | 2 + internal/cli/init.go | 4 +- internal/config/config.go | 3 + internal/gitlab/gitlab.go | 189 +++++++++++++++++++++++++++++++ internal/gitlab/gitlab_test.go | 9 ++ internal/model/plugin.go | 2 + internal/theme/themes_bindata.go | 108 +++++++++--------- 9 files changed, 287 insertions(+), 56 deletions(-) create mode 100644 internal/gitlab/gitlab.go create mode 100644 internal/gitlab/gitlab_test.go diff --git a/README.md b/README.md index 087aec4..d7d0dfc 100644 --- a/README.md +++ b/README.md @@ -77,4 +77,24 @@ COMMANDS: todo list declared vs satisfied compliance controls help, h Shows a list of commands or help for one command ``` +## Ticketing Integrations: +- Jira +- Github +- Gitlab +## Forking and local development +> Assumes installation of golang and configuration of GOPATH in .bash_profile, .zshrc, etc +> Inspiration: http://code.openark.org/blog/development/forking-golang-repositories-on-github-and-managing-the-import-path + +``` +$ go get http://github.com/strongdm/comply +$ cd $GOPATH/src/github.com/strongdm/comply ; go get ./... +$ make +$ cd example +$ mv comply.yml.example comply.yml +$ ../comply -h +$ ../comply sync +$ ../comply serve +# +$ make # recompile as needed with in $GOPATH/src/github.com/strongdm/comply +``` diff --git a/example/comply.yml.example b/example/comply.yml.example index 5bebe6c..f2e2cbb 100644 --- a/example/comply.yml.example +++ b/example/comply.yml.example @@ -4,4 +4,8 @@ tickets: github: token: XXX username: strongdm - repo: comply \ No newline at end of file + repo: comply + # gitlab: + # domain: https://gitlab.example.com:443/ # or https://gitlab.com/ + # token: token-here + # repo: full-slug/of-project diff --git a/internal/cli/app.go b/internal/cli/app.go index 7a7e6f9..b9dc254 100644 --- a/internal/cli/app.go +++ b/internal/cli/app.go @@ -23,6 +23,7 @@ import ( "github.com/pkg/errors" "github.com/strongdm/comply/internal/config" "github.com/strongdm/comply/internal/jira" + "github.com/strongdm/comply/internal/gitlab" "github.com/strongdm/comply/internal/plugin/github" "github.com/urfave/cli" ) @@ -61,6 +62,7 @@ func newApp() *cli.App { // Plugins github.Register() jira.Register() + gitlab.Register() return app } diff --git a/internal/cli/init.go b/internal/cli/init.go index 9c98bba..6b583e8 100644 --- a/internal/cli/init.go +++ b/internal/cli/init.go @@ -100,7 +100,7 @@ func initAction(c *cli.Context) error { chooser = promptui.Select{ Label: "Ticket System", - Items: []string{"GitHub", "Jira", "None"}, + Items: []string{"GitHub", "Jira", "GitLab", "None"}, } choice, _, err = chooser.Run() @@ -117,6 +117,8 @@ func initAction(c *cli.Context) error { ticketing = model.GitHub case 1: ticketing = model.Jira + case 2: + ticketing = model.GitLab default: ticketing = model.NoTickets } diff --git a/internal/config/config.go b/internal/config/config.go index e10000e..99ba597 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -16,6 +16,7 @@ var dockerAvailable, pandocAvailable bool const ( Jira = "jira" GitHub = "github" + GitLab = "gitlab" NoTickets = "none" ) @@ -115,6 +116,8 @@ func (p *Project) TicketSystem() (string, error) { return GitHub, nil case Jira: return Jira, nil + case GitLab: + return GitLab, nil case NoTickets: return NoTickets, nil default: diff --git a/internal/gitlab/gitlab.go b/internal/gitlab/gitlab.go new file mode 100644 index 0000000..1b12ac5 --- /dev/null +++ b/internal/gitlab/gitlab.go @@ -0,0 +1,189 @@ +package gitlab + +import ( + "fmt" + "strconv" + "sync" + + "github.com/xanzy/go-gitlab" + "github.com/pkg/errors" + "github.com/strongdm/comply/internal/model" +) + +const ( + cfgDomain = "domain" + cfgToken = "token" + cfgRepo = "repo" +) + +var prompts = map[string]string{ + cfgDomain: "Fully Qualified GitLab Domain", + cfgToken: "GitLab Token", + cfgRepo: "GitLab Repository", +} + +// Prompts are human-readable configuration element names +func (g *gitlabPlugin) Prompts() map[string]string { + return prompts +} + +// Register causes the Github plugin to register itself +func Register() { + model.Register(model.GitLab, &gitlabPlugin{}) +} + +type gitlabPlugin struct { + domain string + token string + reponame string + + clientMu sync.Mutex + client *gitlab.Client +} + +func (g *gitlabPlugin) api() *gitlab.Client { + g.clientMu.Lock() + defer g.clientMu.Unlock() + if g.client == nil { + // get go-gitlab client + gl := gitlab.NewClient(nil, g.token) + gl.SetBaseURL(g.domain) + g.client = gl + } + return g.client +} + +func (g *gitlabPlugin) Get(ID string) (*model.Ticket, error) { + return nil, nil +} + +func (g *gitlabPlugin) Configured() bool { + return g.reponame != "" && g.token != "" +} + +func (g *gitlabPlugin) Links() model.TicketLinks { + links := model.TicketLinks{} + links.AuditAll = fmt.Sprintf("%s/%s/issues?scope=all&utf8=✓&state=all&label_name[]=audit", g.domain, g.reponame) + links.AuditOpen = fmt.Sprintf("%s/%s/issues?scope=all&utf8=✓&state=opened&label_name[]=audit", g.domain, g.reponame) + links.ProcedureAll = fmt.Sprintf("%s/%s/issues?scope=all&utf8=✓&state=all&label_name[]=procedure", g.domain, g.reponame) + links.ProcedureOpen = fmt.Sprintf("%s/%s/issues?scope=all&utf8=✓&state=opened&label_name[]=procedure", g.domain, g.reponame) + return links +} + +func (g *gitlabPlugin) Configure(cfg map[string]interface{}) error { + var err error + + if g.domain, err = getCfg(cfg, cfgDomain); err != nil { + return err + } + if g.token, err = getCfg(cfg, cfgToken); err != nil { + return err + } + if g.reponame, err = getCfg(cfg, cfgRepo); err != nil { + return err + } + + return nil +} + +func getCfg(cfg map[string]interface{}, k string) (string, error) { + v, ok := cfg[k] + if !ok { + return "", errors.New("Missing key: " + k) + } + + vS, ok := v.(string) + if !ok { + return "", errors.New("Malformatted key: " + k) + } + return vS, nil +} + +func (g *gitlabPlugin) FindOpen() ([]*model.Ticket, error) { + options := &gitlab.ListProjectIssuesOptions{ + State: gitlab.String("opened"), + } + + issues, _, err := g.api().Issues.ListProjectIssues(g.reponame, options) + + if err != nil { + return nil, errors.Wrap(err, "error during FindOpen") + } + + return toTickets(issues), nil +} + +func (g *gitlabPlugin) FindByTag(name, value string) ([]*model.Ticket, error) { + panic("not implemented") +} + +func (g *gitlabPlugin) FindByTagName(name string) ([]*model.Ticket, error) { + options := &gitlab.ListProjectIssuesOptions{ + State: gitlab.String("all"), + Labels: []string{name}, + } + + issues, _, err := g.api().Issues.ListProjectIssues(g.reponame, options) + + if err != nil { + return nil, errors.Wrap(err, "error during FindOpen") + } + + return toTickets(issues), nil +} + +func (g *gitlabPlugin) LinkFor(t *model.Ticket) string { + panic("not implemented") +} + +func (g *gitlabPlugin) Create(ticket *model.Ticket, labels []string) error { + options := &gitlab.CreateIssueOptions{ + Title: gitlab.String(ticket.Name), + Description: gitlab.String(ticket.Body), + Labels: labels, + } + _, _, err := g.api().Issues.CreateIssue(g.reponame, options) + return err +} + +func toTickets(issues []*gitlab.Issue) []*model.Ticket { + var tickets []*model.Ticket + for _, i := range issues { + tickets = append(tickets, toTicket(i)) + } + return tickets +} + +func toTicket(i *gitlab.Issue) *model.Ticket { + t := &model.Ticket{Attributes: make(map[string]interface{})} + t.ID = strconv.Itoa(i.ID) + t.Name = i.Title + t.Body = i.Description + t.CreatedAt = i.CreatedAt + t.State = toState(i.State) + + for _, l := range i.Labels { + if l == "audit" { + t.SetBool("audit") + } + if l == "procedure" { + t.SetBool("procedure") + } + } + return t +} + +func toState(state string) model.TicketState { + switch state { + case "closed": + return model.Closed + } + return model.Open +} + +func ss(s *string) string { + if s == nil { + return "" + } + return *s +} diff --git a/internal/gitlab/gitlab_test.go b/internal/gitlab/gitlab_test.go new file mode 100644 index 0000000..cd8a90e --- /dev/null +++ b/internal/gitlab/gitlab_test.go @@ -0,0 +1,9 @@ +package gitlab + +import ( + "testing" +) + +func TestGitlab(t *testing.T) { + createOne() +} diff --git a/internal/model/plugin.go b/internal/model/plugin.go index 3bbfdc3..24a7535 100644 --- a/internal/model/plugin.go +++ b/internal/model/plugin.go @@ -20,6 +20,8 @@ const ( Jira = TicketSystem(config.Jira) // GitHub from GitHub. GitHub = TicketSystem(config.GitHub) + // GitLab from GitLab. + GitLab = TicketSystem(config.GitLab) // NoTickets indicates no ticketing system integration. NoTickets = TicketSystem(config.NoTickets) ) diff --git a/internal/theme/themes_bindata.go b/internal/theme/themes_bindata.go index aec234f..33ca55a 100644 --- a/internal/theme/themes_bindata.go +++ b/internal/theme/themes_bindata.go @@ -137,7 +137,7 @@ func complyBlankReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-blank/README.md", size: 1965, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-blank/README.md", size: 1965, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -157,7 +157,7 @@ func complyBlankTodoMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-blank/TODO.md", size: 1429, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-blank/TODO.md", size: 1429, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -177,7 +177,7 @@ func complyBlankNarrativesGitkeep() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-blank/narratives/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1525909140, 0)} + info := bindataFileInfo{name: "comply-blank/narratives/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -197,7 +197,7 @@ func complyBlankPoliciesGitkeep() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-blank/policies/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1525909140, 0)} + info := bindataFileInfo{name: "comply-blank/policies/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -217,7 +217,7 @@ func complyBlankProceduresGitkeep() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-blank/procedures/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1525909140, 0)} + info := bindataFileInfo{name: "comply-blank/procedures/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -237,7 +237,7 @@ func complyBlankStandardsGitkeep() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-blank/standards/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1525909140, 0)} + info := bindataFileInfo{name: "comply-blank/standards/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -257,7 +257,7 @@ func complyBlankTemplatesGitkeep() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-blank/templates/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1525909140, 0)} + info := bindataFileInfo{name: "comply-blank/templates/.gitkeep", size: 0, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -277,7 +277,7 @@ func complyBlankTemplatesDefaultLatex() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-blank/templates/default.latex", size: 7649, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-blank/templates/default.latex", size: 7649, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -297,7 +297,7 @@ func complyBlankTemplatesIndexAce() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-blank/templates/index.ace", size: 7596, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-blank/templates/index.ace", size: 7596, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -317,7 +317,7 @@ func complySoc2ReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/README.md", size: 1965, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/README.md", size: 1965, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -337,7 +337,7 @@ func complySoc2TodoMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/TODO.md", size: 1429, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/TODO.md", size: 1429, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -357,7 +357,7 @@ func complySoc2NarrativesReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/narratives/README.md", size: 96, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/narratives/README.md", size: 96, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -377,7 +377,7 @@ func complySoc2NarrativesControlMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/narratives/control.md", size: 387, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/narratives/control.md", size: 387, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -397,7 +397,7 @@ func complySoc2NarrativesOrganizationalMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/narratives/organizational.md", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/narratives/organizational.md", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -417,7 +417,7 @@ func complySoc2NarrativesProductsMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/narratives/products.md", size: 232, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/narratives/products.md", size: 232, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -437,7 +437,7 @@ func complySoc2NarrativesSecurityMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/narratives/security.md", size: 327, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/narratives/security.md", size: 327, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -457,7 +457,7 @@ func complySoc2NarrativesSystemMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/narratives/system.md", size: 257, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/narratives/system.md", size: 257, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -477,7 +477,7 @@ func complySoc2PoliciesReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/README.md", size: 71, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/README.md", size: 71, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -497,7 +497,7 @@ func complySoc2PoliciesAccessMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/access.md", size: 2175, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/access.md", size: 2175, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -517,7 +517,7 @@ func complySoc2PoliciesApplicationMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/application.md", size: 8377, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/application.md", size: 8377, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -537,7 +537,7 @@ func complySoc2PoliciesAvailabilityMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/availability.md", size: 7019, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/availability.md", size: 7019, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -557,7 +557,7 @@ func complySoc2PoliciesChangeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/change.md", size: 2793, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/change.md", size: 2793, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -577,7 +577,7 @@ func complySoc2PoliciesClassificationMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/classification.md", size: 14376, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/classification.md", size: 14376, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -597,7 +597,7 @@ func complySoc2PoliciesConductMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/conduct.md", size: 4492, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/conduct.md", size: 4492, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -617,7 +617,7 @@ func complySoc2PoliciesConfidentialityMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/confidentiality.md", size: 3653, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/confidentiality.md", size: 3653, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -637,7 +637,7 @@ func complySoc2PoliciesContinuityMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/continuity.md", size: 5043, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/continuity.md", size: 5043, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -657,7 +657,7 @@ func complySoc2PoliciesCyberMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/cyber.md", size: 4805, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/cyber.md", size: 4805, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -677,7 +677,7 @@ func complySoc2PoliciesDatacenterMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/datacenter.md", size: 3014, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/datacenter.md", size: 3014, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -697,7 +697,7 @@ func complySoc2PoliciesDevelopmentMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/development.md", size: 8933, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/development.md", size: 8933, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -717,7 +717,7 @@ func complySoc2PoliciesDisasterMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/disaster.md", size: 10315, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/disaster.md", size: 10315, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -737,7 +737,7 @@ func complySoc2PoliciesEncryptionMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/encryption.md", size: 5381, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/encryption.md", size: 5381, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -757,7 +757,7 @@ func complySoc2PoliciesIncidentMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/incident.md", size: 8552, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/incident.md", size: 8552, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -777,7 +777,7 @@ func complySoc2PoliciesInformationMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/information.md", size: 5359, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/information.md", size: 5359, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -797,7 +797,7 @@ func complySoc2PoliciesLogMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/log.md", size: 4307, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/log.md", size: 4307, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -817,7 +817,7 @@ func complySoc2PoliciesMediaMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/media.md", size: 8819, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/media.md", size: 8819, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -837,7 +837,7 @@ func complySoc2PoliciesOfficeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/office.md", size: 3927, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/office.md", size: 3927, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -857,7 +857,7 @@ func complySoc2PoliciesPasswordMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/password.md", size: 1796, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/password.md", size: 1796, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -877,7 +877,7 @@ func complySoc2PoliciesPolicyMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/policy.md", size: 892, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/policy.md", size: 892, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -897,7 +897,7 @@ func complySoc2PoliciesPrivacyMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/privacy.md", size: 346, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/privacy.md", size: 346, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -917,7 +917,7 @@ func complySoc2PoliciesProcessingMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/processing.md", size: 210, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/processing.md", size: 210, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -937,7 +937,7 @@ func complySoc2PoliciesRemoteMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/remote.md", size: 4119, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/remote.md", size: 4119, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -957,7 +957,7 @@ func complySoc2PoliciesRetentionMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/retention.md", size: 6811, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/retention.md", size: 6811, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -977,7 +977,7 @@ func complySoc2PoliciesRiskMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/risk.md", size: 10486, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/risk.md", size: 10486, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -997,7 +997,7 @@ func complySoc2PoliciesVendorMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/vendor.md", size: 3139, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/vendor.md", size: 3139, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1017,7 +1017,7 @@ func complySoc2PoliciesWorkstationMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/policies/workstation.md", size: 1791, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/policies/workstation.md", size: 1791, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1037,7 +1037,7 @@ func complySoc2ProceduresReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/procedures/README.md", size: 92, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/procedures/README.md", size: 92, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1057,7 +1057,7 @@ func complySoc2ProceduresOffboardingMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/procedures/offboarding.md", size: 358, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/procedures/offboarding.md", size: 358, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1077,7 +1077,7 @@ func complySoc2ProceduresOnboardingMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/procedures/onboarding.md", size: 495, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/procedures/onboarding.md", size: 495, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1097,7 +1097,7 @@ func complySoc2ProceduresPatchMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/procedures/patch.md", size: 380, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/procedures/patch.md", size: 380, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1117,7 +1117,7 @@ func complySoc2ProceduresWorkstationMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/procedures/workstation.md", size: 1081, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/procedures/workstation.md", size: 1081, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1137,7 +1137,7 @@ func complySoc2StandardsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/standards/README.md", size: 282, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/standards/README.md", size: 282, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1157,7 +1157,7 @@ func complySoc2StandardsTsc2017Yml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/standards/TSC-2017.yml", size: 16305, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/standards/TSC-2017.yml", size: 16305, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1177,7 +1177,7 @@ func complySoc2TemplatesDefaultLatex() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/templates/default.latex", size: 7649, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/templates/default.latex", size: 7649, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1197,7 +1197,7 @@ func complySoc2TemplatesIndexAce() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "comply-soc2/templates/index.ace", size: 7596, mode: os.FileMode(420), modTime: time.Unix(1529974241, 0)} + info := bindataFileInfo{name: "comply-soc2/templates/index.ace", size: 7596, mode: os.FileMode(420), modTime: time.Unix(1530819944, 0)} a := &asset{bytes: bytes, info: info} return a, nil }