diff --git a/object/application.go b/object/application.go index 8f29e8ec..4b79d703 100644 --- a/object/application.go +++ b/object/application.go @@ -481,7 +481,10 @@ func GetApplicationByClientId(clientId string) (*Application, error) { } func GetApplication(id string) (*Application, error) { - owner, name := util.GetOwnerAndNameFromId(id) + owner, name, err := util.GetOwnerAndNameFromIdWithError(id) + if err != nil { + return nil, err + } return getApplication(owner, name) } diff --git a/object/organization.go b/object/organization.go index 883fcc64..c4a9fb21 100644 --- a/object/organization.go +++ b/object/organization.go @@ -151,7 +151,10 @@ func getOrganization(owner string, name string) (*Organization, error) { } func GetOrganization(id string) (*Organization, error) { - owner, name := util.GetOwnerAndNameFromId(id) + owner, name, err := util.GetOwnerAndNameFromIdWithError(id) + if err != nil { + return nil, err + } return getOrganization(owner, name) } diff --git a/routers/theme_filter.go b/routers/theme_filter.go index b6b694bd..bc8d712d 100644 --- a/routers/theme_filter.go +++ b/routers/theme_filter.go @@ -32,94 +32,79 @@ type OrganizationThemeCookie struct { } func appendThemeCookie(ctx *context.Context, urlPath string) (*OrganizationThemeCookie, error) { + organizationThemeCookie, err := getOrganizationThemeCookieFromUrlPath(ctx, urlPath) + if err != nil { + return nil, err + } + if organizationThemeCookie != nil { + return organizationThemeCookie, setThemeDataCookie(ctx, organizationThemeCookie) + } + + return nil, nil +} + +func getOrganizationThemeCookieFromUrlPath(ctx *context.Context, urlPath string) (*OrganizationThemeCookie, error) { + var application *object.Application + var organization *object.Organization + var err error if urlPath == "/login" { - application, err := object.GetDefaultApplication(fmt.Sprintf("admin/built-in")) + application, err = object.GetDefaultApplication(fmt.Sprintf("admin/built-in")) if err != nil { return nil, err } - organization := application.OrganizationObj - if organization == nil { - organization, err = object.GetOrganization(fmt.Sprintf("admin/built-in")) - if err != nil { - return nil, err - } - } - if organization != nil { - organizationThemeCookie := &OrganizationThemeCookie{ - application.ThemeData, - application.Logo, - application.FooterHtml, - organization.Favicon, - organization.DisplayName, - } - - if application.ThemeData != nil { - organizationThemeCookie.ThemeData = organization.ThemeData - } - return organizationThemeCookie, setThemeDataCookie(ctx, organizationThemeCookie) - } } else if strings.HasPrefix(urlPath, "/login/oauth/authorize") { clientId := ctx.Input.Query("client_id") if clientId == "" { return nil, nil } - application, err := object.GetApplicationByClientId(clientId) + application, err = object.GetApplicationByClientId(clientId) if err != nil { return nil, err } - if application != nil { - organization := application.OrganizationObj - if organization == nil { - organization, err = object.GetOrganization(fmt.Sprintf("admin/%s", application.Owner)) - if err != nil { - return nil, err - } - } - organizationThemeCookie := &OrganizationThemeCookie{ - application.ThemeData, - application.Logo, - application.FooterHtml, - organization.Favicon, - organization.DisplayName, - } - - if application.ThemeData != nil { - organizationThemeCookie.ThemeData = organization.ThemeData - } - return organizationThemeCookie, setThemeDataCookie(ctx, organizationThemeCookie) + } else if strings.HasPrefix(urlPath, "/login/saml") { + owner, _ := strings.CutPrefix(urlPath, "/login/saml/authorize/") + application, err = object.GetApplication(owner) + if err != nil { + return nil, err } } else if strings.HasPrefix(urlPath, "/login/") { - owner := strings.Replace(urlPath, "/login/", "", -1) - if owner != "undefined" && owner != "oauth/undefined" { - application, err := object.GetDefaultApplication(fmt.Sprintf("admin/%s", owner)) - if err != nil { - return nil, err - } - organization := application.OrganizationObj - if organization == nil { - organization, err = object.GetOrganization(fmt.Sprintf("admin/%s", owner)) - if err != nil { - return nil, err - } - } - if organization != nil { - organizationThemeCookie := &OrganizationThemeCookie{ - application.ThemeData, - application.Logo, - application.FooterHtml, - organization.Favicon, - organization.DisplayName, - } - - if application.ThemeData != nil { - organizationThemeCookie.ThemeData = organization.ThemeData - } - return organizationThemeCookie, setThemeDataCookie(ctx, organizationThemeCookie) - } + owner, _ := strings.CutPrefix(urlPath, "/login/") + if owner == "undefined" || strings.Count(owner, "/") > 0 { + return nil, nil + } + application, err = object.GetDefaultApplication(fmt.Sprintf("admin/%s", owner)) + if err != nil { + return nil, err + } + } else if strings.HasPrefix(urlPath, "/cas/") && strings.HasSuffix(urlPath, "/login") { + owner, _ := strings.CutPrefix(urlPath, "/cas/") + owner, _ = strings.CutSuffix(owner, "/login") + application, err = object.GetApplication(owner) + if err != nil { + return nil, err } } - return nil, nil + if application == nil { + return nil, nil + } + organization = application.OrganizationObj + if organization == nil { + organization, err = object.GetOrganization(fmt.Sprintf("admin/%s", application.Organization)) + if err != nil { + return nil, err + } + } + + organizationThemeCookie := &OrganizationThemeCookie{ + application.ThemeData, + application.Logo, + application.FooterHtml, + organization.Favicon, + organization.DisplayName, + } + + return organizationThemeCookie, nil } func setThemeDataCookie(ctx *context.Context, organizationThemeCookie *OrganizationThemeCookie) error {