]> source.dussan.org Git - gitea.git/commitdiff
add `/assets` as root dir of public files (#15219)
authora1012112796 <1012112796@qq.com>
Wed, 28 Apr 2021 12:35:06 +0000 (20:35 +0800)
committerGitHub <noreply@github.com>
Wed, 28 Apr 2021 12:35:06 +0000 (12:35 +0000)
* 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>
12 files changed:
integrations/links_test.go
models/avatar.go
models/avatar_test.go
models/oauth2.go
models/user.go
modules/public/public.go
modules/setting/picture.go
modules/setting/setting.go
modules/templates/helper.go
routers/routes/web.go
routers/user/profile.go
web_src/js/features/serviceworker.js

index e16b688c8de3bb6af2f8f2b99c3da64fa70dd1fe..3b9c245fc37c163ca0e0e59415fdb71fe59fde19 100644 (file)
@@ -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 {
index de416a1dbadd9c55d24fc2b7212fb65cbe7a3980..4f02fe508981d3bb1d006d4ffa8ef3d6cb897d55 100644 (file)
@@ -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()
 }
 
index 89540705a0144915ad4586c3a29b7172d79035c3..bf99897d8812edd307b5cb1ed1e27b6bdb7589d7 100644 (file)
@@ -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)
index 83e2e8c43f0b9e8b2df04bc70dd2308e6bdc2ad9..cc9de74f84ebc8ac4c004e52e7c05fdcac938244 100644 (file)
@@ -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"),
                },
index 53a8ac34862d1937298b36091635440182c1ee3c..6665782d352af194e1197795a4921b35be86d332 100644 (file)
@@ -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"}
 )
index 14525cfa0e67e008ee33f051475e377c06324dce..c68f980352ab4ee1d408d620e404a6341c662088 100644 (file)
@@ -32,7 +32,6 @@ var KnownPublicEntries = []string{
        "js",
        "serviceworker.js",
        "vendor",
-       "favicon.ico",
 }
 
 // Custom implements the static handler for serving custom assets.
index fa97245aa144bedab047651da8f39bc24839360a..415552d7ce646d44bf659566c8f4aaeaaa111df5 100644 (file)
@@ -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")
 }
index 7963776fd0644a21289aa5f0e94ac6253bb19248..aef0d867006b4819c2ef78226faff52c4127251b 100644 (file)
@@ -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",
                        },
index 7b175bfab3e76004b8649b6ba63a3ead6c464f9f..8f1362afc411376fe9871fa06716d098cbb29ffa 100644 (file)
@@ -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
index cedab78434b51ae290bd1dfead78b07263dccb2c..ceb024249ec91c64e2ab655e33de0f770795da88 100644 (file)
@@ -152,6 +152,7 @@ func WebRoutes() *web.Route {
                &public.Options{
                        Directory:   path.Join(setting.StaticRootPath, "public"),
                        SkipLogging: setting.DisableRouterLog,
+                       Prefix:      "/assets",
                },
        ))
 
index bb4c0cd5b166b9174afc914e3eedfff2b9c1b9af..8ff1ee24adc800a434f93334d1fbf9ad6fa6da1c 100644 (file)
@@ -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
        }
index fa415866cd2997db05d35236d8539bd4f0ba04c4..400a33140b15af069dd7be5cfd1c922ee1b0df6c 100644 (file)
@@ -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);