Skip to content

Commit

Permalink
Merge remote-tracking branch 'giteaofficial/main'
Browse files Browse the repository at this point in the history
* giteaofficial/main:
  Use FullName in Emails to address the recipient if possible (go-gitea#31527)
  Don't show hidden labels when filling out an issue template (go-gitea#31576)
  [skip ci] Updated translations via Crowdin
  Convert frontend code to typescript (go-gitea#31559)
  [skip ci] Updated translations via Crowdin
  • Loading branch information
zjjhot committed Jul 9, 2024
2 parents d52d93a + 4696bcb commit 08cebd7
Show file tree
Hide file tree
Showing 176 changed files with 693 additions and 403 deletions.
10 changes: 5 additions & 5 deletions .eslintrc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ overrides:
worker: true
rules:
no-restricted-globals: [2, addEventListener, blur, close, closed, confirm, defaultStatus, defaultstatus, error, event, external, find, focus, frameElement, frames, history, innerHeight, innerWidth, isFinite, isNaN, length, locationbar, menubar, moveBy, moveTo, name, onblur, onerror, onfocus, onload, onresize, onunload, open, opener, opera, outerHeight, outerWidth, pageXOffset, pageYOffset, parent, print, removeEventListener, resizeBy, resizeTo, screen, screenLeft, screenTop, screenX, screenY, scroll, scrollbars, scrollBy, scrollTo, scrollX, scrollY, status, statusbar, stop, toolbar, top]
- files: ["*.config.*"]
- files: ["*.config.*", "**/*.d.ts"]
rules:
i/no-unused-modules: [0]
- files: ["**/*.test.*", "web_src/js/test/setup.js"]
- files: ["**/*.test.*", "web_src/js/test/setup.ts"]
env:
vitest-globals/env: true
rules:
Expand Down Expand Up @@ -114,7 +114,7 @@ overrides:
vitest/valid-describe-callback: [2]
vitest/valid-expect: [2]
vitest/valid-title: [2]
- files: ["web_src/js/modules/fetch.js", "web_src/js/standalone/**/*"]
- files: ["web_src/js/modules/fetch.ts", "web_src/js/standalone/**/*"]
rules:
no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement, SequenceExpression]
- files: ["**/*.vue"]
Expand Down Expand Up @@ -467,7 +467,7 @@ rules:
no-dupe-else-if: [2]
no-dupe-keys: [2]
no-duplicate-case: [2]
no-duplicate-imports: [2]
no-duplicate-imports: [0]
no-else-return: [2]
no-empty-character-class: [2]
no-empty-function: [0]
Expand Down Expand Up @@ -619,7 +619,7 @@ rules:
no-restricted-exports: [0]
no-restricted-globals: [2, addEventListener, blur, close, closed, confirm, defaultStatus, defaultstatus, error, event, external, find, focus, frameElement, frames, history, innerHeight, innerWidth, isFinite, isNaN, length, location, locationbar, menubar, moveBy, moveTo, name, onblur, onerror, onfocus, onload, onresize, onunload, open, opener, opera, outerHeight, outerWidth, pageXOffset, pageYOffset, parent, print, removeEventListener, resizeBy, resizeTo, screen, screenLeft, screenTop, screenX, screenY, scroll, scrollbars, scrollBy, scrollTo, scrollX, scrollY, self, status, statusbar, stop, toolbar, top, __dirname, __filename]
no-restricted-imports: [0]
no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement, SequenceExpression, {selector: "CallExpression[callee.name='fetch']", message: "use modules/fetch.js instead"}]
no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement, SequenceExpression, {selector: "CallExpression[callee.name='fetch']", message: "use modules/fetch.ts instead"}]
no-return-assign: [0]
no-script-url: [2]
no-self-assign: [2, {props: true}]
Expand Down
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ TAR_EXCLUDES := .git data indexers queues log node_modules $(EXECUTABLE) $(FOMAN
GO_DIRS := build cmd models modules routers services tests
WEB_DIRS := web_src/js web_src/css

ESLINT_FILES := web_src/js tools *.js tests/e2e
ESLINT_FILES := web_src/js tools *.js *.ts tests/e2e
STYLELINT_FILES := web_src/css web_src/js/components/*.vue
SPELLCHECK_FILES := $(GO_DIRS) $(WEB_DIRS) docs/content templates options/locale/locale_en-US.ini .github $(filter-out CHANGELOG.md, $(wildcard *.go *.js *.md *.yml *.yaml *.toml))
EDITORCONFIG_FILES := templates .github/workflows options/locale/locale_en-US.ini
Expand Down Expand Up @@ -376,12 +376,12 @@ lint-backend-fix: lint-go-fix lint-go-vet lint-editorconfig
.PHONY: lint-js
lint-js: node_modules
npx eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES)
npx tsc
# npx tsc

.PHONY: lint-js-fix
lint-js-fix: node_modules
npx eslint --color --max-warnings=0 --ext js,ts,vue $(ESLINT_FILES) --fix
npx tsc
# npx tsc

.PHONY: lint-css
lint-css: node_modules
Expand Down
30 changes: 30 additions & 0 deletions models/user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
"context"
"encoding/hex"
"fmt"
"mime"
"net/mail"
"net/url"
"path/filepath"
"regexp"
Expand Down Expand Up @@ -413,6 +415,34 @@ func (u *User) DisplayName() string {
return u.Name
}

var emailToReplacer = strings.NewReplacer(
"\n", "",
"\r", "",
"<", "",
">", "",
",", "",
":", "",
";", "",
)

// EmailTo returns a string suitable to be put into a e-mail `To:` header.
func (u *User) EmailTo() string {
sanitizedDisplayName := emailToReplacer.Replace(u.DisplayName())

// should be an edge case but nice to have
if sanitizedDisplayName == u.Email {
return u.Email
}

to := fmt.Sprintf("%s <%s>", sanitizedDisplayName, u.Email)
add, err := mail.ParseAddress(to)
if err != nil {
return u.Email
}

return fmt.Sprintf("%s <%s>", mime.QEncoding.Encode("utf-8", add.Name), add.Address)
}

// GetDisplayName returns full name if it's not empty and DEFAULT_SHOW_FULL_NAME is set,
// returns username otherwise.
func (u *User) GetDisplayName() string {
Expand Down
23 changes: 23 additions & 0 deletions models/user/user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,29 @@ func Test_NormalizeUserFromEmail(t *testing.T) {
}
}

func TestEmailTo(t *testing.T) {
testCases := []struct {
fullName string
mail string
result string
}{
{"Awareness Hub", "awareness@hub.net", "Awareness Hub <awareness@hub.net>"},
{"name@example.com", "name@example.com", "name@example.com"},
{"Hi Its <Mee>", "ee@mail.box", "Hi Its Mee <ee@mail.box>"},
{"Sinéad.O'Connor", "sinead.oconnor@gmail.com", "=?utf-8?q?Sin=C3=A9ad.O'Connor?= <sinead.oconnor@gmail.com>"},
{"Æsir", "aesir@gmx.de", "=?utf-8?q?=C3=86sir?= <aesir@gmx.de>"},
{"new😀user", "new.user@alo.com", "=?utf-8?q?new=F0=9F=98=80user?= <new.user@alo.com>"},
{`"quoted"`, "quoted@test.com", "quoted <quoted@test.com>"},
}

for _, testCase := range testCases {
t.Run(testCase.result, func(t *testing.T) {
testUser := &user_model.User{FullName: testCase.fullName, Email: testCase.mail}
assert.EqualValues(t, testCase.result, testUser.EmailTo())
})
}
}

func TestDisabledUserFeatures(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())

Expand Down
38 changes: 36 additions & 2 deletions options/locale/locale_ja-JP.ini
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ remove_all=すべて除去
remove_label_str=アイテム「%s」を削除
edit=編集
view=表示
test=テスト

enabled=有効
disabled=無効
Expand Down Expand Up @@ -386,13 +387,17 @@ relevant_repositories=妥当と思われるリポジトリのみを表示して

[auth]
create_new_account=アカウントを登録
already_have_account=すでにアカウントをお持ちですか?
sign_in_now=サインインはこちらへ!
disable_register_prompt=登録は無効になっています。 サイト管理者にお問い合わせください。
disable_register_mail=登録でのメール確認は無効になっています。
manual_activation_only=アクティベーションを完了するにはサイト管理者に連絡してください。
remember_me=このデバイスで自動サインイン
remember_me.compromised=ログイントークンはもう有効ではなく、アカウントが侵害されたことを示している可能性があります。 異常なアクティビティがないかアカウントを確認してください。
forgot_password_title=パスワードを忘れた
forgot_password=パスワードをお忘れですか?
need_account=アカウントが必要ですか?
sign_up_now=登録はこちら。
sign_up_successful=アカウントは無事に作成されました。ようこそ!
confirmation_mail_sent_prompt_ex=新しい確認メールを <b>%s</b> に送信しました。 %s以内にメールボックスを確認し、登録手続きを完了してください。 登録メールアドレスが間違っている場合は、もういちどサインインすると変更することができます。
must_change_password=パスワードの更新
Expand Down Expand Up @@ -454,6 +459,8 @@ sspi_auth_failed=SSPI認証に失敗しました
password_pwned=あなたが選択したパスワードは、過去の情報漏洩事件で流出した<a target="_blank" rel="noopener noreferrer" href="https://haveibeenpwned.com/Passwords">盗まれたパスワードのリスト</a>に含まれています。 別のパスワードでもう一度試してください。 また他の登録でもこのパスワードからの変更を検討してください。
password_pwned_err=HaveIBeenPwnedへのリクエストを完了できませんでした
last_admin=最後の管理者は削除できません。少なくとも一人の管理者が必要です。
signin_passkey=パスキーでサインイン
back_to_sign_in=サインインに戻る

[mail]
view_it_on=%s で見る
Expand Down Expand Up @@ -2272,6 +2279,7 @@ settings.event_wiki_desc=Wikiページが作成・名前変更・編集・削除
settings.event_release=リリース
settings.event_release_desc=リポジトリでリリースが作成・更新・削除されたとき。
settings.event_push=プッシュ
settings.event_force_push=強制プッシュ
settings.event_push_desc=Gitがリポジトリにプッシュを行ったとき。
settings.event_repository=リポジトリ
settings.event_repository_desc=リポジトリが作成・削除されたとき。
Expand Down Expand Up @@ -2365,10 +2373,28 @@ settings.protect_this_branch=ブランチの保護を有効にする
settings.protect_this_branch_desc=ブランチの削除を防ぎ、ブランチへのプッシュやマージを制限します。
settings.protect_disable_push=プッシュ無効
settings.protect_disable_push_desc=このブランチへのプッシュは許可されません。
settings.protect_disable_force_push=強制プッシュ無効
settings.protect_disable_force_push_desc=このブランチへの強制プッシュは許可されません。
settings.protect_enable_push=プッシュ有効
settings.protect_enable_push_desc=誰でも書き込み権限があれば、このブランチへのプッシュが許可されます。(強制プッシュ以外)
settings.protect_enable_push_desc=書き込み権限を持つ人は誰でも、このブランチにプッシュを行うことができます。(ただし強制プッシュは不可)
settings.protect_enable_force_push_all=強制プッシュ有効
settings.protect_enable_force_push_all_desc=プッシュ権限を持つ人は誰でも、このブランチに強制プッシュを行うことができます。
settings.protect_enable_force_push_allowlist=許可リストで強制プッシュを制限
settings.protect_enable_force_push_allowlist_desc=許可リストに登録された、プッシュ権限を持つユーザーまたはチームのみが、このブランチに強制プッシュを行うことができます。
settings.protect_enable_merge=マージ有効
settings.protect_enable_merge_desc=誰でも書き込み権限があれば、このブランチへのプルリクエストのマージが許可されます。
settings.protect_enable_merge_desc=書き込み権限を持つ人は誰でも、このブランチにプルリクエストをマージすることができます。
settings.protect_whitelist_committers=許可リストでプッシュを制限
settings.protect_whitelist_committers_desc=許可リストに登録されたユーザーまたはチームのみが、このブランチにプッシュを行うことができます。(ただし強制プッシュは不可)
settings.protect_whitelist_deploy_keys=プッシュ可能な書き込み権限を持つデプロイキーを許可リストに含める。
settings.protect_whitelist_users=プッシュ許可リストに含むユーザー:
settings.protect_whitelist_teams=プッシュ許可リストに含むチーム:
settings.protect_force_push_allowlist_users=強制プッシュ許可リストに含むユーザー:
settings.protect_force_push_allowlist_teams=強制プッシュ許可リストに含むチーム:
settings.protect_force_push_allowlist_deploy_keys=強制プッシュ可能なプッシュ権限を持つデプロイキーを許可リストに含める。
settings.protect_merge_whitelist_committers=マージ許可リストを有効にする
settings.protect_merge_whitelist_committers_desc=許可リストに登録したユーザーまたはチームにのみ、このブランチへのプルリクエストのマージを許可します。
settings.protect_merge_whitelist_users=マージ許可リストに含むユーザー:
settings.protect_merge_whitelist_teams=マージ許可リストに含むチーム:
settings.protect_check_status_contexts=ステータスチェックを有効にする
settings.protect_status_check_patterns=ステータスチェック パターン:
settings.protect_status_check_patterns_desc=このルールの対象ブランチがマージ可能になる前に、どのステータスチェックがパスしなければならないかを、パターンで入力します。 各行にパターンを指定します。 この設定は空にできません。
Expand All @@ -2379,6 +2405,10 @@ settings.protect_invalid_status_check_pattern=`不正なステータスチェッ
settings.protect_no_valid_status_check_patterns=有効なステータスチェックパターンがありません。
settings.protect_required_approvals=必要な承認数:
settings.protect_required_approvals_desc=肯定的なレビューの数を満たしたプルリクエストしかマージできないようにします。
settings.protect_approvals_whitelist_enabled=許可リストに登録したユーザーやチームに承認を制限
settings.protect_approvals_whitelist_enabled_desc=許可リストに登録したユーザーまたはチームによるレビューのみを、必要な承認数にカウントします。 承認の許可リストが無い場合は、書き込み権限を持つ人によるレビューを必要な承認数にカウントします。
settings.protect_approvals_whitelist_users=許可リストに含めるレビューア:
settings.protect_approvals_whitelist_teams=レビュー許可リストに含めるチーム:
settings.dismiss_stale_approvals=古くなった承認を取り消す
settings.dismiss_stale_approvals_desc=プルリクエストの内容を変える新たなコミットがブランチにプッシュされた場合、以前の承認を取り消します。
settings.ignore_stale_approvals=古くなった承認を無視する
Expand Down Expand Up @@ -3208,6 +3238,10 @@ config.cache_adapter=キャッシュ アダプター
config.cache_interval=キャッシュ間隔
config.cache_conn=キャッシュ接続
config.cache_item_ttl=キャッシュアイテムのTTL
config.cache_test=キャッシュのテスト
config.cache_test_failed=キャッシュの調査に失敗しました: %v.
config.cache_test_slow=キャッシュのテストは成功しましたが、応答が遅いです: %s
config.cache_test_succeeded=キャッシュのテストは成功し、応答時間は %s でした。

config.session_config=セッション設定
config.session_provider=セッション プロバイダー
Expand Down
Loading

0 comments on commit 08cebd7

Please sign in to comment.