Compare commits

...

7 Commits

Author SHA1 Message Date
qwerty287 24a8d54bfb
Disable ref selection dropdown if you don't have permissions to use it (#17837)
Co-authored-by: Lauris BH <lauris@nix.lv>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
2021-11-28 12:13:13 +08:00
Galen Suen fbadc1a198
Fix value of User.IsRestricted to default setting when oauth2 user auto registration; (#17839) 2021-11-28 11:27:48 +08:00
zeripath 72d82c5b6f
Handle relative unix socket paths (#17836)
Make relative unix sockets absolute by making them absolute against the AppWorkPath

Fix #17833

## ⚠️ BREAKING ⚠️ 

Prior to this PR relative unix sockets would have been asserted to be relative to the current working directory that gitea, gitea serv, hook and manager etc were running in. Hooks and Serv would have failed to work properly under this situation so we expect that although this is a technically breaking change the previous situation was already broken.

Signed-off-by: Andrew Thornton <art27@cantab.net>
2021-11-27 20:22:03 +00:00
mscherer 04c55e97a2
Fix code formating (#17830)
* fix formatter, format imports first, then go fmt
2021-11-27 19:59:51 +08:00
Gabriel Vasile 2e8fc5b034
Replace regex usage for MIME parsing (#17831)
MIME types can have multiple optional parameters, eg:
    video/webm; codecs="w/e codec"; charset="binary"
This commit replaces the usage of regex for getting the "type/subtype"
with mime.ParseMediaType.
2021-11-27 19:12:43 +08:00
GiteaBot 789d251ae4 [skip ci] Updated translations via Crowdin 2021-11-27 00:25:11 +00:00
mscherer 1f0dab2116
Implement Well-Known URL for password change (#17777)
* Implement Well-Known URL for password change

Fixes #11804
2021-11-26 22:55:11 +08:00
10 changed files with 80 additions and 25 deletions

View File

@ -267,10 +267,10 @@ func main() {
logVerbose("batch cmd: %s %v", subCmd, substArgs) logVerbose("batch cmd: %s %v", subCmd, substArgs)
switch subCmd { switch subCmd {
case "gitea-fmt": case "gitea-fmt":
cmdErrors = append(cmdErrors, passThroughCmd("gofmt", substArgs))
if containsString(subArgs, "-w") { if containsString(subArgs, "-w") {
cmdErrors = append(cmdErrors, giteaFormatGoImports(files)) cmdErrors = append(cmdErrors, giteaFormatGoImports(files))
} }
cmdErrors = append(cmdErrors, passThroughCmd("gofmt", substArgs))
case "misspell": case "misspell":
cmdErrors = append(cmdErrors, passThroughCmd("misspell", substArgs)) cmdErrors = append(cmdErrors, passThroughCmd("misspell", substArgs))
default: default:

View File

@ -247,7 +247,7 @@ The following configuration set `Content-Type: application/vnd.android.package-a
- `HTTP_ADDR`: **0.0.0.0**: HTTP listen address. - `HTTP_ADDR`: **0.0.0.0**: HTTP listen address.
- If `PROTOCOL` is set to `fcgi`, Gitea will listen for FastCGI requests on TCP socket - If `PROTOCOL` is set to `fcgi`, Gitea will listen for FastCGI requests on TCP socket
defined by `HTTP_ADDR` and `HTTP_PORT` configuration settings. defined by `HTTP_ADDR` and `HTTP_PORT` configuration settings.
- If `PROTOCOL` is set to `unix` or `fcgi+unix`, this should be the name of the Unix socket file to use. - If `PROTOCOL` is set to `unix` or `fcgi+unix`, this should be the name of the Unix socket file to use. Relative paths will be made absolute against the AppWorkPath.
- `HTTP_PORT`: **3000**: HTTP listen port. - `HTTP_PORT`: **3000**: HTTP listen port.
- If `PROTOCOL` is set to `fcgi`, Gitea will listen for FastCGI requests on TCP socket - If `PROTOCOL` is set to `fcgi`, Gitea will listen for FastCGI requests on TCP socket
defined by `HTTP_ADDR` and `HTTP_PORT` configuration settings. defined by `HTTP_ADDR` and `HTTP_PORT` configuration settings.

View File

@ -583,6 +583,10 @@ func NewContext() {
sec := Cfg.Section("server") sec := Cfg.Section("server")
AppName = Cfg.Section("").Key("APP_NAME").MustString("Gitea: Git with a cup of tea") AppName = Cfg.Section("").Key("APP_NAME").MustString("Gitea: Git with a cup of tea")
Domain = sec.Key("DOMAIN").MustString("localhost")
HTTPAddr = sec.Key("HTTP_ADDR").MustString("0.0.0.0")
HTTPPort = sec.Key("HTTP_PORT").MustString("3000")
Protocol = HTTP Protocol = HTTP
switch sec.Key("PROTOCOL").String() { switch sec.Key("PROTOCOL").String() {
case "https": case "https":
@ -605,6 +609,9 @@ func NewContext() {
log.Fatal("Failed to parse unixSocketPermission: %s", UnixSocketPermissionRaw) log.Fatal("Failed to parse unixSocketPermission: %s", UnixSocketPermissionRaw)
} }
UnixSocketPermission = uint32(UnixSocketPermissionParsed) UnixSocketPermission = uint32(UnixSocketPermissionParsed)
if !filepath.IsAbs(HTTPAddr) {
HTTPAddr = filepath.Join(AppWorkPath, HTTPAddr)
}
case "unix": case "unix":
Protocol = UnixSocket Protocol = UnixSocket
UnixSocketPermissionRaw := sec.Key("UNIX_SOCKET_PERMISSION").MustString("666") UnixSocketPermissionRaw := sec.Key("UNIX_SOCKET_PERMISSION").MustString("666")
@ -613,6 +620,9 @@ func NewContext() {
log.Fatal("Failed to parse unixSocketPermission: %s", UnixSocketPermissionRaw) log.Fatal("Failed to parse unixSocketPermission: %s", UnixSocketPermissionRaw)
} }
UnixSocketPermission = uint32(UnixSocketPermissionParsed) UnixSocketPermission = uint32(UnixSocketPermissionParsed)
if !filepath.IsAbs(HTTPAddr) {
HTTPAddr = filepath.Join(AppWorkPath, HTTPAddr)
}
} }
EnableLetsEncrypt = sec.Key("ENABLE_LETSENCRYPT").MustBool(false) EnableLetsEncrypt = sec.Key("ENABLE_LETSENCRYPT").MustBool(false)
LetsEncryptTOS = sec.Key("LETSENCRYPT_ACCEPTTOS").MustBool(false) LetsEncryptTOS = sec.Key("LETSENCRYPT_ACCEPTTOS").MustBool(false)
@ -626,9 +636,6 @@ func NewContext() {
SSLMaximumVersion = sec.Key("SSL_MAX_VERSION").MustString("") SSLMaximumVersion = sec.Key("SSL_MAX_VERSION").MustString("")
SSLCurvePreferences = sec.Key("SSL_CURVE_PREFERENCES").Strings(",") SSLCurvePreferences = sec.Key("SSL_CURVE_PREFERENCES").Strings(",")
SSLCipherSuites = sec.Key("SSL_CIPHER_SUITES").Strings(",") SSLCipherSuites = sec.Key("SSL_CIPHER_SUITES").Strings(",")
Domain = sec.Key("DOMAIN").MustString("localhost")
HTTPAddr = sec.Key("HTTP_ADDR").MustString("0.0.0.0")
HTTPPort = sec.Key("HTTP_PORT").MustString("3000")
GracefulRestartable = sec.Key("ALLOW_GRACEFUL_RESTARTS").MustBool(true) GracefulRestartable = sec.Key("ALLOW_GRACEFUL_RESTARTS").MustBool(true)
GracefulHammerTime = sec.Key("GRACEFUL_HAMMER_TIME").MustDuration(60 * time.Second) GracefulHammerTime = sec.Key("GRACEFUL_HAMMER_TIME").MustDuration(60 * time.Second)
StartupTimeout = sec.Key("STARTUP_TIMEOUT").MustDuration(0 * time.Second) StartupTimeout = sec.Key("STARTUP_TIMEOUT").MustDuration(0 * time.Second)

View File

@ -5,6 +5,7 @@
package upload package upload
import ( import (
"mime"
"net/http" "net/http"
"net/url" "net/url"
"path" "path"
@ -31,7 +32,6 @@ func (err ErrFileTypeForbidden) Error() string {
return "This file extension or type is not allowed to be uploaded." return "This file extension or type is not allowed to be uploaded."
} }
var mimeTypeSuffixRe = regexp.MustCompile(`;.*$`)
var wildcardTypeRe = regexp.MustCompile(`^[a-z]+/\*$`) var wildcardTypeRe = regexp.MustCompile(`^[a-z]+/\*$`)
// Verify validates whether a file is allowed to be uploaded. // Verify validates whether a file is allowed to be uploaded.
@ -51,7 +51,11 @@ func Verify(buf []byte, fileName string, allowedTypesStr string) error {
} }
fullMimeType := http.DetectContentType(buf) fullMimeType := http.DetectContentType(buf)
mimeType := strings.TrimSpace(mimeTypeSuffixRe.ReplaceAllString(fullMimeType, "")) mimeType, _, err := mime.ParseMediaType(fullMimeType)
if err != nil {
log.Warn("Detected attachment type could not be parsed %s", fullMimeType)
return ErrFileTypeForbidden{Type: fullMimeType}
}
extension := strings.ToLower(path.Ext(fileName)) extension := strings.ToLower(path.Ext(fileName))
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#Unique_file_type_specifiers // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#Unique_file_type_specifiers

View File

@ -155,6 +155,8 @@ lfs_path=Ruta raĂ­z de Git LFS
lfs_path_helper=Los archivos almacenados con Git LFS se almacenarán en este directorio. Déjelo vacío para deshabilitarlo. lfs_path_helper=Los archivos almacenados con Git LFS se almacenarán en este directorio. Déjelo vacío para deshabilitarlo.
run_user=Ejecutar como usuario run_user=Ejecutar como usuario
run_user_helper=Introduzca el nombre de usuario del sistema operativo sobre el que está ejecutando Gitea. Tenga en cuenta que este usuario debe tener acceso a la ruta a la raíz de los repositorios. run_user_helper=Introduzca el nombre de usuario del sistema operativo sobre el que está ejecutando Gitea. Tenga en cuenta que este usuario debe tener acceso a la ruta a la raíz de los repositorios.
domain=Dominio del Servidor
domain_helper=Dominio o direcciĂłn de host para el servidor.
ssh_port=Puerto de servidor SSH ssh_port=Puerto de servidor SSH
ssh_port_helper=Número de puerto en el que está escuchando su servidor SSH. Déjelo vacío para deshabilitarlo. ssh_port_helper=Número de puerto en el que está escuchando su servidor SSH. Déjelo vacío para deshabilitarlo.
http_port=Puerto de escucha HTTP de Gitea http_port=Puerto de escucha HTTP de Gitea
@ -519,7 +521,9 @@ website=Página web
location=LocalizaciĂłn location=LocalizaciĂłn
update_theme=Actualizar tema update_theme=Actualizar tema
update_profile=Actualizar perfil update_profile=Actualizar perfil
update_language=Actualizar idioma
update_language_not_found=El idioma '%s' no está disponible. update_language_not_found=El idioma '%s' no está disponible.
update_language_success=El idioma ha sido actualizado.
update_profile_success=Tu perfil ha sido actualizado. update_profile_success=Tu perfil ha sido actualizado.
change_username=Su nombre de usuario ha sido cambiado. change_username=Su nombre de usuario ha sido cambiado.
change_username_prompt=Nota: los cambios de nombre de usuario también cambian la URL de su cuenta. change_username_prompt=Nota: los cambios de nombre de usuario también cambian la URL de su cuenta.
@ -895,6 +899,7 @@ migrate.clone_address_desc=La URL HTTP(S) o de Git 'clone' de un repositorio exi
migrate.github_token_desc=Puedes poner uno o más tokens con comas separadas aquí para hacer migrar más rápido debido al límite de velocidad de Github API. PRECAUCIÓN: Abusar esta característica puede violar la política del proveedor de servicios y llevar a bloquear la cuenta. migrate.github_token_desc=Puedes poner uno o más tokens con comas separadas aquí para hacer migrar más rápido debido al límite de velocidad de Github API. PRECAUCIÓN: Abusar esta característica puede violar la política del proveedor de servicios y llevar a bloquear la cuenta.
migrate.clone_local_path=o una ruta local del servidor migrate.clone_local_path=o una ruta local del servidor
migrate.permission_denied=No te está permitido importar repositorios locales. migrate.permission_denied=No te está permitido importar repositorios locales.
migrate.permission_denied_blocked=No puede importar desde hosts no permitidos, por favor pida al administrador que marque ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS configuraciĂłn.
migrate.invalid_local_path=La ruta local es inválida. No existe o no es un directorio. migrate.invalid_local_path=La ruta local es inválida. No existe o no es un directorio.
migrate.invalid_lfs_endpoint=El punto final de LFS no es válido. migrate.invalid_lfs_endpoint=El punto final de LFS no es válido.
migrate.failed=MigraciĂłn fallida: %v migrate.failed=MigraciĂłn fallida: %v
@ -905,12 +910,14 @@ migrate.migrate=Migrar desde %s
migrate.migrating=Migrando desde <b>%s</b>... migrate.migrating=Migrando desde <b>%s</b>...
migrate.migrating_failed=La migraciĂłn desde <b>%s</b> ha fallado. migrate.migrating_failed=La migraciĂłn desde <b>%s</b> ha fallado.
migrate.migrating_failed.error=Error: %s migrate.migrating_failed.error=Error: %s
migrate.migrating_failed_no_addr=MigraciĂłn fallida.
migrate.github.description=Migrar datos desde github.com u otra instancia de Github. migrate.github.description=Migrar datos desde github.com u otra instancia de Github.
migrate.git.description=Migrar un repositorio sĂłlo desde cualquier servicio Git. migrate.git.description=Migrar un repositorio sĂłlo desde cualquier servicio Git.
migrate.gitlab.description=Migrar datos de gitlab.com u otra instancia de GitLab. migrate.gitlab.description=Migrar datos de gitlab.com u otra instancia de GitLab.
migrate.gitea.description=Migrar datos de gitea.com u otra instancia de Gitea. migrate.gitea.description=Migrar datos de gitea.com u otra instancia de Gitea.
migrate.gogs.description=Migrar datos de notabug.org u otra instancia de Gogs. migrate.gogs.description=Migrar datos de notabug.org u otra instancia de Gogs.
migrate.onedev.description=Migrar datos desde code.onedev.io u otra instancia de OneDev. migrate.onedev.description=Migrar datos desde code.onedev.io u otra instancia de OneDev.
migrate.gitbucket.description=Migrar datos de instancias de GitBucket.
migrate.migrating_git=Migrando datos de Git migrate.migrating_git=Migrando datos de Git
migrate.migrating_topics=Migrando Temas migrate.migrating_topics=Migrando Temas
migrate.migrating_milestones=Migrando Hitos migrate.migrating_milestones=Migrando Hitos
@ -939,6 +946,7 @@ clone_this_repo=Clonar este repositorio
create_new_repo_command=Crear un nuevo repositorio desde lĂ­nea de comandos create_new_repo_command=Crear un nuevo repositorio desde lĂ­nea de comandos
push_exist_repo=Hacer push de un repositorio existente desde lĂ­nea de comandos push_exist_repo=Hacer push de un repositorio existente desde lĂ­nea de comandos
empty_message=Este repositorio no contiene ningĂşn contenido. empty_message=Este repositorio no contiene ningĂşn contenido.
broken_message=Los datos de git subyacentes a este repositorio no pueden ser leĂ­dos. Contacte con el administrador de esta instancia o elimine este repositorio.
code=CĂłdigo code=CĂłdigo
code.desc=Acceder cĂłdigo fuente, archivos, commits, y ramas. code.desc=Acceder cĂłdigo fuente, archivos, commits, y ramas.
@ -1165,6 +1173,9 @@ issues.add_assignee_at='fue asignado por <b>%s</b> %s'
issues.remove_assignee_at=`fue desasignado por <b>%s</b> %s` issues.remove_assignee_at=`fue desasignado por <b>%s</b> %s`
issues.remove_self_assignment=`eliminado su asignaciĂłn %s` issues.remove_self_assignment=`eliminado su asignaciĂłn %s`
issues.change_title_at=`cambiĂł el tĂ­tulo de <b><strike>%s</strike></b> a <b>%s</b> %s` issues.change_title_at=`cambiĂł el tĂ­tulo de <b><strike>%s</strike></b> a <b>%s</b> %s`
issues.change_ref_at=`cambiĂł referencia de <b><strike>%s</strike></b> a <b>%s</b> %s`
issues.remove_ref_at=`eliminĂł la referencia <b>%s</b> %s`
issues.add_ref_at=`añadió la referencia <b>%s</b> %s`
issues.delete_branch_at=`rama eliminada <b>%s</b> %s` issues.delete_branch_at=`rama eliminada <b>%s</b> %s`
issues.open_tab=%d abiertas issues.open_tab=%d abiertas
issues.close_tab=%d cerradas issues.close_tab=%d cerradas
@ -1398,10 +1409,12 @@ pulls.compare_changes_desc=Seleccione la rama en la que se fusiona y la rama a r
pulls.compare_base=fusionar en pulls.compare_base=fusionar en
pulls.compare_compare=recuperar de pulls.compare_compare=recuperar de
pulls.switch_comparison_type=Cambiar tipo de comparaciĂłn pulls.switch_comparison_type=Cambiar tipo de comparaciĂłn
pulls.switch_head_and_base=Intercambiar cabeza y base
pulls.filter_branch=Filtrar rama pulls.filter_branch=Filtrar rama
pulls.no_results=Sin resultados. pulls.no_results=Sin resultados.
pulls.nothing_to_compare=Estas ramas son iguales. No hay necesidad para crear un pull request. pulls.nothing_to_compare=Estas ramas son iguales. No hay necesidad para crear un pull request.
pulls.nothing_to_compare_and_allow_empty_pr=Estas ramas son iguales. Este PR estará vacío. pulls.nothing_to_compare_and_allow_empty_pr=Estas ramas son iguales. Este PR estará vacío.
pulls.has_pull_request=`Ya existe un pull request entre estas ramas: <a href="%[1]s">%[2]s#%[3]d</a>`
pulls.create=Crear Pull Request pulls.create=Crear Pull Request
pulls.title_desc=desea fusionar %[1]d commits de <code>%[2]s</code> en <code id="branch_target">%[3]s</code> pulls.title_desc=desea fusionar %[1]d commits de <code>%[2]s</code> en <code id="branch_target">%[3]s</code>
pulls.merged_title_desc=fusionados %[1]d commits de <code>%[2]s</code> en <code>%[3]s</code> %[4]s pulls.merged_title_desc=fusionados %[1]d commits de <code>%[2]s</code> en <code>%[3]s</code> %[4]s
@ -1919,6 +1932,8 @@ settings.require_signed_commits=Requiere commits firmados
settings.require_signed_commits_desc=Rechazar push en esta rama si los commits no están firmados o no son verificables. settings.require_signed_commits_desc=Rechazar push en esta rama si los commits no están firmados o no son verificables.
settings.protect_protected_file_patterns=Patrones de archivos protegidos (separados con punto y coma '\;'): settings.protect_protected_file_patterns=Patrones de archivos protegidos (separados con punto y coma '\;'):
settings.protect_protected_file_patterns_desc=Archivos protegidos que no están permitidos a ser cambiados directamente incluso si el usuario tiene permiso para agregar, editar o borrar archivos en esta rama. Múltiples patrones pueden separarse usando punto y coma ('\;'). Vea la documentación de <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> para la sintaxis de patrones. Ejemplos: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>. settings.protect_protected_file_patterns_desc=Archivos protegidos que no están permitidos a ser cambiados directamente incluso si el usuario tiene permiso para agregar, editar o borrar archivos en esta rama. Múltiples patrones pueden separarse usando punto y coma ('\;'). Vea la documentación de <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> para la sintaxis de patrones. Ejemplos: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
settings.protect_unprotected_file_patterns=Patrones de archivos sin protecciĂłn (separados con punto y coma '\;'):
settings.protect_unprotected_file_patterns_desc=Archivos sin protecciĂłn que se pueden cambiar directamente si el usuario tiene acceso de escritura, evitando la restricciĂłn push. MĂşltiples patrones pueden separarse usando punto y coma ('\;'). Vea la documentaciĂłn de <a href="https://pkg.go.dev/github.com/gobwas/glob#Compile">github.com/gobwas/glob</a> para la sintaxis de patrones. Ejemplos: <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
settings.add_protected_branch=Activar protecciĂłn settings.add_protected_branch=Activar protecciĂłn
settings.delete_protected_branch=Desactivar protecciĂłn settings.delete_protected_branch=Desactivar protecciĂłn
settings.update_protect_branch_success=La protecciĂłn de la rama '%s' ha sido actualizada. settings.update_protect_branch_success=La protecciĂłn de la rama '%s' ha sido actualizada.
@ -1992,6 +2007,7 @@ settings.lfs_pointers.inRepo=En repositorio
settings.lfs_pointers.exists=Existe en almacén settings.lfs_pointers.exists=Existe en almacén
settings.lfs_pointers.accessible=Accesible al usuario settings.lfs_pointers.accessible=Accesible al usuario
settings.lfs_pointers.associateAccessible=Asociar %d OID accesibles settings.lfs_pointers.associateAccessible=Asociar %d OID accesibles
settings.rename_branch_failed_exist=No se puede renombrar la rama porque la rama destino %s ya existe.
settings.rename_branch_failed_not_exist=No se puede renombrar la rama %s porque no existe. settings.rename_branch_failed_not_exist=No se puede renombrar la rama %s porque no existe.
settings.rename_branch_success=La rama %s se renombrĂł correctamente a %s. settings.rename_branch_success=La rama %s se renombrĂł correctamente a %s.
settings.rename_branch_from=nombre de la rama vieja settings.rename_branch_from=nombre de la rama vieja
@ -2028,6 +2044,7 @@ diff.file_suppressed=La diferencia del archivo ha sido suprimido porque es demas
diff.file_suppressed_line_too_long=Las diferiencias del archivo han sido suprimidas porque una o mas lineas son muy largas diff.file_suppressed_line_too_long=Las diferiencias del archivo han sido suprimidas porque una o mas lineas son muy largas
diff.too_many_files=Algunos archivos no se mostraron porque demasiados archivos han cambiado en esta diferencia diff.too_many_files=Algunos archivos no se mostraron porque demasiados archivos han cambiado en esta diferencia
diff.show_more=Ver más diff.show_more=Ver más
diff.load=Cargar Diff
diff.generated=generado diff.generated=generado
diff.vendored=vendido diff.vendored=vendido
diff.comment.placeholder=Deja un comentario diff.comment.placeholder=Deja un comentario
@ -2377,6 +2394,7 @@ users.list_status_filter.reset=Reiniciar
users.list_status_filter.is_active=Activo users.list_status_filter.is_active=Activo
users.list_status_filter.not_active=Inactivo users.list_status_filter.not_active=Inactivo
users.list_status_filter.is_admin=Administrador users.list_status_filter.is_admin=Administrador
users.list_status_filter.not_admin=Sin Admin
users.list_status_filter.is_restricted=Restringido users.list_status_filter.is_restricted=Restringido
users.list_status_filter.not_restricted=No restringido users.list_status_filter.not_restricted=No restringido
users.list_status_filter.is_prohibit_login=Prohibido el inicio de sesiĂłn users.list_status_filter.is_prohibit_login=Prohibido el inicio de sesiĂłn
@ -2487,6 +2505,7 @@ auths.oauth2_authURL=URL de AutorizaciĂłn
auths.oauth2_profileURL=URL del perfil auths.oauth2_profileURL=URL del perfil
auths.oauth2_emailURL=URL de correo auths.oauth2_emailURL=URL de correo
auths.skip_local_two_fa=Omitir 2FA local auths.skip_local_two_fa=Omitir 2FA local
auths.skip_local_two_fa_helper=Dejar sin ajustar significa que los usuarios locales con una configuración 2FA tendrán que pasar 2FA para iniciar sesión
auths.oauth2_tenant=Tenant auths.oauth2_tenant=Tenant
auths.enable_auto_register=Hablilitar Auto-Registro auths.enable_auto_register=Hablilitar Auto-Registro
auths.sspi_auto_create_users=Crear usuarios automáticamente auths.sspi_auto_create_users=Crear usuarios automáticamente
@ -2535,6 +2554,7 @@ config.app_ver=VersiĂłn de Gitea
config.app_url=URL base de Gitea config.app_url=URL base de Gitea
config.custom_conf=Ruta del fichero de configuraciĂłn config.custom_conf=Ruta del fichero de configuraciĂłn
config.custom_file_root_path=Ruta raĂ­z de los archivos personalizada config.custom_file_root_path=Ruta raĂ­z de los archivos personalizada
config.domain=Dominio del Servidor
config.offline_mode=Modo offline config.offline_mode=Modo offline
config.disable_router_log=Deshabilitar Log del Router config.disable_router_log=Deshabilitar Log del Router
config.run_user=Ejecutar como usuario config.run_user=Ejecutar como usuario
@ -2550,6 +2570,7 @@ config.reverse_auth_user=AutenticaciĂłn Inversa de Usuario
config.ssh_config=ConfiguraciĂłn SSH config.ssh_config=ConfiguraciĂłn SSH
config.ssh_enabled=Habilitado config.ssh_enabled=Habilitado
config.ssh_start_builtin_server=Utilizar servidor integrado config.ssh_start_builtin_server=Utilizar servidor integrado
config.ssh_domain=Dominio del servidor SSH
config.ssh_port=Puerto config.ssh_port=Puerto
config.ssh_listen_port=Puerto de escucha config.ssh_listen_port=Puerto de escucha
config.ssh_root_path=Ruta raĂ­z config.ssh_root_path=Ruta raĂ­z
@ -2746,14 +2767,32 @@ notices.delete_success=Los avisos del sistema se han eliminado.
[action] [action]
create_repo=creĂł el repositorio <a href="%s">%s</a> create_repo=creĂł el repositorio <a href="%s">%s</a>
rename_repo=repositorio renombrado de <code>%[1]s</code> a <a href="%[2]s">%[3]s</a> rename_repo=repositorio renombrado de <code>%[1]s</code> a <a href="%[2]s">%[3]s</a>
commit_repo=hizo push a <a href="%[2]s">%[3]s</a> en <a href="%[1]s">%[4]s</a>
create_issue=`abriĂł la incidencia <a href="%[1]s">%[3]s#%[2]s</a>`
close_issue=`cerrĂł la incidencia <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_issue=`reabriĂł la incidencia <a href="%[1]s">%[3]s#%[2]s</a>`
create_pull_request=`creĂł el pull request <a href="%[1]s">%[3]s#%[2]s</a>`
close_pull_request=`cerrĂł el pull request <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_pull_request=`reabriĂł el pull request <a href="%[1]s">%[3]s#%[2]s</a>`
comment_issue=`comentĂł en la incidencia <a href="%[1]s">%[3]s#%[2]s</a>`
comment_pull=`comentĂł en el pull request <a href="%[1]s">%[3]s#%[2]s</a>`
merge_pull_request=`fusionĂł el pull request <a href="%[1]s">%[3]s#%[2]s</a>`
transfer_repo=transfiriĂł el repositorio <code>%s</code> a <a href="%s">%s</a> transfer_repo=transfiriĂł el repositorio <code>%s</code> a <a href="%s">%s</a>
push_tag=hizĂł push la etiqueta <a href="%[2]s">%[3]s</a> a <a href="%[1]s">%[4]s</a>
delete_tag=etiqueta eliminada %[2]s de <a href="%[1]s">%[3]s</a> delete_tag=etiqueta eliminada %[2]s de <a href="%[1]s">%[3]s</a>
delete_branch=rama %[2]s eliminada, de <a href="%[1]s">%[3]s</a> delete_branch=rama %[2]s eliminada, de <a href="%[1]s">%[3]s</a>
compare_branch=Comparar compare_branch=Comparar
compare_commits=Comparar %d commits compare_commits=Comparar %d commits
compare_commits_general=Comparar commits compare_commits_general=Comparar commits
mirror_sync_push=sincronizó cambios a <a href="%[2]s">%[3]s</a> en <a href="%[1]s">%[4]s</a> desde réplica
mirror_sync_create=sincronizó la nueva referencia <a href="%[2]s">%[3]s</a> a <a href="%[1]s">%[4]s</a> de réplica
mirror_sync_delete=sincronizada y eliminada referencia <code>%[2]s</code> en <a href="%[1]s">%[3]s</a> desde réplica mirror_sync_delete=sincronizada y eliminada referencia <code>%[2]s</code> en <a href="%[1]s">%[3]s</a> desde réplica
approve_pull_request=`aprobĂł <a href="%[1]s">%[3]s#%[2]s</a>`
reject_pull_request=`sugiriĂł cambios para <a href="%[1]s">%[3]s#%[2]s</a>`
publish_release=`se lanzĂł <a href="%[2]s"> "%[4]s" </a> en <a href="%[1]s">%[3]s</a>`
review_dismissed=`descartĂł la revisiĂłn de <b>%[4]s</b> para <a href="%[1]s">%[3]s#%[2]s</a>`
review_dismissed_reason=Motivo: review_dismissed_reason=Motivo:
create_branch=creĂł rama <a href="%[2]s">%[3]s</a> en <a href="%[1]s">%[4]s</a>
starred_repo=destacĂł <a href="%[1]s">%[2]s</a> starred_repo=destacĂł <a href="%[1]s">%[2]s</a>
watched_repo=comenzĂł a seguir <a href="%[1]s">%[2]s</a> watched_repo=comenzĂł a seguir <a href="%[1]s">%[2]s</a>

View File

@ -955,7 +955,6 @@ func NewIssuePost(ctx *context.Context) {
ctx.Data["NewIssueChooseTemplate"] = len(ctx.IssueTemplatesFromDefaultBranch()) > 0 ctx.Data["NewIssueChooseTemplate"] = len(ctx.IssueTemplatesFromDefaultBranch()) > 0
ctx.Data["RequireHighlightJS"] = true ctx.Data["RequireHighlightJS"] = true
ctx.Data["RequireSimpleMDE"] = true ctx.Data["RequireSimpleMDE"] = true
ctx.Data["ReadOnly"] = false
ctx.Data["PullRequestWorkInProgressPrefixes"] = setting.Repository.PullRequest.WorkInProgressPrefixes ctx.Data["PullRequestWorkInProgressPrefixes"] = setting.Repository.PullRequest.WorkInProgressPrefixes
ctx.Data["IsAttachmentEnabled"] = setting.Attachment.Enabled ctx.Data["IsAttachmentEnabled"] = setting.Attachment.Enabled
upload.AddUploadContext(ctx, "comment") upload.AddUploadContext(ctx, "comment")
@ -1630,7 +1629,6 @@ func ViewIssue(ctx *context.Context) {
ctx.Data["Participants"] = participants ctx.Data["Participants"] = participants
ctx.Data["NumParticipants"] = len(participants) ctx.Data["NumParticipants"] = len(participants)
ctx.Data["Issue"] = issue ctx.Data["Issue"] = issue
ctx.Data["ReadOnly"] = false
ctx.Data["SignInLink"] = setting.AppSubURL + "/user/login?redirect_to=" + url.QueryEscape(ctx.Data["Link"].(string)) ctx.Data["SignInLink"] = setting.AppSubURL + "/user/login?redirect_to=" + url.QueryEscape(ctx.Data["Link"].(string))
ctx.Data["IsIssuePoster"] = ctx.IsSigned && issue.IsPoster(ctx.User.ID) ctx.Data["IsIssuePoster"] = ctx.IsSigned && issue.IsPoster(ctx.User.ID)
ctx.Data["HasIssuesOrPullsWritePermission"] = ctx.Repo.CanWriteIssuesOrPulls(issue.IsPull) ctx.Data["HasIssuesOrPullsWritePermission"] = ctx.Repo.CanWriteIssuesOrPulls(issue.IsPull)

View File

@ -681,13 +681,14 @@ func SignInOAuthCallback(ctx *context.Context) {
return return
} }
u = &user_model.User{ u = &user_model.User{
Name: getUserName(&gothUser), Name: getUserName(&gothUser),
FullName: gothUser.Name, FullName: gothUser.Name,
Email: gothUser.Email, Email: gothUser.Email,
IsActive: !setting.OAuth2Client.RegisterEmailConfirm, IsActive: !setting.OAuth2Client.RegisterEmailConfirm,
LoginType: login.OAuth2, LoginType: login.OAuth2,
LoginSource: loginSource.ID, LoginSource: loginSource.ID,
LoginName: gothUser.UserID, LoginName: gothUser.UserID,
IsRestricted: setting.Service.DefaultUserIsRestricted,
} }
if !createAndHandleCreatedUser(ctx, base.TplName(""), nil, u, &gothUser, setting.OAuth2Client.AccountLinking != setting.OAuth2AccountLinkingDisabled) { if !createAndHandleCreatedUser(ctx, base.TplName(""), nil, u, &gothUser, setting.OAuth2Client.AccountLinking != setting.OAuth2AccountLinkingDisabled) {

View File

@ -232,10 +232,16 @@ func RegisterRoutes(m *web.Route) {
// Routers. // Routers.
// for health check // for health check
m.Get("/", Home) m.Get("/", Home)
m.Get("/.well-known/openid-configuration", user.OIDCWellKnown) m.Group("/.well-known", func() {
if setting.Federation.Enabled { m.Get("/openid-configuration", user.OIDCWellKnown)
m.Get("/.well-known/nodeinfo", NodeInfoLinks) if setting.Federation.Enabled {
} m.Get("/nodeinfo", NodeInfoLinks)
}
m.Get("/change-password", func(w http.ResponseWriter, req *http.Request) {
http.Redirect(w, req, "/user/settings/account", http.StatusTemporaryRedirect)
})
})
m.Group("/explore", func() { m.Group("/explore", func() {
m.Get("", func(ctx *context.Context) { m.Get("", func(ctx *context.Context) {
ctx.Redirect(setting.AppSubURL + "/explore/repos") ctx.Redirect(setting.AppSubURL + "/explore/repos")

View File

@ -11,12 +11,12 @@ import (
"code.gitea.io/gitea/models/login" "code.gitea.io/gitea/models/login"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/services/auth/source/oauth2"
"code.gitea.io/gitea/services/auth/source/smtp"
_ "code.gitea.io/gitea/services/auth/source/db" // register the sources (and below) _ "code.gitea.io/gitea/services/auth/source/db" // register the sources (and below)
_ "code.gitea.io/gitea/services/auth/source/ldap" // register the ldap source _ "code.gitea.io/gitea/services/auth/source/ldap" // register the ldap source
"code.gitea.io/gitea/services/auth/source/oauth2" _ "code.gitea.io/gitea/services/auth/source/pam" // register the pam source
_ "code.gitea.io/gitea/services/auth/source/pam" // register the pam source
"code.gitea.io/gitea/services/auth/source/smtp"
_ "code.gitea.io/gitea/services/auth/source/sspi" // register the sspi source _ "code.gitea.io/gitea/services/auth/source/sspi" // register the sspi source
) )

View File

@ -5,10 +5,10 @@
{{$.CsrfTokenHtml}} {{$.CsrfTokenHtml}}
</form> </form>
<div class="ui {{if .ReadOnly}}disabled{{end}} floating filter select-branch dropdown" data-no-results="{{.i18n.Tr "repo.pulls.no_results"}}"> <div class="ui {{if not .HasIssuesOrPullsWritePermission}}disabled{{end}} floating filter select-branch dropdown" data-no-results="{{.i18n.Tr "repo.pulls.no_results"}}">
<div class="ui basic small button"> <div class="ui basic small button">
<span class="text branch-name">{{if .Issue.Ref}}{{$.RefEndName}}{{else}}{{.i18n.Tr "repo.issues.no_ref"}}{{end}}</span> <span class="text branch-name">{{if .Issue.Ref}}{{$.RefEndName}}{{else}}{{.i18n.Tr "repo.issues.no_ref"}}{{end}}</span>
{{svg "octicon-triangle-down" 14 "dropdown icon"}} {{if .HasIssuesOrPullsWritePermission}}{{svg "octicon-triangle-down" 14 "dropdown icon"}}{{end}}
</div> </div>
<div class="menu"> <div class="menu">
<div class="ui icon search input"> <div class="ui icon search input">