Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

enable browser selection #207

Merged
merged 2 commits into from
Apr 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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