Compare commits

..

2 Commits

3 changed files with 16 additions and 4 deletions

View File

@@ -59,8 +59,10 @@ func (c *ApiController) HandleSamlRedirect() {
relayState := c.Input().Get("RelayState")
samlRequest := c.Input().Get("SAMLRequest")
username := c.Input().Get("username")
loginHint := c.Input().Get("login_hint")
targetURL := object.GetSamlRedirectAddress(owner, application, relayState, samlRequest, host)
targetURL := object.GetSamlRedirectAddress(owner, application, relayState, samlRequest, host, username, loginHint)
c.Redirect(targetURL, http.StatusSeeOther)
}

View File

@@ -26,6 +26,7 @@ import (
"errors"
"fmt"
"io"
"net/url"
"strings"
"time"
@@ -547,7 +548,14 @@ func NewSamlResponse11(application *Application, user *User, requestID string, h
return samlResponse, nil
}
func GetSamlRedirectAddress(owner string, application string, relayState string, samlRequest string, host string) string {
func GetSamlRedirectAddress(owner string, application string, relayState string, samlRequest string, host string, username string, loginHint string) string {
originF, _ := getOriginFromHost(host)
return fmt.Sprintf("%s/login/saml/authorize/%s/%s?relayState=%s&samlRequest=%s", originF, owner, application, relayState, samlRequest)
baseURL := fmt.Sprintf("%s/login/saml/authorize/%s/%s?relayState=%s&samlRequest=%s", originF, owner, application, relayState, samlRequest)
if username != "" {
baseURL += fmt.Sprintf("&username=%s", url.QueryEscape(username))
}
if loginHint != "" {
baseURL += fmt.Sprintf("&login_hint=%s", url.QueryEscape(loginHint))
}
return baseURL
}

View File

@@ -47,6 +47,7 @@ class LoginPage extends React.Component {
constructor(props) {
super(props);
this.captchaRef = React.createRef();
const urlParams = new URLSearchParams(this.props.location?.search);
this.state = {
classes: props,
type: props.type,
@@ -70,6 +71,7 @@ class LoginPage extends React.Component {
loginLoading: false,
userCode: props.userCode ?? (props.match?.params?.userCode ?? null),
userCodeStatus: "",
prefilledUsername: urlParams.get("username") || urlParams.get("login_hint"),
};
if (this.state.type === "cas" && props.match?.params.casApplicationName !== undefined) {
@@ -1011,7 +1013,7 @@ class LoginPage extends React.Component {
organization: application.organization,
application: application.name,
autoSignin: !application?.signinItems.map(signinItem => signinItem.name === "Forgot password?" && signinItem.rule === "Auto sign in - False")?.includes(true),
username: Conf.ShowGithubCorner ? "admin" : "",
username: this.state.prefilledUsername || (Conf.ShowGithubCorner ? "admin" : ""),
password: Conf.ShowGithubCorner ? "123" : "",
}}
onFinish={(values) => {