Skip to content

Commit

Permalink
fix: bypass login for oauth is not reliables (#148)
Browse files Browse the repository at this point in the history
* update ci
* enable page load parameter as argument
* add sleeps between bypass steps
  • Loading branch information
briangann authored Oct 2, 2024
1 parent 1271471 commit 19dc76d
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 6 deletions.
26 changes: 21 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,18 @@ jobs:
run: go get .

- name: Install golangci-lint
uses: golangci/golangci-lint-action@v4
uses: golangci/golangci-lint-action@v6
with:
version: latest
args: --exclude-use-default
skip-cache: true
skip-pkg-cache: true

- name: Run Gosec Security Scanner
uses: securego/gosec@master
with:
args: ./...

- name: Branch name
- name: Get BRANCH, NAME, TAG
id: branch_name
run: |
echo "SOURCE_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
Expand All @@ -50,8 +49,25 @@ jobs:
version: latest
args: -v build:ci

- name: Get PR
uses: jwalton/gh-find-current-pr@master
id: findPr
with:
state: open

- name: Archive Build
uses: actions/upload-artifact@v4
if: success() && steps.findPr.outputs.number
env:
PR: ${{ steps.findPr.outputs.pr }}
with:
name: grafana-kiosk-pr-${{env.PR}}
path: bin
overwrite: true
retention-days: 7

- name: Upload Code Climate Report
uses: paambaati/codeclimate-action@v5.0.0
uses: paambaati/codeclimate-action@v9
env:
CC_TEST_REPORTER_ID: ${{secrets.CC_TEST_REPORTER_ID}}
with:
Expand Down Expand Up @@ -95,7 +111,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: startsWith(github.ref, 'refs/tags/v')
with:
draft: true
prerelease: true
generate_release_notes: true
files: |
./grafana-kiosk-v*/**
Expand Down
4 changes: 4 additions & 0 deletions pkg/cmd/grafana-kiosk/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ type Args struct {
LoginMethod string
URL string
Username string
PageLoadDelayMS int64
Password string
UsernameField string
PasswordField string
Expand All @@ -58,6 +59,7 @@ func ProcessArgs(cfg interface{}) Args {
flagSettings.StringVar(&processedArgs.WindowPosition, "window-position", "0,0", "Top Left Position of Kiosk")
flagSettings.StringVar(&processedArgs.WindowSize, "window-size", "", "Size of Kiosk in pixels (width,height)")
flagSettings.StringVar(&processedArgs.ScaleFactor, "scale-factor", "1.0", "Scale factor, sort of zoom")
flagSettings.Int64Var(&processedArgs.PageLoadDelayMS, "page-load-delay-ms", 2000, "Delay in milliseconds before navigating to URL")
flagSettings.BoolVar(&processedArgs.IsPlayList, "playlists", false, "URL is a playlist")
flagSettings.BoolVar(&processedArgs.AutoFit, "autofit", true, "Fit panels to screen")
flagSettings.BoolVar(&processedArgs.LXDEEnabled, "lxde", false, "Initialize LXDE for kiosk mode")
Expand Down Expand Up @@ -125,6 +127,7 @@ func summary(cfg *kiosk.Config) {
log.Println("WindowPosition:", cfg.General.WindowPosition)
log.Println("WindowSize:", cfg.General.WindowSize)
log.Println("ScaleFactor:", cfg.General.ScaleFactor)
log.Println("PageLoadDelayMS:", cfg.General.PageLoadDelayMS)
// target
log.Println("URL:", cfg.Target.URL)
log.Println("LoginMethod:", cfg.Target.LoginMethod)
Expand Down Expand Up @@ -186,6 +189,7 @@ func main() {
cfg.General.WindowPosition = args.WindowPosition
cfg.General.WindowSize = args.WindowSize
cfg.General.ScaleFactor = args.ScaleFactor
cfg.General.PageLoadDelayMS = args.PageLoadDelayMS
//
cfg.GoAuth.AutoLogin = args.OauthAutoLogin
cfg.GoAuth.UsernameField = args.UsernameField
Expand Down
27 changes: 26 additions & 1 deletion pkg/kiosk/local_login.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,21 +57,46 @@ func GrafanaKioskLocal(cfg *Config, messages chan string) {
baseURL := cfg.Target.URL[:endIndex]
bypassURL := baseURL + "/login/local"

log.Println("Bypassing Azure AD autoLogin at ", bypassURL)
log.Println("Bypassing autoLogin using URL ", bypassURL)

if err := chromedp.Run(taskCtx,
chromedp.Navigate(bypassURL),
chromedp.ActionFunc(func(context.Context) error {
log.Printf("Sleeping %d MS before checking for login fields", cfg.General.PageLoadDelayMS)
time.Sleep(time.Duration(cfg.General.PageLoadDelayMS) * time.Millisecond)
return nil
}),
chromedp.WaitVisible(`//input[@name="user"]`, chromedp.BySearch),
chromedp.SendKeys(`//input[@name="user"]`, cfg.Target.Username, chromedp.BySearch),
chromedp.SendKeys(`//input[@name="password"]`, cfg.Target.Password+kb.Enter, chromedp.BySearch),
chromedp.ActionFunc(func(context.Context) error {
log.Printf("Sleeping %d MS before checking for topnav", cfg.General.PageLoadDelayMS)
time.Sleep(time.Duration(cfg.General.PageLoadDelayMS) * time.Millisecond)
return nil
}),
chromedp.WaitVisible(`//img[@alt="User avatar"]`, chromedp.BySearch),
chromedp.ActionFunc(func(context.Context) error {
log.Printf("Sleeping %d MS before navigating to final url", cfg.General.PageLoadDelayMS)
time.Sleep(time.Duration(cfg.General.PageLoadDelayMS) * time.Millisecond)
return nil
}),
chromedp.Navigate(generatedURL),
); err != nil {
panic(err)
}
} else {
if err := chromedp.Run(taskCtx,
chromedp.ActionFunc(func(context.Context) error {
log.Printf("Sleeping %d MS before navigating to final url", cfg.General.PageLoadDelayMS)
time.Sleep(time.Duration(cfg.General.PageLoadDelayMS) * time.Millisecond)
return nil
}),
chromedp.Navigate(generatedURL),
chromedp.ActionFunc(func(context.Context) error {
log.Printf("Sleeping %d MS before checking for login fields", cfg.General.PageLoadDelayMS)
time.Sleep(time.Duration(cfg.General.PageLoadDelayMS) * time.Millisecond)
return nil
}),
chromedp.WaitVisible(`//input[@name="user"]`, chromedp.BySearch),
chromedp.SendKeys(`//input[@name="user"]`, cfg.Target.Username, chromedp.BySearch),
chromedp.SendKeys(`//input[@name="password"]`, cfg.Target.Password+kb.Enter, chromedp.BySearch),
Expand Down

0 comments on commit 19dc76d

Please sign in to comment.