mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	add /assets as root dir of public files (#15219)
				
					
				
			* add `/assets` as root dir of public files Signed-off-by: a1012112796 <1012112796@qq.com> * move serviceworker.js * make fmt * fix some link * fix test * Apply suggestions from code review Co-authored-by: silverwind <me@silverwind.io> * Apply suggestions from code review Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		@@ -51,7 +51,7 @@ func TestRedirectsNoLogin(t *testing.T) {
 | 
			
		||||
		"/user2/repo1/src/master":                    "/user2/repo1/src/branch/master",
 | 
			
		||||
		"/user2/repo1/src/master/file.txt":           "/user2/repo1/src/branch/master/file.txt",
 | 
			
		||||
		"/user2/repo1/src/master/directory/file.txt": "/user2/repo1/src/branch/master/directory/file.txt",
 | 
			
		||||
		"/user/avatar/Ghost/-1":                      "/img/avatar_default.png",
 | 
			
		||||
		"/user/avatar/Ghost/-1":                      "/assets/img/avatar_default.png",
 | 
			
		||||
		"/api/v1/swagger":                            "/api/swagger",
 | 
			
		||||
	}
 | 
			
		||||
	for link, redirectLink := range redirects {
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ func DefaultAvatarLink() string {
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	u.Path = path.Join(u.Path, "/img/avatar_default.png")
 | 
			
		||||
	u.Path = path.Join(u.Path, "/assets/img/avatar_default.png")
 | 
			
		||||
	return u.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ func TestHashEmail(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
func TestSizedAvatarLink(t *testing.T) {
 | 
			
		||||
	disableGravatar()
 | 
			
		||||
	assert.Equal(t, "/suburl/img/avatar_default.png",
 | 
			
		||||
	assert.Equal(t, "/suburl/assets/img/avatar_default.png",
 | 
			
		||||
		SizedAvatarLink("gitea@example.com", 100))
 | 
			
		||||
 | 
			
		||||
	enableGravatar(t)
 | 
			
		||||
 
 | 
			
		||||
@@ -23,11 +23,11 @@ type OAuth2Provider struct {
 | 
			
		||||
// key is used to map the OAuth2Provider with the goth provider type (also in LoginSource.OAuth2Config.Provider)
 | 
			
		||||
// value is used to store display data
 | 
			
		||||
var OAuth2Providers = map[string]OAuth2Provider{
 | 
			
		||||
	"bitbucket": {Name: "bitbucket", DisplayName: "Bitbucket", Image: "/img/auth/bitbucket.png"},
 | 
			
		||||
	"dropbox":   {Name: "dropbox", DisplayName: "Dropbox", Image: "/img/auth/dropbox.png"},
 | 
			
		||||
	"facebook":  {Name: "facebook", DisplayName: "Facebook", Image: "/img/auth/facebook.png"},
 | 
			
		||||
	"bitbucket": {Name: "bitbucket", DisplayName: "Bitbucket", Image: "/assets/img/auth/bitbucket.png"},
 | 
			
		||||
	"dropbox":   {Name: "dropbox", DisplayName: "Dropbox", Image: "/assets/img/auth/dropbox.png"},
 | 
			
		||||
	"facebook":  {Name: "facebook", DisplayName: "Facebook", Image: "/assets/img/auth/facebook.png"},
 | 
			
		||||
	"github": {
 | 
			
		||||
		Name: "github", DisplayName: "GitHub", Image: "/img/auth/github.png",
 | 
			
		||||
		Name: "github", DisplayName: "GitHub", Image: "/assets/img/auth/github.png",
 | 
			
		||||
		CustomURLMapping: &oauth2.CustomURLMapping{
 | 
			
		||||
			TokenURL:   oauth2.GetDefaultTokenURL("github"),
 | 
			
		||||
			AuthURL:    oauth2.GetDefaultAuthURL("github"),
 | 
			
		||||
@@ -36,19 +36,19 @@ var OAuth2Providers = map[string]OAuth2Provider{
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	"gitlab": {
 | 
			
		||||
		Name: "gitlab", DisplayName: "GitLab", Image: "/img/auth/gitlab.png",
 | 
			
		||||
		Name: "gitlab", DisplayName: "GitLab", Image: "/assets/img/auth/gitlab.png",
 | 
			
		||||
		CustomURLMapping: &oauth2.CustomURLMapping{
 | 
			
		||||
			TokenURL:   oauth2.GetDefaultTokenURL("gitlab"),
 | 
			
		||||
			AuthURL:    oauth2.GetDefaultAuthURL("gitlab"),
 | 
			
		||||
			ProfileURL: oauth2.GetDefaultProfileURL("gitlab"),
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	"gplus":         {Name: "gplus", DisplayName: "Google", Image: "/img/auth/google.png"},
 | 
			
		||||
	"openidConnect": {Name: "openidConnect", DisplayName: "OpenID Connect", Image: "/img/auth/openid_connect.svg"},
 | 
			
		||||
	"twitter":       {Name: "twitter", DisplayName: "Twitter", Image: "/img/auth/twitter.png"},
 | 
			
		||||
	"discord":       {Name: "discord", DisplayName: "Discord", Image: "/img/auth/discord.png"},
 | 
			
		||||
	"gplus":         {Name: "gplus", DisplayName: "Google", Image: "/assets/img/auth/google.png"},
 | 
			
		||||
	"openidConnect": {Name: "openidConnect", DisplayName: "OpenID Connect", Image: "/assets/img/auth/openid_connect.svg"},
 | 
			
		||||
	"twitter":       {Name: "twitter", DisplayName: "Twitter", Image: "/assets/img/auth/twitter.png"},
 | 
			
		||||
	"discord":       {Name: "discord", DisplayName: "Discord", Image: "/assets/img/auth/discord.png"},
 | 
			
		||||
	"gitea": {
 | 
			
		||||
		Name: "gitea", DisplayName: "Gitea", Image: "/img/auth/gitea.png",
 | 
			
		||||
		Name: "gitea", DisplayName: "Gitea", Image: "/assets/img/auth/gitea.png",
 | 
			
		||||
		CustomURLMapping: &oauth2.CustomURLMapping{
 | 
			
		||||
			TokenURL:   oauth2.GetDefaultTokenURL("gitea"),
 | 
			
		||||
			AuthURL:    oauth2.GetDefaultAuthURL("gitea"),
 | 
			
		||||
@@ -56,16 +56,16 @@ var OAuth2Providers = map[string]OAuth2Provider{
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	"nextcloud": {
 | 
			
		||||
		Name: "nextcloud", DisplayName: "Nextcloud", Image: "/img/auth/nextcloud.png",
 | 
			
		||||
		Name: "nextcloud", DisplayName: "Nextcloud", Image: "/assets/img/auth/nextcloud.png",
 | 
			
		||||
		CustomURLMapping: &oauth2.CustomURLMapping{
 | 
			
		||||
			TokenURL:   oauth2.GetDefaultTokenURL("nextcloud"),
 | 
			
		||||
			AuthURL:    oauth2.GetDefaultAuthURL("nextcloud"),
 | 
			
		||||
			ProfileURL: oauth2.GetDefaultProfileURL("nextcloud"),
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	"yandex": {Name: "yandex", DisplayName: "Yandex", Image: "/img/auth/yandex.png"},
 | 
			
		||||
	"yandex": {Name: "yandex", DisplayName: "Yandex", Image: "/assets/img/auth/yandex.png"},
 | 
			
		||||
	"mastodon": {
 | 
			
		||||
		Name: "mastodon", DisplayName: "Mastodon", Image: "/img/auth/mastodon.png",
 | 
			
		||||
		Name: "mastodon", DisplayName: "Mastodon", Image: "/assets/img/auth/mastodon.png",
 | 
			
		||||
		CustomURLMapping: &oauth2.CustomURLMapping{
 | 
			
		||||
			AuthURL: oauth2.GetDefaultAuthURL("mastodon"),
 | 
			
		||||
		},
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/generate"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/public"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/storage"
 | 
			
		||||
	"code.gitea.io/gitea/modules/structs"
 | 
			
		||||
@@ -772,7 +771,7 @@ func (u *User) IsGhost() bool {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	reservedUsernames = append([]string{
 | 
			
		||||
	reservedUsernames = []string{
 | 
			
		||||
		".",
 | 
			
		||||
		"..",
 | 
			
		||||
		".well-known",
 | 
			
		||||
@@ -807,7 +806,8 @@ var (
 | 
			
		||||
		"stars",
 | 
			
		||||
		"template",
 | 
			
		||||
		"user",
 | 
			
		||||
	}, public.KnownPublicEntries...)
 | 
			
		||||
		"favicon.ico",
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	reservedUserPatterns = []string{"*.keys", "*.gpg"}
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,6 @@ var KnownPublicEntries = []string{
 | 
			
		||||
	"js",
 | 
			
		||||
	"serviceworker.js",
 | 
			
		||||
	"vendor",
 | 
			
		||||
	"favicon.ico",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Custom implements the static handler for serving custom assets.
 | 
			
		||||
 
 | 
			
		||||
@@ -110,5 +110,5 @@ func newRepoAvatarService() {
 | 
			
		||||
	RepoAvatar.Storage = getStorage("repo-avatars", storageType, repoAvatarSec)
 | 
			
		||||
 | 
			
		||||
	RepoAvatar.Fallback = sec.Key("REPOSITORY_AVATAR_FALLBACK").MustString("none")
 | 
			
		||||
	RepoAvatar.FallbackImage = sec.Key("REPOSITORY_AVATAR_FALLBACK_IMAGE").MustString("/img/repo_default.png")
 | 
			
		||||
	RepoAvatar.FallbackImage = sec.Key("REPOSITORY_AVATAR_FALLBACK_IMAGE").MustString("/assets/img/repo_default.png")
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1139,12 +1139,12 @@ func MakeManifestData(appName string, appURL string, absoluteAssetURL string) []
 | 
			
		||||
		StartURL:  appURL,
 | 
			
		||||
		Icons: []manifestIcon{
 | 
			
		||||
			{
 | 
			
		||||
				Src:   absoluteAssetURL + "/img/logo.png",
 | 
			
		||||
				Src:   absoluteAssetURL + "/assets/img/logo.png",
 | 
			
		||||
				Type:  "image/png",
 | 
			
		||||
				Sizes: "512x512",
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				Src:   absoluteAssetURL + "/img/logo.svg",
 | 
			
		||||
				Src:   absoluteAssetURL + "/assets/img/logo.svg",
 | 
			
		||||
				Type:  "image/svg+xml",
 | 
			
		||||
				Sizes: "512x512",
 | 
			
		||||
			},
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ func NewFuncMap() []template.FuncMap {
 | 
			
		||||
			return setting.AppSubURL
 | 
			
		||||
		},
 | 
			
		||||
		"StaticUrlPrefix": func() string {
 | 
			
		||||
			return setting.StaticURLPrefix
 | 
			
		||||
			return setting.StaticURLPrefix + "/assets"
 | 
			
		||||
		},
 | 
			
		||||
		"AppUrl": func() string {
 | 
			
		||||
			return setting.AppURL
 | 
			
		||||
 
 | 
			
		||||
@@ -152,6 +152,7 @@ func WebRoutes() *web.Route {
 | 
			
		||||
		&public.Options{
 | 
			
		||||
			Directory:   path.Join(setting.StaticRootPath, "public"),
 | 
			
		||||
			SkipLogging: setting.DisableRouterLog,
 | 
			
		||||
			Prefix:      "/assets",
 | 
			
		||||
		},
 | 
			
		||||
	))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -46,11 +46,14 @@ func GetUserByParams(ctx *context.Context) *models.User {
 | 
			
		||||
// Profile render user's profile page
 | 
			
		||||
func Profile(ctx *context.Context) {
 | 
			
		||||
	uname := ctx.Params(":username")
 | 
			
		||||
 | 
			
		||||
	// Special handle for FireFox requests favicon.ico.
 | 
			
		||||
	if uname == "favicon.ico" {
 | 
			
		||||
		ctx.ServeFile(path.Join(setting.StaticRootPath, "public/img/favicon.png"))
 | 
			
		||||
		return
 | 
			
		||||
	} else if strings.HasSuffix(uname, ".png") {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if strings.HasSuffix(uname, ".png") {
 | 
			
		||||
		ctx.Error(http.StatusNotFound)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ export default async function initServiceWorker() {
 | 
			
		||||
      // the spec strictly requires it to be same-origin so it has to be AppSubUrl to work
 | 
			
		||||
      await Promise.all([
 | 
			
		||||
        checkCacheValidity(),
 | 
			
		||||
        navigator.serviceWorker.register(`${AppSubUrl}/serviceworker.js`),
 | 
			
		||||
        navigator.serviceWorker.register(`${AppSubUrl}/assets/serviceworker.js`),
 | 
			
		||||
      ]);
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      console.error(err);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user