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:
Родитель
cc7d118b12
Коммит
1e877613bf
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче