forked from go-gitea/gitea
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'giteaofficial/main'
* giteaofficial/main: Prevent NPE whilst migrating if there is a team request review (go-gitea#19855) [skip ci] Updated translations via Crowdin Add support for rendering terminal output with colors (go-gitea#19497) Fix viewed images not loading in a PR (go-gitea#19919) Remove out-dated comments (go-gitea#19921) Automatically render wiki TOC (go-gitea#19873) Improve wording on delete access token modal (go-gitea#19909) [skip ci] Updated translations via Crowdin Add breaking email restrictions checker in doctor (go-gitea#19903) Ensure minimum mirror interval is reported on settings page (go-gitea#19895) Improve UX on modal for deleting an access token (go-gitea#19894) update discord invite (go-gitea#19907) Only log non ErrNotExist errors in git.GetNote (go-gitea#19884) [skip ci] Updated translations via Crowdin Update frontend guideline (go-gitea#19901) Make AppDataPath absolute against the AppWorkPath if it is not (go-gitea#19815)
- Loading branch information
Showing
55 changed files
with
805 additions
and
113 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
// Copyright 2022 The Gitea Authors. All rights reserved. | ||
// Use of this source code is governed by a MIT-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package doctor | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
|
||
"code.gitea.io/gitea/models/db" | ||
"code.gitea.io/gitea/models/user" | ||
"code.gitea.io/gitea/modules/log" | ||
|
||
"xorm.io/builder" | ||
) | ||
|
||
func iterateUserAccounts(ctx context.Context, each func(*user.User) error) error { | ||
err := db.Iterate( | ||
ctx, | ||
new(user.User), | ||
builder.Gt{"id": 0}, | ||
func(idx int, bean interface{}) error { | ||
return each(bean.(*user.User)) | ||
}, | ||
) | ||
return err | ||
} | ||
|
||
// Since 1.16.4 new restrictions has been set on email addresses. However users with invalid email | ||
// addresses would be currently facing a error due to their invalid email address. | ||
// Ref: https://github.com/go-gitea/gitea/pull/19085 & https://github.com/go-gitea/gitea/pull/17688 | ||
func checkUserEmail(ctx context.Context, logger log.Logger, _ bool) error { | ||
// We could use quirky SQL to get all users that start without a [a-zA-Z0-9], but that would mean | ||
// DB provider-specific SQL and only works _now_. So instead we iterate trough all user accounts and | ||
// use the user.ValidateEmail function to be future-proof. | ||
var invalidUserCount int64 | ||
if err := iterateUserAccounts(ctx, func(u *user.User) error { | ||
// Only check for users, skip | ||
if u.Type != user.UserTypeIndividual { | ||
return nil | ||
} | ||
|
||
if err := user.ValidateEmail(u.Email); err != nil { | ||
invalidUserCount++ | ||
logger.Warn("User[id=%d name=%q] have not a valid e-mail: %v", u.ID, u.Name, err) | ||
} | ||
return nil | ||
}); err != nil { | ||
return fmt.Errorf("iterateUserAccounts: %v", err) | ||
} | ||
|
||
if invalidUserCount == 0 { | ||
logger.Info("All users have a valid e-mail.") | ||
} else { | ||
logger.Warn("%d user(s) have a non-valid e-mail.", invalidUserCount) | ||
} | ||
return nil | ||
} | ||
|
||
func init() { | ||
Register(&Check{ | ||
Title: "Check if users has an valid email address", | ||
Name: "check-user-email", | ||
IsDefault: false, | ||
Run: checkUserEmail, | ||
Priority: 9, | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
// Copyright 2022 The Gitea Authors. All rights reserved. | ||
// Use of this source code is governed by a MIT-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package console | ||
|
||
import ( | ||
"bytes" | ||
"io" | ||
"path/filepath" | ||
"regexp" | ||
"strings" | ||
|
||
"code.gitea.io/gitea/modules/markup" | ||
"code.gitea.io/gitea/modules/setting" | ||
|
||
trend "github.com/buildkite/terminal-to-html/v3" | ||
"github.com/go-enry/go-enry/v2" | ||
) | ||
|
||
// MarkupName describes markup's name | ||
var MarkupName = "console" | ||
|
||
func init() { | ||
markup.RegisterRenderer(Renderer{}) | ||
} | ||
|
||
// Renderer implements markup.Renderer | ||
type Renderer struct{} | ||
|
||
// Name implements markup.Renderer | ||
func (Renderer) Name() string { | ||
return MarkupName | ||
} | ||
|
||
// NeedPostProcess implements markup.Renderer | ||
func (Renderer) NeedPostProcess() bool { return false } | ||
|
||
// Extensions implements markup.Renderer | ||
func (Renderer) Extensions() []string { | ||
return []string{".sh-session"} | ||
} | ||
|
||
// SanitizerRules implements markup.Renderer | ||
func (Renderer) SanitizerRules() []setting.MarkupSanitizerRule { | ||
return []setting.MarkupSanitizerRule{ | ||
{Element: "span", AllowAttr: "class", Regexp: regexp.MustCompile(`^term-((fg[ix]?|bg)\d+|container)$`)}, | ||
} | ||
} | ||
|
||
// SanitizerDisabled disabled sanitize if return true | ||
func (Renderer) SanitizerDisabled() bool { | ||
return false | ||
} | ||
|
||
// CanRender implements markup.RendererContentDetector | ||
func (Renderer) CanRender(filename string, input io.Reader) bool { | ||
buf, err := io.ReadAll(input) | ||
if err != nil { | ||
return false | ||
} | ||
if enry.GetLanguage(filepath.Base(filename), buf) != enry.OtherLanguage { | ||
return false | ||
} | ||
return bytes.ContainsRune(buf, '\x1b') | ||
} | ||
|
||
// Render renders terminal colors to HTML with all specific handling stuff. | ||
func (Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.Writer) error { | ||
buf, err := io.ReadAll(input) | ||
if err != nil { | ||
return err | ||
} | ||
buf = trend.Render(buf) | ||
buf = bytes.ReplaceAll(buf, []byte("\n"), []byte(`<br>`)) | ||
_, err = output.Write(buf) | ||
return err | ||
} | ||
|
||
// Render renders terminal colors to HTML with all specific handling stuff. | ||
func Render(ctx *markup.RenderContext, input io.Reader, output io.Writer) error { | ||
if ctx.Type == "" { | ||
ctx.Type = MarkupName | ||
} | ||
return markup.Render(ctx, input, output) | ||
} | ||
|
||
// RenderString renders terminal colors in string to HTML with all specific handling stuff and return string | ||
func RenderString(ctx *markup.RenderContext, content string) (string, error) { | ||
var buf strings.Builder | ||
if err := Render(ctx, strings.NewReader(content), &buf); err != nil { | ||
return "", err | ||
} | ||
return buf.String(), nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// Copyright 2022 The Gitea Authors. All rights reserved. | ||
// Use of this source code is governed by a MIT-style | ||
// license that can be found in the LICENSE file. | ||
|
||
package console | ||
|
||
import ( | ||
"strings" | ||
"testing" | ||
|
||
"code.gitea.io/gitea/modules/markup" | ||
|
||
"github.com/stretchr/testify/assert" | ||
) | ||
|
||
func TestRenderConsole(t *testing.T) { | ||
var render Renderer | ||
kases := map[string]string{ | ||
"\x1b[37m\x1b[40mnpm\x1b[0m \x1b[0m\x1b[32minfo\x1b[0m \x1b[0m\x1b[35mit worked if it ends with\x1b[0m ok": "<span class=\"term-fg37 term-bg40\">npm</span> <span class=\"term-fg32\">info</span> <span class=\"term-fg35\">it worked if it ends with</span> ok", | ||
} | ||
|
||
for k, v := range kases { | ||
var buf strings.Builder | ||
canRender := render.CanRender("test", strings.NewReader(k)) | ||
assert.True(t, canRender) | ||
|
||
err := render.Render(&markup.RenderContext{}, strings.NewReader(k), &buf) | ||
assert.NoError(t, err) | ||
assert.EqualValues(t, v, buf.String()) | ||
} | ||
} |
Oops, something went wrong.