mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 21:16:26 +01:00 
			
		
		
		
	fix wrong link in user and organization profile when using relative url (#28617)
fix #28436. the doc https://docs.gitea.com/usage/profile-readme maybe also need to be updated to tell that the main branch is necessary,which means the following three conditions should be satisfied: - repo: **.profile** - branch: **[default branch]** - markdown: **README.md**
This commit is contained in:
		
							parent
							
								
									baf0d402d9
								
							
						
					
					
						commit
						42149ff1a8
					
				@ -18,6 +18,7 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/markup"
 | 
			
		||||
	"code.gitea.io/gitea/modules/markup/markdown"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
	shared_user "code.gitea.io/gitea/routers/web/shared/user"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -157,14 +158,14 @@ func Home(ctx *context.Context) {
 | 
			
		||||
 | 
			
		||||
	ctx.Data["ShowMemberAndTeamTab"] = ctx.Org.IsMember || len(members) > 0
 | 
			
		||||
 | 
			
		||||
	profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx, ctx.Doer)
 | 
			
		||||
	profileDbRepo, profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx, ctx.Doer)
 | 
			
		||||
	defer profileClose()
 | 
			
		||||
	prepareOrgProfileReadme(ctx, profileGitRepo, profileReadmeBlob)
 | 
			
		||||
	prepareOrgProfileReadme(ctx, profileGitRepo, profileDbRepo, profileReadmeBlob)
 | 
			
		||||
 | 
			
		||||
	ctx.HTML(http.StatusOK, tplOrgHome)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func prepareOrgProfileReadme(ctx *context.Context, profileGitRepo *git.Repository, profileReadme *git.Blob) {
 | 
			
		||||
func prepareOrgProfileReadme(ctx *context.Context, profileGitRepo *git.Repository, profileDbRepo *repo_model.Repository, profileReadme *git.Blob) {
 | 
			
		||||
	if profileGitRepo == nil || profileReadme == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
@ -172,9 +173,13 @@ func prepareOrgProfileReadme(ctx *context.Context, profileGitRepo *git.Repositor
 | 
			
		||||
	if bytes, err := profileReadme.GetBlobContent(setting.UI.MaxDisplayFileSize); err != nil {
 | 
			
		||||
		log.Error("failed to GetBlobContent: %v", err)
 | 
			
		||||
	} else {
 | 
			
		||||
		// Pass URLPrefix to markdown render for the full link of media elements.
 | 
			
		||||
		// The profile of default branch would be shown.
 | 
			
		||||
		prefix := profileDbRepo.Link() + "/src/branch/" + util.PathEscapeSegments(profileDbRepo.DefaultBranch)
 | 
			
		||||
		if profileContent, err := markdown.RenderString(&markup.RenderContext{
 | 
			
		||||
			Ctx:       ctx,
 | 
			
		||||
			GitRepo:   profileGitRepo,
 | 
			
		||||
			URLPrefix: prefix,
 | 
			
		||||
			Metas:     map[string]string{"mode": "document"},
 | 
			
		||||
		}, bytes); err != nil {
 | 
			
		||||
			log.Error("failed to RenderString: %v", err)
 | 
			
		||||
 | 
			
		||||
@ -87,7 +87,7 @@ func PrepareContextForProfileBigAvatar(ctx *context.Context) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func FindUserProfileReadme(ctx *context.Context, doer *user_model.User) (profileGitRepo *git.Repository, profileReadmeBlob *git.Blob, profileClose func()) {
 | 
			
		||||
func FindUserProfileReadme(ctx *context.Context, doer *user_model.User) (profileDbRepo *repo_model.Repository, profileGitRepo *git.Repository, profileReadmeBlob *git.Blob, profileClose func()) {
 | 
			
		||||
	profileDbRepo, err := repo_model.GetRepositoryByName(ctx, ctx.ContextUser.ID, ".profile")
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		perm, err := access_model.GetUserRepoPermission(ctx, profileDbRepo, doer)
 | 
			
		||||
@ -105,7 +105,7 @@ func FindUserProfileReadme(ctx *context.Context, doer *user_model.User) (profile
 | 
			
		||||
	} else if !repo_model.IsErrRepoNotExist(err) {
 | 
			
		||||
		log.Error("FindUserProfileReadme failed to GetRepositoryByName: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	return profileGitRepo, profileReadmeBlob, func() {
 | 
			
		||||
	return profileDbRepo, profileGitRepo, profileReadmeBlob, func() {
 | 
			
		||||
		if profileGitRepo != nil {
 | 
			
		||||
			_ = profileGitRepo.Close()
 | 
			
		||||
		}
 | 
			
		||||
@ -115,7 +115,7 @@ func FindUserProfileReadme(ctx *context.Context, doer *user_model.User) (profile
 | 
			
		||||
func RenderUserHeader(ctx *context.Context) {
 | 
			
		||||
	prepareContextForCommonProfile(ctx)
 | 
			
		||||
 | 
			
		||||
	_, profileReadmeBlob, profileClose := FindUserProfileReadme(ctx, ctx.Doer)
 | 
			
		||||
	_, _, profileReadmeBlob, profileClose := FindUserProfileReadme(ctx, ctx.Doer)
 | 
			
		||||
	defer profileClose()
 | 
			
		||||
	ctx.Data["HasProfileReadme"] = profileReadmeBlob != nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -64,17 +64,17 @@ func userProfile(ctx *context.Context) {
 | 
			
		||||
		ctx.Data["HeatmapTotalContributions"] = activities_model.GetTotalContributionsInHeatmap(data)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx, ctx.Doer)
 | 
			
		||||
	profileDbRepo, profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx, ctx.Doer)
 | 
			
		||||
	defer profileClose()
 | 
			
		||||
 | 
			
		||||
	showPrivate := ctx.IsSigned && (ctx.Doer.IsAdmin || ctx.Doer.ID == ctx.ContextUser.ID)
 | 
			
		||||
	prepareUserProfileTabData(ctx, showPrivate, profileGitRepo, profileReadmeBlob)
 | 
			
		||||
	prepareUserProfileTabData(ctx, showPrivate, profileDbRepo, profileGitRepo, profileReadmeBlob)
 | 
			
		||||
	// call PrepareContextForProfileBigAvatar later to avoid re-querying the NumFollowers & NumFollowing
 | 
			
		||||
	shared_user.PrepareContextForProfileBigAvatar(ctx)
 | 
			
		||||
	ctx.HTML(http.StatusOK, tplProfile)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileGitRepo *git.Repository, profileReadme *git.Blob) {
 | 
			
		||||
func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileDbRepo *repo_model.Repository, profileGitRepo *git.Repository, profileReadme *git.Blob) {
 | 
			
		||||
	// if there is a profile readme, default to "overview" page, otherwise, default to "repositories" page
 | 
			
		||||
	// if there is not a profile readme, the overview tab should be treated as the repositories tab
 | 
			
		||||
	tab := ctx.FormString("tab")
 | 
			
		||||
@ -233,9 +233,17 @@ func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileGi
 | 
			
		||||
		if bytes, err := profileReadme.GetBlobContent(setting.UI.MaxDisplayFileSize); err != nil {
 | 
			
		||||
			log.Error("failed to GetBlobContent: %v", err)
 | 
			
		||||
		} else {
 | 
			
		||||
			// Give the URLPrefix to the markdown render for the full link of media element.
 | 
			
		||||
			// the media link usually be like /[user]/[repoName]/media/branch/[branchName],
 | 
			
		||||
			// 	Eg. /Tom/.profile/media/branch/main
 | 
			
		||||
			// The branch shown on the profile page is the default branch, this need to be in sync with doc, see:
 | 
			
		||||
			//	https://docs.gitea.com/usage/profile-readme
 | 
			
		||||
 | 
			
		||||
			prefix := profileDbRepo.Link() + "/src/branch/" + util.PathEscapeSegments(profileDbRepo.DefaultBranch)
 | 
			
		||||
			if profileContent, err := markdown.RenderString(&markup.RenderContext{
 | 
			
		||||
				Ctx:       ctx,
 | 
			
		||||
				GitRepo:   profileGitRepo,
 | 
			
		||||
				URLPrefix: prefix,
 | 
			
		||||
				Metas:     map[string]string{"mode": "document"},
 | 
			
		||||
			}, bytes); err != nil {
 | 
			
		||||
				log.Error("failed to RenderString: %v", err)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user