Skip to content

Commit

Permalink
Merge pull request #207 from rusq/browser-select
Browse files Browse the repository at this point in the history
enable browser selection
  • Loading branch information
rusq committed Apr 11, 2023
2 parents 64d2343 + f89c033 commit b8a369c
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 17 deletions.
5 changes: 4 additions & 1 deletion cmd/slackdump/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"github.com/slack-go/slack"

"github.com/rusq/slackdump/v2"
"github.com/rusq/slackdump/v2/auth/browser"
"github.com/rusq/slackdump/v2/export"
"github.com/rusq/slackdump/v2/internal/app"
"github.com/rusq/slackdump/v2/internal/app/config"
Expand Down Expand Up @@ -54,6 +55,7 @@ type params struct {
appCfg config.Params
creds app.SlackCreds
authReset bool
browser browser.Browser

traceFile string // trace file
logFile string //log file, if not specified, outputs to stderr.
Expand Down Expand Up @@ -129,7 +131,7 @@ func run(ctx context.Context, p params) error {
ctx, task := trace.NewTask(ctx, "main.run")
defer task.End()

provider, err := app.InitProvider(ctx, p.appCfg.Options.CacheDir, "", p.creds)
provider, err := app.InitProvider(ctx, p.appCfg.Options.CacheDir, "", p.creds, p.browser)
if err != nil {
return err
} else {
Expand Down Expand Up @@ -249,6 +251,7 @@ func parseCmdLine(args []string) (params, error) {
fs.StringVar(&p.creds.Token, "t", osenv.Secret(envSlackToken, ""), "Specify slack `API_token`, (environment: "+envSlackToken+")")
fs.StringVar(&p.creds.Cookie, "cookie", osenv.Secret(envSlackCookie, ""), "d= cookie `value` or a path to a cookie.txt file (environment: "+envSlackCookie+")")
fs.BoolVar(&p.authReset, "auth-reset", false, "reset EZ-Login 3000 authentication.")
fs.Var(&p.browser, "browser", "set the browser to use for authentication: 'chromium' or 'firefox' (default: firefox)")

// operation mode
fs.BoolVar(&p.appCfg.ListFlags.Channels, "c", false, "same as -list-channels")
Expand Down
11 changes: 6 additions & 5 deletions internal/app/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (

"github.com/rusq/slackdump/v2"
"github.com/rusq/slackdump/v2/auth"
"github.com/rusq/slackdump/v2/auth/browser"
"github.com/rusq/slackdump/v2/internal/encio"
)

Expand Down Expand Up @@ -66,14 +67,14 @@ func (c SlackCreds) IsEmpty() bool {

// AuthProvider returns the appropriate auth Provider depending on the values
// of the token and cookie.
func (c SlackCreds) AuthProvider(ctx context.Context, workspace string) (auth.Provider, error) {
func (c SlackCreds) AuthProvider(ctx context.Context, workspace string, browser browser.Browser) (auth.Provider, error) {
authType, err := c.Type(ctx)
if err != nil {
return nil, err
}
switch authType {
case auth.TypeBrowser:
return auth.NewBrowserAuth(ctx, auth.BrowserWithWorkspace(workspace))
return auth.NewBrowserAuth(ctx, auth.BrowserWithWorkspace(workspace), auth.BrowserWithBrowser(browser))
case auth.TypeCookieFile:
return auth.NewCookieFileAuth(c.Token, c.Cookie)
case auth.TypeValue:
Expand Down Expand Up @@ -105,7 +106,7 @@ var filer createOpener = encryptedFile{}

type Credentials interface {
IsEmpty() bool
AuthProvider(ctx context.Context, workspace string) (auth.Provider, error)
AuthProvider(ctx context.Context, workspace string, browser browser.Browser) (auth.Provider, error)
}

// InitProvider initialises the auth.Provider depending on provided slack
Expand All @@ -123,7 +124,7 @@ type Credentials interface {
// virtual), even another operating system on the same machine, unless it's a
// clone of the source operating system on which the credentials storage was
// created.
func InitProvider(ctx context.Context, cacheDir string, workspace string, creds Credentials) (auth.Provider, error) {
func InitProvider(ctx context.Context, cacheDir string, workspace string, creds Credentials, browser browser.Browser) (auth.Provider, error) {
ctx, task := trace.NewTask(ctx, "InitProvider")
defer task.End()

Expand All @@ -145,7 +146,7 @@ func InitProvider(ctx context.Context, cacheDir string, workspace string, creds

// init the authentication provider
trace.Log(ctx, "info", "getting credentals from file or browser")
provider, err := creds.AuthProvider(ctx, workspace)
provider, err := creds.AuthProvider(ctx, workspace, browser)
if err != nil {
return nil, fmt.Errorf("failed to initialise the auth provider: %w", err)
}
Expand Down
13 changes: 7 additions & 6 deletions internal/app/auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (

"github.com/golang/mock/gomock"
"github.com/rusq/slackdump/v2/auth"
"github.com/rusq/slackdump/v2/auth/browser"
"github.com/rusq/slackdump/v2/internal/mocks/mock_app"
"github.com/rusq/slackdump/v2/internal/mocks/mock_io"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -148,7 +149,7 @@ func TestInitProvider(t *testing.T) {
func(m *mock_app.MockCredentials) {
m.EXPECT().IsEmpty().Return(false)
m.EXPECT().
AuthProvider(gomock.Any(), "wsp").
AuthProvider(gomock.Any(), "wsp", browser.Bfirefox).
Return(storedProv, nil)
},
nil, //not used in the test
Expand All @@ -170,7 +171,7 @@ func TestInitProvider(t *testing.T) {
args{context.Background(), testDir, "wsp"},
func(m *mock_app.MockCredentials) {
m.EXPECT().IsEmpty().Return(true)
m.EXPECT().AuthProvider(gomock.Any(), "wsp").Return(returnedProv, nil)
m.EXPECT().AuthProvider(gomock.Any(), "wsp", browser.Bfirefox).Return(returnedProv, nil)
},
errors.New("auth test fail"), // auth test fails
returnedProv,
Expand All @@ -181,7 +182,7 @@ func TestInitProvider(t *testing.T) {
args{context.Background(), testDir, "wsp"},
func(m *mock_app.MockCredentials) {
m.EXPECT().IsEmpty().Return(false)
m.EXPECT().AuthProvider(gomock.Any(), "wsp").Return(nil, errors.New("authProvider failed"))
m.EXPECT().AuthProvider(gomock.Any(), "wsp", browser.Bfirefox).Return(nil, errors.New("authProvider failed"))
},
nil,
nil,
Expand All @@ -192,7 +193,7 @@ func TestInitProvider(t *testing.T) {
args{context.Background(), testDir, "wsp"},
func(m *mock_app.MockCredentials) {
m.EXPECT().IsEmpty().Return(false)
m.EXPECT().AuthProvider(gomock.Any(), "wsp").Return(returnedProv, nil)
m.EXPECT().AuthProvider(gomock.Any(), "wsp", browser.Bfirefox).Return(returnedProv, nil)
},
nil,
returnedProv,
Expand All @@ -203,7 +204,7 @@ func TestInitProvider(t *testing.T) {
args{context.Background(), t.TempDir() + "$", "wsp"},
func(m *mock_app.MockCredentials) {
m.EXPECT().IsEmpty().Return(false)
m.EXPECT().AuthProvider(gomock.Any(), "wsp").Return(returnedProv, nil)
m.EXPECT().AuthProvider(gomock.Any(), "wsp", browser.Bfirefox).Return(returnedProv, nil)
},
nil,
returnedProv,
Expand All @@ -229,7 +230,7 @@ func TestInitProvider(t *testing.T) {
tt.expect(mc)

// test
got, err := InitProvider(tt.args.ctx, tt.args.cacheDir, tt.args.workspace, mc)
got, err := InitProvider(tt.args.ctx, tt.args.cacheDir, tt.args.workspace, mc, browser.Bfirefox)
if (err != nil) != tt.wantErr {
t.Errorf("InitProvider() error = %v, wantErr %v", err, tt.wantErr)
return
Expand Down
9 changes: 5 additions & 4 deletions internal/mocks/mock_app/mock_app.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion tools/rawoutput/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"os"

"github.com/rusq/chttp"
"github.com/rusq/slackdump/v2/auth/browser"
"github.com/rusq/slackdump/v2/internal/app"
"github.com/rusq/slackdump/v2/internal/structures"
)
Expand Down Expand Up @@ -63,7 +64,7 @@ const (
)

func run(ctx context.Context, p params) error {
prov, err := app.InitProvider(ctx, app.CacheDir(), p.workspace, p.creds)
prov, err := app.InitProvider(ctx, app.CacheDir(), p.workspace, p.creds, browser.Bfirefox)
if err != nil {
return err
}
Expand Down

0 comments on commit b8a369c

Please sign in to comment.