-
Notifications
You must be signed in to change notification settings - Fork 115
/
file_browsers.go
91 lines (79 loc) · 2.67 KB
/
file_browsers.go
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
package filebrowser
import (
"os"
"strings"
"github.com/jenkins-x/lighthouse/pkg/git/v2"
"github.com/pkg/errors"
)
const (
// GitHub the name used in a Uses Git URI to reference a git server
GitHub = "github"
// Lighthouse the name used in a Uses Git URI to reference the git server lighthouse is configured to run against
Lighthouse = "lighthouse"
// GitHubURL the github server URL
GitHubURL = "https://github.com"
)
// FileBrowsers contains the file browsers for the supported git servers
type FileBrowsers struct {
cache map[string]Interface
}
// NewFileBrowsers creates a new file browsers service for the lighthouse git server URL and file browser
// if the current server URL is not github.com then creates a second file browser so that we can use the uses: Git URI
// syntax for accessing github resources as well as to access the lighthouse git server too
func NewFileBrowsers(serverURL string, fb Interface) (*FileBrowsers, error) {
if serverURL == "" {
serverURL = GitHubURL
}
isGitHub := strings.TrimSuffix(serverURL, "/") == GitHubURL
answer := &FileBrowsers{
cache: map[string]Interface{
Lighthouse: fb,
},
}
// lets see if we have a custom server name we want to support
serverName := os.Getenv("GIT_NAME")
if serverName != "" && serverName != GitHub {
answer.cache[serverName] = fb
}
var githubBrowser Interface
if isGitHub {
githubBrowser = fb
} else {
// lets create a github browser\
configureOpts := func(opts *git.ClientFactoryOpts) {
opts.Token = func() []byte {
return []byte(os.Getenv("GITHUB_TOKEN"))
}
opts.GitUser = func() (name, email string, err error) {
name = os.Getenv("GITHUB_USER_NAME")
email = os.Getenv("GITHUB_USER_EMAIL")
return
}
opts.Username = func() (login string, err error) {
login = os.Getenv("GITHUB_USER")
return
}
opts.Host = "github.com"
opts.Scheme = "https"
}
githubFactory, err := git.NewClientFactory(configureOpts)
if err != nil {
return nil, errors.Wrapf(err, "failed to create git client factory for github")
}
githubBrowser = NewFileBrowserFromGitClient(githubFactory)
}
answer.cache[GitHub] = githubBrowser
return answer, nil
}
// GitHubFileBrowser returns a git file browser for github.com
func (f *FileBrowsers) GitHubFileBrowser() Interface {
return f.GetFileBrowser(GitHub)
}
// LighthouseGitFileBrowser returns the git file browser for the git server that lighthouse is configured against
func (f *FileBrowsers) LighthouseGitFileBrowser() Interface {
return f.GetFileBrowser(Lighthouse)
}
// GetFileBrowser returns the file browser for the given git server name.
func (f *FileBrowsers) GetFileBrowser(name string) Interface {
return f.cache[name]
}