mirror of
https://github.com/juanfont/headscale.git
synced 2025-11-09 21:49:39 -05:00
fix double login URL with OIDC (#2445)
* factor out login url parser Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com> * move to not trigger test gen checker Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com> * return regresp or err after waiting for registration Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com> * update changelog Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com> --------- Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
package util
|
||||
|
||||
import "tailscale.com/util/cmpver"
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"tailscale.com/util/cmpver"
|
||||
)
|
||||
|
||||
func TailscaleVersionNewerOrEqual(minimum, toCheck string) bool {
|
||||
if cmpver.Compare(minimum, toCheck) <= 0 ||
|
||||
@@ -11,3 +18,31 @@ func TailscaleVersionNewerOrEqual(minimum, toCheck string) bool {
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// ParseLoginURLFromCLILogin parses the output of the tailscale up command to extract the login URL.
|
||||
// It returns an error if not exactly one URL is found.
|
||||
func ParseLoginURLFromCLILogin(output string) (*url.URL, error) {
|
||||
lines := strings.Split(output, "\n")
|
||||
var urlStr string
|
||||
|
||||
for _, line := range lines {
|
||||
line = strings.TrimSpace(line)
|
||||
if strings.HasPrefix(line, "http://") || strings.HasPrefix(line, "https://") {
|
||||
if urlStr != "" {
|
||||
return nil, fmt.Errorf("multiple URLs found: %s and %s", urlStr, line)
|
||||
}
|
||||
urlStr = line
|
||||
}
|
||||
}
|
||||
|
||||
if urlStr == "" {
|
||||
return nil, errors.New("no URL found")
|
||||
}
|
||||
|
||||
loginURL, err := url.Parse(urlStr)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse URL: %w", err)
|
||||
}
|
||||
|
||||
return loginURL, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user