diff --git a/models/user/user.go b/models/user/user.go
index d5c4833cde..c1cb988e43 100644
--- a/models/user/user.go
+++ b/models/user/user.go
@@ -565,42 +565,43 @@ var (
".",
"..",
".well-known",
- "admin",
- "api",
- "assets",
- "attachments",
- "avatar",
- "avatars",
- "captcha",
- "commits",
- "debug",
- "error",
- "explore",
- "favicon.ico",
- "ghost",
- "issues",
- "login",
- "manifest.json",
- "metrics",
- "milestones",
- "new",
- "notifications",
- "org",
- "pulls",
- "raw",
- "repo",
+
+ "api", // gitea api
+ "metrics", // prometheus metrics api
+ "v2", // container registry api
+
+ "assets", // static asset files
+ "attachments", // issue attachments
+
+ "avatar", // avatar by email hash
+ "avatars", // user avatars by file name
"repo-avatars",
- "robots.txt",
- "search",
- "serviceworker.js",
- "ssh_info",
+
+ "captcha",
+ "login", // oauth2 login
+ "org", // org create/manage, or "/org/{org}", BUT if an org is named as "invite" then it goes wrong
+ "repo", // repo create/migrate, etc
+ "user", // user login/activate/settings, etc
+
+ "explore",
+ "issues",
+ "pulls",
+ "milestones",
+ "notifications",
+
+ "favicon.ico",
+ "manifest.json", // web app manifests
+ "robots.txt", // search engine robots
+ "sitemap.xml", // search engine sitemap
+ "ssh_info", // agit info
"swagger.v1.json",
- "user",
- "v2",
- "gitea-actions",
+
+ "ghost", // reserved name for deleted users (id: -1)
+ "gitea-actions", // gitea builtin user (id: -2)
}
- // DON'T ADD ANY NEW STUFF, WE SOLVE THIS WITH `/user/{obj}` PATHS!
+ // These names are reserved for user accounts: user's keys, user's rss feed, user's avatar, etc.
+ // DO NOT add any new stuff! The paths with these names are processed by `/{username}` handler (UsernameSubRoute) manually.
reservedUserPatterns = []string{"*.keys", "*.gpg", "*.rss", "*.atom", "*.png"}
)
diff --git a/options/locale/locale_ga-IE.ini b/options/locale/locale_ga-IE.ini
index 5ccbc4315f..0fae28daea 100644
--- a/options/locale/locale_ga-IE.ini
+++ b/options/locale/locale_ga-IE.ini
@@ -3377,8 +3377,47 @@ notices.desc=Cur síos
notices.op=Oibríocht.
notices.delete_success=Scriosadh na fógraí córais.
+self_check.no_problem_found=Níor aimsíodh aon fhadhb fós.
+self_check.startup_warnings=Rabhadh tosaithe:
+self_check.database_collation_mismatch=Bí ag súil le comhthiomsú a úsáid sa bhunachar sonraí: %s
+self_check.database_collation_case_insensitive=Tá bunachar sonraí ag baint úsáide as comparáid %s, arb é comhdhlúthú neamhíogair. Cé go bhféadfadh Gitea oibriú leis, d'fhéadfadh go mbeadh roinnt cásanna annamh ann nach n-oibríonn mar a bhíothas ag súil leis.
+self_check.database_inconsistent_collation_columns=Tá comhthiomsú %s in úsáid ag an mbunachar sonraí, ach tá comhthiomsuithe mímheaitseála á n-úsáid ag na colúin seo. D'fhéadfadh sé a bheith ina chúis le roinnt fadhbanna gan choinne.
+self_check.database_fix_mysql=D'úsáideoirí MySQL/MariaDB, d'fhéadfá an t-ordú "gitea doctor convert" a úsáid chun na fadhbanna comhthiomsaithe a réiteach, nó d'fhéadfá an fhadhb a réiteach trí "ALTER ... COLLATE ..." SQLs de láimh freisin.
+self_check.database_fix_mssql=I gcás úsáideoirí MSSQL, ní fhéadfá an fhadhb a réiteach ach trí "ALTER ... COLLATE ..." SQLs de láimh faoi láthair.
+self_check.location_origin_mismatch=Ní mheaitseálann an URL reatha (%[1]s) an URL atá le feiceáil ag Gitea (%[2]s). Má tá seachfhreastalaí droim ar ais á úsáid agat, cinntigh le do thoil go bhfuil na ceanntásca "Óstríomhaire" agus "X-Forwarded-Proto" socraithe i gceart.
[action]
+create_repo=stóras cruthaithe %s
+rename_repo=stóras athainmnithe ó %[1]s
go %[3]s
+commit_repo=brú chuig %[3]s ag %[4]s
+create_issue=`osclaíodh ceist %[3]s#%[2]s`
+close_issue=`eagrán dúnta %[3]s#%[2]s`
+reopen_issue=`athoscailt an cheist %[3]s#%[2]s`
+create_pull_request=`iarratas tarraingthe cruthaithe %[3]s#%[2]s`
+close_pull_request=`iarratas tarraingthe dúnta %[3]s#%[2]s`
+reopen_pull_request=`iarratas tarraingthe athoscailte %[3]s#%[2]s`
+comment_issue=`trácht ar cheist %[3]s#%[2]s`
+comment_pull=`déan trácht ar iarratas tarraingthe %[3]s#%[2]s`
+merge_pull_request=`iarratas tarraingthe cumaisc %[3]s#%[2]s`
+auto_merge_pull_request=`iarratas tarraingthe cumasctha go huathoibríoch %[3]s#%[2]s`
+transfer_repo=aistrithe stóras %s
go %s
+push_tag=brú %[3]s go %[4]s
+delete_tag=scriosta clib %[2]s ó %[3]s
+delete_branch=brainse scriosta %[2]s ó %[3]s
+compare_branch=Déan comparáid
+compare_commits=Déan comparáid idir tiomáintí %d
+compare_commits_general=Déan comparáid idir tiomáintí
+mirror_sync_push=geallann synced do %[3]s ag %[4]s ón scáthán
+mirror_sync_create=sioncronaigh tagairt nua %[3]s do %[4]s ón scáthán
+mirror_sync_delete=sioncronaithe agus scriosta an tagairt %[2]s
ag %[3]s ón scáthán
+approve_pull_request=`ceadaithe %[3]s#%[2]s`
+reject_pull_request=`athruithe molta le haghaidh %[3]s#%[2]s`
+publish_release=`scaoileadh %[4]s ag %[3]s`
+review_dismissed=`léirmheas ó %[4]s le haghaidh %[3]s#%[2]s`
+review_dismissed_reason=Cúis:
+create_branch=brainse cruthaithe %[3]s i %[4]s
+starred_repo=le %[2]s le réalta
+watched_repo=thosaigh sé ag breathnú ar %[2]s
[tool]
now=anois
@@ -3392,60 +3431,266 @@ future=todhchaí
1y=1 bhliain
seconds=%d soicind
minutes=%d nóiméad
+hours=%d uair an chloig
+days=%d laethanta
+weeks=%d seachtain
+months=%d míonna
+years=%d bliain
+raw_seconds=soicind
+raw_minutes=nóiméad
[dropzone]
+default_message=Scaoil comhaid nó cliceáil anseo chun iad a uaslódáil.
+invalid_input_type=Ní féidir leat comhaid den chineál seo a uaslódáil.
+file_too_big=Sáraíonn méid comhaid ({{filesize}} MB) an t-uasmhéid de ({{maxFilesize}} MB).
+remove_file=Bain an comhad
[notification]
notifications=Fógraí
unread=Gan léamh
read=Léigh
+no_unread=Gan aon fhógraí neamh-léite.
+no_read=Gan aon fhógraí léite.
+pin=Fógra bioráin
+mark_as_read=Marcáil mar léite
+mark_as_unread=Marcáil mar neamh-léite
+mark_all_as_read=Marcáil gach ceann mar léite
subscriptions=Síntiúis
watching=Ag féachaint
no_subscriptions=Gan síntiúis
[gpg]
+default_key=Sínithe leis an eochair réamhshocraithe
+error.extract_sign=Theip ar an síniú a bhaint
+error.generate_hash=Theip ar hash gealltanas a ghiniúint
+error.no_committer_account=Níl aon chuntas nasctha le seoladh ríomhphoist an tiomnóra
+error.no_gpg_keys_found=Níor aimsíodh aon eochair aithne don síniú seo sa bhunachar
+error.not_signed_commit=Ní tiomantas sínithe
+error.failed_retrieval_gpg_keys=Theip ar aisghabháil eochair ar bith a bhí ceangailte le cuntas an tiomnóra
+error.probable_bad_signature=RABHADH! Cé go bhfuil eochair leis an ID seo sa bhunachar sonraí ní fhíoraíonn sé an tiomantas seo! Tá an tiomantas seo AMHRASACH.
+error.probable_bad_default_signature=RABHADH! Cé go bhfuil an t-aitheantas seo ag an eochair réamhshocraithe ní fíoraíonn sé an tiomantas seo! Tá an tiomantas seo AMHRASACH.
[units]
unit=Aonad
+error.no_unit_allowed_repo=Níl cead agat rochtain a fháil ar aon chuid den tiomantas seo.
+error.unit_not_allowed=Níl cead agat an rannán stóras seo a rochtain.
[packages]
title=Pacáistí
+desc=Bainistigh pacáistí stórais.
+empty=Níl aon phacáistí ann fós.
+no_metadata=Gan aon mheiteashonraí.
+empty.documentation=Le haghaidh tuilleadh eolais ar chlárlann na bpacáistí, féach ar na doiciméid.
+empty.repo=An ndearna tú uaslódáil ar phacáiste, ach nach bhfuil sé léirithe anseo? Téigh go socruithe pacáiste agus nasc leis an stóras seo é.
+registry.documentation=Le haghaidh tuilleadh eolais ar chlárlann %s, féach ar na doiciméid.
filter.type=Cineál
filter.type.all=Gach
+filter.no_result=Níor thug do scagaire aon torthaí.
filter.container.tagged=Clibeáilte
filter.container.untagged=Gan chlib
+published_by=Foilsithe %[1]s ag %[3]s
+published_by_in=Foilsithe ag %[1]s ag %[3]s in %[5]s
+installation=Suiteáil
+about=Maidir leis an bpacáiste seo
+requirements=Riachtanais
+dependencies=Spleithiúlachtaí
+keywords=Eochairfhocail
details=Sonraí
details.author=Údar
+details.project_site=Suíomh an Tionscadail
+details.repository_site=Suíomh Stóras
+details.documentation_site=Suíomh Doiciméadaithe
+details.license=Ceadúnas
+assets=Sócmhainní
+versions=Leaganacha
+versions.view_all=Féach ar gach
+dependency.id=ID
dependency.version=Leagan
+alpine.registry=Socraigh an chlár seo tríd an url a chur i do chomhad /etc/apk/repositories
:
+alpine.registry.key=Íoslódáil eochair RSA poiblí na clárlainne isteach san fhillteán /etc/apk/keys/
chun an síniú innéacs a fhíorú:
+alpine.registry.info=Roghnaigh $branch agus $repository ón liosta thíos.
+alpine.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
+alpine.repository=Eolas Stórais
alpine.repository.branches=Brainsí
alpine.repository.repositories=Stórais
+alpine.repository.architectures=Ailtireachtaí
+cargo.registry=Socraigh an clárlann seo sa chomhad cumraíochta lasta (mar shampla ~/.cargo/config.toml
):
+cargo.install=Chun an pacáiste a shuiteáil ag baint úsáide as Cargo, reáchtáil an t-ordú seo a leanas:
+chef.registry=Socraigh an clárlann seo i do chomhad ~/.chef/config.rb
:
+chef.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
+composer.registry=Socraigh an chlár seo i do chomhad ~/.composer/config.json
:
+composer.install=Chun an pacáiste a shuiteáil ag baint úsáide as Cumadóir, reáchtáil an t-ordú seo a leanas:
+composer.dependencies=Spleithiúlachtaí
+composer.dependencies.development=Spleithiúlachtaí Forbartha
conan.details.repository=Stóras
+conan.registry=Socraigh an clárlann seo ón líne ordaithe:
+conan.install=Chun an pacáiste a shuiteáil ag úsáid Conan, reáchtáil an t-ordú seo a leanas:
+conda.registry=Socraigh an chlár seo mar stóras Conda i do chomhad .condarc
:
+conda.install=Chun an pacáiste a shuiteáil ag úsáid Conda, reáchtáil an t-ordú seo a leanas:
container.details.type=Cineál Íomhá
container.details.platform=Ardán
+container.pull=Tarraing an íomhá ón líne ordaithe:
+container.digest=Díleáigh:
container.multi_arch=Córas Oibriúcháin / Ailtireacht
+container.layers=Sraitheanna Íomhá
container.labels=Lipéid
container.labels.key=Eochair
container.labels.value=Luach
+cran.registry=Cumraigh an chlárlann seo i do chomhad Rprofile.site
:
+cran.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
+debian.registry=Socraigh an clárlann seo ón líne ordaithe:
+debian.registry.info=Roghnaigh $distribution agus $component ón liosta thíos.
+debian.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
debian.repository=Eolas Stóras
+debian.repository.distributions=Dáiltí
debian.repository.components=Comhpháirteanna
debian.repository.architectures=Ailtireachtaí
+generic.download=Íoslódáil pacáiste ón líne ordaithe:
+go.install=Suiteáil an pacáiste ón líne ordaithe:
+helm.registry=Socraigh an clárlann seo ón líne ordaithe:
+helm.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
+maven.registry=Socraigh an clárlann seo i do chomhad pom.xml
tionscadail:
+maven.install=Chun an pacáiste a úsáid cuir na nithe seo a leanas sa bhloc spleáchais
sa chomhad pom.xml
:
+maven.install2=Rith tríd an líne ordaithe:
+maven.download=Chun an spleáchas a íoslódáil, rith tríd an líne ordaithe:
+nuget.registry=Socraigh an clárlann seo ón líne ordaithe:
+nuget.install=Chun an pacáiste a shuiteáil ag úsáid NuGet, reáchtáil an t-ordú seo a leanas:
+nuget.dependency.framework=Spriocchreat
+npm.registry=Socraigh an chlárlann seo i do chomhad .npmrc
do thionscadail:
+npm.install=Chun an pacáiste a shuiteáil ag úsáid npm, reáchtáil an t-ordú seo a leanas:
+npm.install2=nó cuir leis an gcomhad package.json é:
+npm.dependencies=Spleithiúlachtaí
+npm.dependencies.development=Spleithiúlachtaí Forbartha
+npm.dependencies.bundle=Spleáchais Chuachta
+npm.dependencies.peer=Spleithiúlachtaí Piaraí
+npm.dependencies.optional=Spleáchais Roghnacha
npm.details.tag=Clib
+pub.install=Chun an pacáiste a shuiteáil ag úsáid Dart, reáchtáil an t-ordú seo a leanas:
+pypi.requires=Teastaíonn Python
+pypi.install=Chun an pacáiste a shuiteáil ag úsáid pip, reáchtáil an t-ordú seo a leanas:
+rpm.registry=Socraigh an clárlann seo ón líne ordaithe:
+rpm.distros.redhat=ar dháileadh bunaithe ar RedHat
+rpm.distros.suse=ar dháileadh bunaithe ar SUSE
+rpm.install=Chun an pacáiste a shuiteáil, rith an t-ordú seo a leanas:
+rpm.repository=Eolas Stóras
+rpm.repository.architectures=Ailtireachtaí
+rpm.repository.multiple_groups=Tá an pacáiste seo ar fáil i ngrúpaí éagsúla.
+rubygems.install=Chun an pacáiste a shuiteáil ag baint úsáide as gem, reáchtáil an t-ordú seo a leanas:
+rubygems.install2=nó cuir leis an Gemfile é:
+rubygems.dependencies.runtime=Spleáchais Rith-Ama
+rubygems.dependencies.development=Spleáchais Forbartha
+rubygems.required.ruby=Éilíonn leagan Ruby
+rubygems.required.rubygems=Éilíonn leagan RubyGem
+swift.registry=Socraigh an clárlann seo ón líne ordaithe:
+swift.install=Cuir an pacáiste i do chomhad Package.swift
:
+swift.install2=agus reáchtáil an t-ordú seo a leanas:
+vagrant.install=Chun bosca Vagrant a chur leis, reáchtáil an t-ordú seo a leanas:
+settings.link=Nasc an pacáiste seo le stóras
+settings.link.description=Má nascann tú pacáiste le stóras, liostaítear an pacáiste i liosta pacáistí an stórais.
+settings.link.select=Roghnaigh Stóras
+settings.link.button=Nuashonraigh Nasc Stórais
+settings.link.success=D'éirigh le nasc an stórais a nuashonrú.
+settings.link.error=Theip ar an nasc stóras a nuashonrú.
+settings.delete=Scrios pacáiste
+settings.delete.description=Tá pacáiste a scriosadh buan agus ní féidir é a chur ar ais.
+settings.delete.notice=Tá tú ar tí %s (%s) a scriosadh. Tá an oibríocht seo dochúlaithe, an bhfuil tú cinnte?
+settings.delete.success=Tá an pacáiste scriosta.
+settings.delete.error=Theip ar an pacáiste a scriosadh.
+owner.settings.cargo.title=Innéacs Clárlann Lasta
+owner.settings.cargo.initialize=Innéacs a chur i dtosach
+owner.settings.cargo.initialize.description=Tá gá le stóras innéacs speisialta Git chun an clárlann Cargo a úsáid. Tríd an rogha seo, cruthófar an stóras (nó athchruthófar é) agus cumrófar é go huathoibríoch.
+owner.settings.cargo.initialize.error=Níorbh fhéidir an t-innéacs Cargo a thúsú: %v
+owner.settings.cargo.initialize.success=Cruthaíodh an t-innéacs Cargo go rathúil.
+owner.settings.cargo.rebuild=Innéacs Atógáil
+owner.settings.cargo.rebuild.description=Is féidir atógáil a bheith úsáideach mura bhfuil an t-innéacs sioncronaithe leis na pacáistí Cargo stóráilte.
+owner.settings.cargo.rebuild.error=Níorbh fhéidir an t-innéacs Cargo a atógáil: %v
+owner.settings.cargo.rebuild.success=D'éirigh leis an innéacs Cargo a atógáil.
+owner.settings.cleanuprules.title=Bainistigh Rialacha Glanta
+owner.settings.cleanuprules.add=Cuir Riail Glantacháin leis
+owner.settings.cleanuprules.edit=Cuir Riail Glantacháin in eagar
+owner.settings.cleanuprules.none=Níl aon rialacha glanta ar fáil. Féach ar na doiciméid le do thoil.
+owner.settings.cleanuprules.preview=Réamhamharc Riail Glantacháin
+owner.settings.cleanuprules.preview.overview=Tá pacáistí %d beartaithe a bhaint.
+owner.settings.cleanuprules.preview.none=Ní hionann riail glantacháin agus pacáistí ar bith.
owner.settings.cleanuprules.enabled=Cumasaithe
+owner.settings.cleanuprules.pattern_full_match=Cuir patrún i bhfeidhm ar ainm an phacáiste iomlán
+owner.settings.cleanuprules.keep.title=Coinnítear leaganacha a mheaitseálann leis na rialacha seo, fiú má mheaitseálann siad riail bhaint thíos.
+owner.settings.cleanuprules.keep.count=Coinnigh an ceann is déanaí
+owner.settings.cleanuprules.keep.count.1=1 leagan in aghaidh an phacáiste
+owner.settings.cleanuprules.keep.count.n=Leaganacha %d in aghaidh an phacáiste
+owner.settings.cleanuprules.keep.pattern=Coinnigh leaganacha meaitseála
+owner.settings.cleanuprules.keep.pattern.container=Coinnítear an leagan is déanaí
le haghaidh pacáistí Coimeádán i gcónaí.
+owner.settings.cleanuprules.remove.title=Baintear leaganacha a mheaitseálann leis na rialacha seo, mura deir riail thuas iad a choinneáil.
+owner.settings.cleanuprules.remove.days=Bain leaganacha níos sine ná
+owner.settings.cleanuprules.remove.pattern=Bain leaganacha meaitseála
+owner.settings.cleanuprules.success.update=Nuashonraíodh an riail ghlantacháin.
+owner.settings.cleanuprules.success.delete=Scriosadh an riail glantacháin.
+owner.settings.chef.title=Clárlann Chef
+owner.settings.chef.keypair=Gin péire eochair
+owner.settings.chef.keypair.description=Tá eochairphéire riachtanach le fíordheimhniú a dhéanamh ar chlárlann an Chef. Má tá péire eochrach ginte agat roimhe seo, má ghinfidh tú eochairphéire nua, scriosfar an seanphéire eochair.
[secrets]
+secrets=Rúin
+description=Cuirfear rúin ar aghaidh chuig gníomhartha áirithe agus ní féidir iad a léamh ar mhalairt.
+none=Níl aon rúin ann fós.
+creation=Cuir Rúnda leis
+creation.name_placeholder=carachtair alfanumair nó íoslaghda amháin nach féidir a thosú le GITEA_ nó GITHUB_
+creation.value_placeholder=Ionchur ábhar ar bith. Fágfar spás bán ag tús agus ag deireadh ar lár.
+creation.success=Tá an rún "%s" curtha leis.
+creation.failed=Theip ar an rún a chur leis.
+deletion=Bain rún
+deletion.description=Is buan rún a bhaint agus ní féidir é a chealú. Lean ort?
+deletion.success=Tá an rún bainte.
+deletion.failed=Theip ar rún a bhaint.
+management=Bainistíocht Rúin
[actions]
+actions=Gníomhartha
+unit.desc=Bainistigh gníomhartha
+status.unknown=Anaithnid
+status.waiting=Ag fanacht
+status.running=Ag rith
+status.success=Rath
+status.failure=Teip
+status.cancelled=Cealaíodh
+status.skipped=Scipeáilte
+status.blocked=Blocáilte
+runners=Reathaitheoirí
+runners.runner_manage_panel=Bainistíocht reathaithe
+runners.new=Cruthaigh reathaí nua
+runners.new_notice=Conas reathaí a thosú
+runners.status=Stádas
+runners.id=ID
runners.name=Ainm
runners.owner_type=Cineál
runners.description=Cur síos
runners.labels=Lipéid
+runners.last_online=Am Ar Líne Deiridh
+runners.runner_title=Reathaí
+runners.task_list=Tascanna le déanaí ar an reathaí seo
+runners.task_list.no_tasks=Níl aon tasc ann fós.
runners.task_list.run=Rith
+runners.task_list.status=Stádas
runners.task_list.repository=Stóras
runners.task_list.commit=Tiomantas
+runners.task_list.done_at=Déanta ag
+runners.edit_runner=Cuir Reathaí in Eagar
+runners.update_runner=Nuashonrú Athruithe
+runners.update_runner_success=Nuashonraíodh an Reathaí
+runners.update_runner_failed=Theip ar an reathaí a nuashonrú
+runners.delete_runner=Scrios an reathaí seo
+runners.delete_runner_success=Scriosadh an reathaí go rathúil
+runners.delete_runner_failed=Theip ar an reathaí a scriosadh
+runners.delete_runner_header=Deimhnigh an reathaí seo a scriosadh
+runners.delete_runner_notice=Má tá tasc ar siúl ar an reathaí seo, cuirfear deireadh leis agus marcáil mar theip. Féadfaidh sé sreabhadh oibre tógála a bhriseadh.
+runners.none=Níl aon reathaí ar fáil
+runners.status.unspecified=Anaithnid
+runners.status.idle=Díomhaoin
runners.status.active=Gníomhach
+runners.status.offline=As líne
runners.version=Leagan
runners.reset_registration_token=Athshocraigh comhartha clár
runners.reset_registration_token_success=D'éirigh le hathshocrú comhartha clárúcháin an dara háit
@@ -3455,11 +3700,54 @@ runs.commit=Tiomantas
runs.scheduled=Sceidealaithe
runs.pushed_by=bhrú ag
runs.invalid_workflow_helper=Tá comhad cumraíochta sreabhadh oibre nebhailí. Seiceáil do chomhad cumraithe le do thoil: %s
+runs.no_matching_online_runner_helper=Gan aon reathaí ar líne a mheaitseáil le lipéad: %s
+runs.no_job_without_needs=Caithfidh post amháin ar a laghad a bheith sa sreabhadh oibre gan spleáchas.
+runs.no_job=Caithfidh post amháin ar a laghad a bheith sa sreabhadh oibre
+runs.actor=Aisteoir
+runs.status=Stádas
+runs.actors_no_select=Gach aisteoir
+runs.status_no_select=Gach stádas
+runs.no_results=Níor mheaitseáil aon torthaí.
+runs.no_workflows=Níl aon sreafaí oibre ann fós.
+runs.no_workflows.quick_start=Níl a fhios agam conas tosú le Gitea Actions? Féach an treoirleabhar mear tosaithe.
+runs.no_workflows.documentation=Le haghaidh tuilleadh eolais ar Gitea Actions, féach ar na doiciméid.
+runs.no_runs=Níl aon rith ag an sreabhadh oibre fós.
+runs.empty_commit_message=(teachtaireacht tiomantas folamh)
+runs.expire_log_message=Glanadh logaí toisc go raibh siad ró-sean.
+workflow.disable=Díchumasaigh sreabhadh oibre
+workflow.disable_success=D'éirigh le sreabhadh oibre '%s' a dhíchumasú.
+workflow.enable=Cumasaigh sreabhadh oibre
+workflow.enable_success=Cumasaíodh sreabhadh oibre '%s' go rathúil.
+workflow.disabled=Tá sreabhadh oibre díchumasaithe
+workflow.run=Rith Sreabhadh Oibre
+workflow.not_found=Níor aimsíodh sreabhadh oibre '%s'.
+workflow.run_success=Ritheann sreabhadh oibre '%s' go rathúil.
+workflow.from_ref=Úsáid sreabhadh oibre ó
+workflow.has_workflow_dispatch=Tá comhoibriú ag an gcur i bhfeidhm seo le himeacht workflow_dispatch.
+need_approval_desc=Teastaíonn faomhadh chun sreafaí oibre a rith le haghaidh iarratas tarraingt forc.
+variables=Athróga
+variables.management=Bainistíocht Athróg
+variables.creation=Cuir Athróg leis
+variables.none=Níl aon athróga ann fós.
+variables.deletion=Bain athróg
+variables.deletion.description=Tá athróg a bhaint buan agus ní féidir é a chur ar ais. Lean ar aghaidh?
+variables.description=Cuirfear athróga chuig gníomhartha áirithe agus ní féidir iad a léamh ar mhalairt eile.
+variables.id_not_exist=Níl athróg le ID %d ann.
+variables.edit=Cuir Athróg in Eagar
+variables.deletion.failed=Theip ar athróg a bhaint.
+variables.deletion.success=Tá an athróg bainte.
+variables.creation.failed=Theip ar athróg a chur leis.
+variables.creation.success=Tá an athróg "%s" curtha leis.
+variables.update.failed=Theip ar athróg a chur in eagar.
+variables.update.success=Tá an t-athróg curtha in eagar.
[projects]
+deleted.display_name=Tionscadal scriosta
+type-1.display_name=Tionscadal Aonair
+type-2.display_name=Tionscadal Stórais
type-3.display_name=Tionscadal Eagrúcháin
[git.filemode]
diff --git a/routers/api/v1/admin/hooks.go b/routers/api/v1/admin/hooks.go
index fa60836b7e..db481fbf59 100644
--- a/routers/api/v1/admin/hooks.go
+++ b/routers/api/v1/admin/hooks.go
@@ -45,7 +45,7 @@ func ListHooks(ctx *context.APIContext) {
}
hooks := make([]*api.Hook, len(sysHooks))
for i, hook := range sysHooks {
- h, err := webhook_service.ToHook(setting.AppURL+"/admin", hook)
+ h, err := webhook_service.ToHook(setting.AppURL+"/-/admin", hook)
if err != nil {
ctx.Error(http.StatusInternalServerError, "convert.ToHook", err)
return
@@ -83,7 +83,7 @@ func GetHook(ctx *context.APIContext) {
}
return
}
- h, err := webhook_service.ToHook("/admin/", hook)
+ h, err := webhook_service.ToHook("/-/admin/", hook)
if err != nil {
ctx.Error(http.StatusInternalServerError, "convert.ToHook", err)
return
diff --git a/routers/api/v1/utils/hook.go b/routers/api/v1/utils/hook.go
index f1abd49a7d..4328878e19 100644
--- a/routers/api/v1/utils/hook.go
+++ b/routers/api/v1/utils/hook.go
@@ -100,7 +100,7 @@ func checkCreateHookOption(ctx *context.APIContext, form *api.CreateHookOption)
func AddSystemHook(ctx *context.APIContext, form *api.CreateHookOption) {
hook, ok := addHook(ctx, form, 0, 0)
if ok {
- h, err := webhook_service.ToHook(setting.AppSubURL+"/admin", hook)
+ h, err := webhook_service.ToHook(setting.AppSubURL+"/-/admin", hook)
if err != nil {
ctx.Error(http.StatusInternalServerError, "convert.ToHook", err)
return
@@ -268,7 +268,7 @@ func EditSystemHook(ctx *context.APIContext, form *api.EditHookOption, hookID in
ctx.Error(http.StatusInternalServerError, "GetSystemOrDefaultWebhook", err)
return
}
- h, err := webhook_service.ToHook(setting.AppURL+"/admin", updated)
+ h, err := webhook_service.ToHook(setting.AppURL+"/-/admin", updated)
if err != nil {
ctx.Error(http.StatusInternalServerError, "convert.ToHook", err)
return
diff --git a/routers/web/admin/admin.go b/routers/web/admin/admin.go
index 6fc97c949e..37c54b5362 100644
--- a/routers/web/admin/admin.go
+++ b/routers/web/admin/admin.go
@@ -185,9 +185,9 @@ func DashboardPost(ctx *context.Context) {
}
}
if form.From == "monitor" {
- ctx.Redirect(setting.AppSubURL + "/admin/monitor/cron")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/monitor/cron")
} else {
- ctx.Redirect(setting.AppSubURL + "/admin")
+ ctx.Redirect(setting.AppSubURL + "/-/admin")
}
}
diff --git a/routers/web/admin/applications.go b/routers/web/admin/applications.go
index 8583398074..9b48f21eca 100644
--- a/routers/web/admin/applications.go
+++ b/routers/web/admin/applications.go
@@ -23,8 +23,8 @@ var (
func newOAuth2CommonHandlers() *user_setting.OAuth2CommonHandlers {
return &user_setting.OAuth2CommonHandlers{
OwnerID: 0,
- BasePathList: fmt.Sprintf("%s/admin/applications", setting.AppSubURL),
- BasePathEditPrefix: fmt.Sprintf("%s/admin/applications/oauth2", setting.AppSubURL),
+ BasePathList: fmt.Sprintf("%s/-/admin/applications", setting.AppSubURL),
+ BasePathEditPrefix: fmt.Sprintf("%s/-/admin/applications/oauth2", setting.AppSubURL),
TplAppEdit: tplSettingsOauth2ApplicationEdit,
}
}
diff --git a/routers/web/admin/auths.go b/routers/web/admin/auths.go
index 3b89be0f8f..60e2b7c86f 100644
--- a/routers/web/admin/auths.go
+++ b/routers/web/admin/auths.go
@@ -324,7 +324,7 @@ func NewAuthSourcePost(ctx *context.Context) {
log.Trace("Authentication created by admin(%s): %s", ctx.Doer.Name, form.Name)
ctx.Flash.Success(ctx.Tr("admin.auths.new_success", form.Name))
- ctx.Redirect(setting.AppSubURL + "/admin/auths")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/auths")
}
// EditAuthSource render editing auth source page
@@ -437,7 +437,7 @@ func EditAuthSourcePost(ctx *context.Context) {
log.Trace("Authentication changed by admin(%s): %d", ctx.Doer.Name, source.ID)
ctx.Flash.Success(ctx.Tr("admin.auths.update_success"))
- ctx.Redirect(setting.AppSubURL + "/admin/auths/" + strconv.FormatInt(form.ID, 10))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/auths/" + strconv.FormatInt(form.ID, 10))
}
// DeleteAuthSource response for deleting an auth source
@@ -454,11 +454,11 @@ func DeleteAuthSource(ctx *context.Context) {
} else {
ctx.Flash.Error(fmt.Sprintf("auth_service.DeleteSource: %v", err))
}
- ctx.JSONRedirect(setting.AppSubURL + "/admin/auths/" + url.PathEscape(ctx.PathParam(":authid")))
+ ctx.JSONRedirect(setting.AppSubURL + "/-/admin/auths/" + url.PathEscape(ctx.PathParam(":authid")))
return
}
log.Trace("Authentication deleted by admin(%s): %d", ctx.Doer.Name, source.ID)
ctx.Flash.Success(ctx.Tr("admin.auths.deletion_success"))
- ctx.JSONRedirect(setting.AppSubURL + "/admin/auths")
+ ctx.JSONRedirect(setting.AppSubURL + "/-/admin/auths")
}
diff --git a/routers/web/admin/config.go b/routers/web/admin/config.go
index 2ae93e9cac..d067250a5b 100644
--- a/routers/web/admin/config.go
+++ b/routers/web/admin/config.go
@@ -40,7 +40,7 @@ func SendTestMail(ctx *context.Context) {
ctx.Flash.Info(ctx.Tr("admin.config.test_mail_sent", email))
}
- ctx.Redirect(setting.AppSubURL + "/admin/config")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/config")
}
// TestCache test the cache settings
@@ -56,7 +56,7 @@ func TestCache(ctx *context.Context) {
}
}
- ctx.Redirect(setting.AppSubURL + "/admin/config")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/config")
}
func shadowPasswordKV(cfgItem, splitter string) string {
diff --git a/routers/web/admin/emails.go b/routers/web/admin/emails.go
index f0d8555070..49338fbd7c 100644
--- a/routers/web/admin/emails.go
+++ b/routers/web/admin/emails.go
@@ -134,7 +134,7 @@ func ActivateEmail(ctx *context.Context) {
ctx.Flash.Info(ctx.Tr("admin.emails.updated"))
}
- redirect, _ := url.Parse(setting.AppSubURL + "/admin/emails")
+ redirect, _ := url.Parse(setting.AppSubURL + "/-/admin/emails")
q := url.Values{}
if val := ctx.FormTrim("q"); len(val) > 0 {
q.Set("q", val)
diff --git a/routers/web/admin/hooks.go b/routers/web/admin/hooks.go
index e40580b6e7..91ca6e3fa7 100644
--- a/routers/web/admin/hooks.go
+++ b/routers/web/admin/hooks.go
@@ -36,8 +36,8 @@ func DefaultOrSystemWebhooks(ctx *context.Context) {
sys["Title"] = ctx.Tr("admin.systemhooks")
sys["Description"] = ctx.Tr("admin.systemhooks.desc", "https://docs.gitea.com/usage/webhooks")
sys["Webhooks"], err = webhook.GetSystemWebhooks(ctx, optional.None[bool]())
- sys["BaseLink"] = setting.AppSubURL + "/admin/hooks"
- sys["BaseLinkNew"] = setting.AppSubURL + "/admin/system-hooks"
+ sys["BaseLink"] = setting.AppSubURL + "/-/admin/hooks"
+ sys["BaseLinkNew"] = setting.AppSubURL + "/-/admin/system-hooks"
if err != nil {
ctx.ServerError("GetWebhooksAdmin", err)
return
@@ -46,8 +46,8 @@ func DefaultOrSystemWebhooks(ctx *context.Context) {
def["Title"] = ctx.Tr("admin.defaulthooks")
def["Description"] = ctx.Tr("admin.defaulthooks.desc", "https://docs.gitea.com/usage/webhooks")
def["Webhooks"], err = webhook.GetDefaultWebhooks(ctx)
- def["BaseLink"] = setting.AppSubURL + "/admin/hooks"
- def["BaseLinkNew"] = setting.AppSubURL + "/admin/default-hooks"
+ def["BaseLink"] = setting.AppSubURL + "/-/admin/hooks"
+ def["BaseLinkNew"] = setting.AppSubURL + "/-/admin/default-hooks"
if err != nil {
ctx.ServerError("GetWebhooksAdmin", err)
return
@@ -67,5 +67,5 @@ func DeleteDefaultOrSystemWebhook(ctx *context.Context) {
ctx.Flash.Success(ctx.Tr("repo.settings.webhook_deletion_success"))
}
- ctx.JSONRedirect(setting.AppSubURL + "/admin/hooks")
+ ctx.JSONRedirect(setting.AppSubURL + "/-/admin/hooks")
}
diff --git a/routers/web/admin/notice.go b/routers/web/admin/notice.go
index 36303cbc06..5f7432e629 100644
--- a/routers/web/admin/notice.go
+++ b/routers/web/admin/notice.go
@@ -74,5 +74,5 @@ func EmptyNotices(ctx *context.Context) {
log.Trace("System notices deleted by admin (%s): [start: %d]", ctx.Doer.Name, 0)
ctx.Flash.Success(ctx.Tr("admin.notices.delete_success"))
- ctx.Redirect(setting.AppSubURL + "/admin/notices")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/notices")
}
diff --git a/routers/web/admin/packages.go b/routers/web/admin/packages.go
index 39f064a1be..2b9edc622d 100644
--- a/routers/web/admin/packages.go
+++ b/routers/web/admin/packages.go
@@ -99,7 +99,7 @@ func DeletePackageVersion(ctx *context.Context) {
}
ctx.Flash.Success(ctx.Tr("packages.settings.delete.success"))
- ctx.JSONRedirect(setting.AppSubURL + "/admin/packages?page=" + url.QueryEscape(ctx.FormString("page")) + "&q=" + url.QueryEscape(ctx.FormString("q")) + "&type=" + url.QueryEscape(ctx.FormString("type")))
+ ctx.JSONRedirect(setting.AppSubURL + "/-/admin/packages?page=" + url.QueryEscape(ctx.FormString("page")) + "&q=" + url.QueryEscape(ctx.FormString("q")) + "&type=" + url.QueryEscape(ctx.FormString("type")))
}
func CleanupExpiredData(ctx *context.Context) {
@@ -109,5 +109,5 @@ func CleanupExpiredData(ctx *context.Context) {
}
ctx.Flash.Success(ctx.Tr("admin.packages.cleanup.success"))
- ctx.Redirect(setting.AppSubURL + "/admin/packages")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/packages")
}
diff --git a/routers/web/admin/queue.go b/routers/web/admin/queue.go
index dce8f8077f..59b17f88e6 100644
--- a/routers/web/admin/queue.go
+++ b/routers/web/admin/queue.go
@@ -53,7 +53,7 @@ func QueueSet(ctx *context.Context) {
maxNumber, err = strconv.Atoi(maxNumberStr)
if err != nil {
ctx.Flash.Error(ctx.Tr("admin.monitor.queue.settings.maxnumberworkers.error"))
- ctx.Redirect(setting.AppSubURL + "/admin/monitor/queue/" + strconv.FormatInt(qid, 10))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/monitor/queue/" + strconv.FormatInt(qid, 10))
return
}
if maxNumber < -1 {
@@ -65,7 +65,7 @@ func QueueSet(ctx *context.Context) {
mq.SetWorkerMaxNumber(maxNumber)
ctx.Flash.Success(ctx.Tr("admin.monitor.queue.settings.changed"))
- ctx.Redirect(setting.AppSubURL + "/admin/monitor/queue/" + strconv.FormatInt(qid, 10))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/monitor/queue/" + strconv.FormatInt(qid, 10))
}
func QueueRemoveAllItems(ctx *context.Context) {
@@ -85,5 +85,5 @@ func QueueRemoveAllItems(ctx *context.Context) {
}
ctx.Flash.Success(ctx.Tr("admin.monitor.queue.settings.remove_all_items_done"))
- ctx.Redirect(setting.AppSubURL + "/admin/monitor/queue/" + strconv.FormatInt(qid, 10))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/monitor/queue/" + strconv.FormatInt(qid, 10))
}
diff --git a/routers/web/admin/repos.go b/routers/web/admin/repos.go
index e7c27145dc..75e5ee5d86 100644
--- a/routers/web/admin/repos.go
+++ b/routers/web/admin/repos.go
@@ -58,7 +58,7 @@ func DeleteRepo(ctx *context.Context) {
log.Trace("Repository deleted: %s", repo.FullName())
ctx.Flash.Success(ctx.Tr("repo.settings.deletion_success"))
- ctx.JSONRedirect(setting.AppSubURL + "/admin/repos?page=" + url.QueryEscape(ctx.FormString("page")) + "&sort=" + url.QueryEscape(ctx.FormString("sort")))
+ ctx.JSONRedirect(setting.AppSubURL + "/-/admin/repos?page=" + url.QueryEscape(ctx.FormString("page")) + "&sort=" + url.QueryEscape(ctx.FormString("sort")))
}
// UnadoptedRepos lists the unadopted repositories
@@ -114,7 +114,7 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
dirSplit := strings.SplitN(dir, "/", 2)
if len(dirSplit) != 2 {
- ctx.Redirect(setting.AppSubURL + "/admin/repos")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/repos")
return
}
@@ -122,7 +122,7 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
if err != nil {
if user_model.IsErrUserNotExist(err) {
log.Debug("User does not exist: %s", dirSplit[0])
- ctx.Redirect(setting.AppSubURL + "/admin/repos")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/repos")
return
}
ctx.ServerError("GetUserByName", err)
@@ -160,5 +160,5 @@ func AdoptOrDeleteRepository(ctx *context.Context) {
}
ctx.Flash.Success(ctx.Tr("repo.delete_preexisting_success", dir))
}
- ctx.Redirect(setting.AppSubURL + "/admin/repos/unadopted?search=true&q=" + url.QueryEscape(q) + "&page=" + url.QueryEscape(page))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/repos/unadopted?search=true&q=" + url.QueryEscape(q) + "&page=" + url.QueryEscape(page))
}
diff --git a/routers/web/admin/runners.go b/routers/web/admin/runners.go
index d73290a8db..4b89237364 100644
--- a/routers/web/admin/runners.go
+++ b/routers/web/admin/runners.go
@@ -9,5 +9,5 @@ import (
)
func RedirectToDefaultSetting(ctx *context.Context) {
- ctx.Redirect(setting.AppSubURL + "/admin/actions/runners")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/actions/runners")
}
diff --git a/routers/web/admin/stacktrace.go b/routers/web/admin/stacktrace.go
index b3b635af5b..ff751be621 100644
--- a/routers/web/admin/stacktrace.go
+++ b/routers/web/admin/stacktrace.go
@@ -42,5 +42,5 @@ func Stacktrace(ctx *context.Context) {
func StacktraceCancel(ctx *context.Context) {
pid := ctx.PathParam("pid")
process.GetManager().Cancel(process.IDType(pid))
- ctx.JSONRedirect(setting.AppSubURL + "/admin/monitor/stacktrace")
+ ctx.JSONRedirect(setting.AppSubURL + "/-/admin/monitor/stacktrace")
}
diff --git a/routers/web/admin/users.go b/routers/web/admin/users.go
index 48ff8ea04b..a6b0b5c78b 100644
--- a/routers/web/admin/users.go
+++ b/routers/web/admin/users.go
@@ -215,14 +215,14 @@ func NewUserPost(ctx *context.Context) {
}
ctx.Flash.Success(ctx.Tr("admin.users.new_success", u.Name))
- ctx.Redirect(setting.AppSubURL + "/admin/users/" + strconv.FormatInt(u.ID, 10))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + strconv.FormatInt(u.ID, 10))
}
func prepareUserInfo(ctx *context.Context) *user_model.User {
u, err := user_model.GetUserByID(ctx, ctx.PathParamInt64(":userid"))
if err != nil {
if user_model.IsErrUserNotExist(err) {
- ctx.Redirect(setting.AppSubURL + "/admin/users")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users")
} else {
ctx.ServerError("GetUserByID", err)
}
@@ -481,7 +481,7 @@ func EditUserPost(ctx *context.Context) {
}
ctx.Flash.Success(ctx.Tr("admin.users.update_profile_success"))
- ctx.Redirect(setting.AppSubURL + "/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
}
// DeleteUser response for deleting a user
@@ -495,7 +495,7 @@ func DeleteUser(ctx *context.Context) {
// admin should not delete themself
if u.ID == ctx.Doer.ID {
ctx.Flash.Error(ctx.Tr("admin.users.cannot_delete_self"))
- ctx.Redirect(setting.AppSubURL + "/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
return
}
@@ -503,16 +503,16 @@ func DeleteUser(ctx *context.Context) {
switch {
case models.IsErrUserOwnRepos(err):
ctx.Flash.Error(ctx.Tr("admin.users.still_own_repo"))
- ctx.Redirect(setting.AppSubURL + "/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
case models.IsErrUserHasOrgs(err):
ctx.Flash.Error(ctx.Tr("admin.users.still_has_org"))
- ctx.Redirect(setting.AppSubURL + "/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
case models.IsErrUserOwnPackages(err):
ctx.Flash.Error(ctx.Tr("admin.users.still_own_packages"))
- ctx.Redirect(setting.AppSubURL + "/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
case models.IsErrDeleteLastAdminUser(err):
ctx.Flash.Error(ctx.Tr("auth.last_admin"))
- ctx.Redirect(setting.AppSubURL + "/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + url.PathEscape(ctx.PathParam(":userid")))
default:
ctx.ServerError("DeleteUser", err)
}
@@ -521,7 +521,7 @@ func DeleteUser(ctx *context.Context) {
log.Trace("Account deleted by admin (%s): %s", ctx.Doer.Name, u.Name)
ctx.Flash.Success(ctx.Tr("admin.users.deletion_success"))
- ctx.Redirect(setting.AppSubURL + "/admin/users")
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users")
}
// AvatarPost response for change user's avatar request
@@ -538,7 +538,7 @@ func AvatarPost(ctx *context.Context) {
ctx.Flash.Success(ctx.Tr("settings.update_user_avatar_success"))
}
- ctx.Redirect(setting.AppSubURL + "/admin/users/" + strconv.FormatInt(u.ID, 10))
+ ctx.Redirect(setting.AppSubURL + "/-/admin/users/" + strconv.FormatInt(u.ID, 10))
}
// DeleteAvatar render delete avatar page
@@ -552,5 +552,5 @@ func DeleteAvatar(ctx *context.Context) {
ctx.Flash.Error(err.Error())
}
- ctx.JSONRedirect(setting.AppSubURL + "/admin/users/" + strconv.FormatInt(u.ID, 10))
+ ctx.JSONRedirect(setting.AppSubURL + "/-/admin/users/" + strconv.FormatInt(u.ID, 10))
}
diff --git a/routers/web/auth/auth.go b/routers/web/auth/auth.go
index 5cbe2f5388..c9ef9193f1 100644
--- a/routers/web/auth/auth.go
+++ b/routers/web/auth/auth.go
@@ -98,7 +98,7 @@ func autoSignIn(ctx *context.Context) (bool, error) {
return false, err
}
- ctx.Csrf.DeleteCookie(ctx)
+ ctx.Csrf.PrepareForSessionUser(ctx)
return true, nil
}
@@ -359,8 +359,8 @@ func handleSignInFull(ctx *context.Context, u *user_model.User, remember, obeyRe
ctx.Locale = middleware.Locale(ctx.Resp, ctx.Req)
}
- // Clear whatever CSRF cookie has right now, force to generate a new one
- ctx.Csrf.DeleteCookie(ctx)
+ // force to generate a new CSRF token
+ ctx.Csrf.PrepareForSessionUser(ctx)
// Register last login
if err := user_service.UpdateUser(ctx, u, &user_service.UpdateOptions{SetLastLogin: true}); err != nil {
@@ -804,6 +804,8 @@ func handleAccountActivation(ctx *context.Context, user *user_model.User) {
return
}
+ ctx.Csrf.PrepareForSessionUser(ctx)
+
if err := resetLocale(ctx, user); err != nil {
ctx.ServerError("resetLocale", err)
return
diff --git a/routers/web/auth/oauth.go b/routers/web/auth/oauth.go
index ccbb3bebf1..730d68051b 100644
--- a/routers/web/auth/oauth.go
+++ b/routers/web/auth/oauth.go
@@ -358,8 +358,8 @@ func handleOAuth2SignIn(ctx *context.Context, source *auth.Source, u *user_model
return
}
- // Clear whatever CSRF cookie has right now, force to generate a new one
- ctx.Csrf.DeleteCookie(ctx)
+ // force to generate a new CSRF token
+ ctx.Csrf.PrepareForSessionUser(ctx)
if err := resetLocale(ctx, u); err != nil {
ctx.ServerError("resetLocale", err)
diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go
index ced0bbc15a..02d9b429b5 100644
--- a/routers/web/repo/pull.go
+++ b/routers/web/repo/pull.go
@@ -166,7 +166,7 @@ func setMergeTarget(ctx *context.Context, pull *issues_model.PullRequest) {
ctx.Data["BaseTarget"] = pull.BaseBranch
headBranchLink := ""
if pull.Flow == issues_model.PullRequestFlowGithub {
- b, err := git_model.GetBranch(ctx, ctx.Repo.Repository.ID, pull.HeadBranch)
+ b, err := git_model.GetBranch(ctx, pull.HeadRepoID, pull.HeadBranch)
switch {
case err == nil:
if !b.IsDeleted {
diff --git a/routers/web/repo/setting/runners.go b/routers/web/repo/setting/runners.go
index 93e6f518b0..3141d8f42a 100644
--- a/routers/web/repo/setting/runners.go
+++ b/routers/web/repo/setting/runners.go
@@ -76,7 +76,7 @@ func getRunnersCtx(ctx *context.Context) (*runnersCtx, error) {
IsAdmin: true,
RunnersTemplate: tplAdminRunners,
RunnerEditTemplate: tplAdminRunnerEdit,
- RedirectLink: setting.AppSubURL + "/admin/actions/runners/",
+ RedirectLink: setting.AppSubURL + "/-/admin/actions/runners/",
}, nil
}
diff --git a/routers/web/repo/setting/variables.go b/routers/web/repo/setting/variables.go
index 45b6c0f39a..cc2e619f66 100644
--- a/routers/web/repo/setting/variables.go
+++ b/routers/web/repo/setting/variables.go
@@ -74,7 +74,7 @@ func getVariablesCtx(ctx *context.Context) (*variablesCtx, error) {
RepoID: 0,
IsGlobal: true,
VariablesTemplate: tplAdminVariables,
- RedirectLink: setting.AppSubURL + "/admin/actions/variables",
+ RedirectLink: setting.AppSubURL + "/-/admin/actions/variables",
}, nil
}
diff --git a/routers/web/repo/setting/webhook.go b/routers/web/repo/setting/webhook.go
index 7661599729..8d548c4e3d 100644
--- a/routers/web/repo/setting/webhook.go
+++ b/routers/web/repo/setting/webhook.go
@@ -100,8 +100,8 @@ func getOwnerRepoCtx(ctx *context.Context) (*ownerRepoCtx, error) {
return &ownerRepoCtx{
IsAdmin: true,
IsSystemWebhook: ctx.PathParam(":configType") == "system-hooks",
- Link: path.Join(setting.AppSubURL, "/admin/hooks"),
- LinkNew: path.Join(setting.AppSubURL, "/admin/", ctx.PathParam(":configType")),
+ Link: path.Join(setting.AppSubURL, "/-/admin/hooks"),
+ LinkNew: path.Join(setting.AppSubURL, "/-/admin/", ctx.PathParam(":configType")),
NewTemplate: tplAdminHookNew,
}, nil
}
diff --git a/routers/web/web.go b/routers/web/web.go
index 69258bca18..80399ec499 100644
--- a/routers/web/web.go
+++ b/routers/web/web.go
@@ -683,7 +683,7 @@ func registerRoutes(m *web.Router) {
adminReq := verifyAuthWithOptions(&common.VerifyOptions{SignInRequired: true, AdminRequired: true})
// ***** START: Admin *****
- m.Group("/admin", func() {
+ m.Group("/-/admin", func() {
m.Get("", admin.Dashboard)
m.Get("/system_status", admin.SystemStatus)
m.Post("", web.Bind(forms.AdminDashboardForm{}), admin.DashboardPost)
diff --git a/services/auth/auth.go b/services/auth/auth.go
index a2523a2452..43ff95f053 100644
--- a/services/auth/auth.go
+++ b/services/auth/auth.go
@@ -103,8 +103,8 @@ func handleSignIn(resp http.ResponseWriter, req *http.Request, sess SessionStore
middleware.SetLocaleCookie(resp, user.Language, 0)
- // Clear whatever CSRF has right now, force to generate a new one
+ // force to generate a new CSRF token
if ctx := gitea_context.GetWebContext(req); ctx != nil {
- ctx.Csrf.DeleteCookie(ctx)
+ ctx.Csrf.PrepareForSessionUser(ctx)
}
}
diff --git a/services/context/csrf.go b/services/context/csrf.go
index 9b66d613e3..7b475a8fd8 100644
--- a/services/context/csrf.go
+++ b/services/context/csrf.go
@@ -129,10 +129,8 @@ func (c *csrfProtector) PrepareForSessionUser(ctx *Context) {
}
if needsNew {
- // FIXME: actionId.
c.token = GenerateCsrfToken(c.opt.Secret, c.id, "POST", time.Now())
- cookie := newCsrfCookie(&c.opt, c.token)
- ctx.Resp.Header().Add("Set-Cookie", cookie.String())
+ ctx.Resp.Header().Add("Set-Cookie", newCsrfCookie(&c.opt, c.token).String())
}
ctx.Data["CsrfToken"] = c.token
diff --git a/services/user/user_test.go b/services/user/user_test.go
index cd0f597501..efcbc669c8 100644
--- a/services/user/user_test.go
+++ b/services/user/user_test.go
@@ -114,12 +114,10 @@ func TestRenameUser(t *testing.T) {
})
t.Run("Non usable username", func(t *testing.T) {
- usernames := []string{"--diff", "aa.png", ".well-known", "search", "aaa.atom"}
+ usernames := []string{"--diff", ".well-known", "gitea-actions", "aaa.atom", "aa.png"}
for _, username := range usernames {
- t.Run(username, func(t *testing.T) {
- assert.Error(t, user_model.IsUsableUsername(username))
- assert.Error(t, RenameUser(db.DefaultContext, user, username))
- })
+ assert.Error(t, user_model.IsUsableUsername(username), "non-usable username: %s", username)
+ assert.Error(t, RenameUser(db.DefaultContext, user, username), "non-usable username: %s", username)
}
})
diff --git a/templates/admin/auth/list.tmpl b/templates/admin/auth/list.tmpl
index 174dda1e2a..7057169895 100644
--- a/templates/admin/auth/list.tmpl
+++ b/templates/admin/auth/list.tmpl
@@ -3,7 +3,7 @@