Skip to content

Commit

Permalink
Merge branch 'main' into revert-alpine314
Browse files Browse the repository at this point in the history
  • Loading branch information
zeripath authored Jul 16, 2021
2 parents 407fcea + fdb0e82 commit 06e55f4
Show file tree
Hide file tree
Showing 16 changed files with 81 additions and 50 deletions.
3 changes: 0 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
<a href="https://discord.gg/Gitea" title="Join the Discord chat at https://discord.gg/Gitea">
<img src="https://img.shields.io/discord/322538954119184384.svg">
</a>
<a href="https://microbadger.com/images/gitea/gitea" title="Get your own image badge on microbadger.com">
<img src="https://images.microbadger.com/badges/image/gitea/gitea.svg">
</a>
<a href="https://codecov.io/gh/go-gitea/gitea" title="Codecov">
<img src="https://codecov.io/gh/go-gitea/gitea/branch/main/graph/badge.svg">
</a>
Expand Down
3 changes: 0 additions & 3 deletions README_ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
<a href="https://discord.gg/Gitea" title="Join the Discord chat at https://discord.gg/Gitea">
<img src="https://img.shields.io/discord/322538954119184384.svg">
</a>
<a href="https://microbadger.com/images/gitea/gitea" title="Get your own image badge on microbadger.com">
<img src="https://images.microbadger.com/badges/image/gitea/gitea.svg">
</a>
<a href="https://codecov.io/gh/go-gitea/gitea" title="Codecov">
<img src="https://codecov.io/gh/go-gitea/gitea/branch/main/graph/badge.svg">
</a>
Expand Down
3 changes: 3 additions & 0 deletions custom/conf/app.example.ini
Original file line number Diff line number Diff line change
Expand Up @@ -652,6 +652,9 @@ PATH =
;; Default value for AllowCreateOrganization
;; Every new user will have rights set to create organizations depending on this setting
;DEFAULT_ALLOW_CREATE_ORGANIZATION = true
;; Default value for IsRestricted
;; Every new user will have restricted permissions depending on this setting
;DEFAULT_USER_IS_RESTRICTED = false
;;
;; Either "public", "limited" or "private", default is "public"
;; Limited is for users visible only to signed users
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/advanced/adding-legal-pages.en-us.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ You absolutely must not place a general ToS or privacy statement that implies th
Create or append to `/path/to/custom/templates/custom/extra_links_footer.tmpl`:

```go
<a class="item" href="{{AppSubUrl}}/privacy.html">Privacy Policy</a>
<a class="item" href="{{AppSubUrl}}/assets/privacy.html">Privacy Policy</a>
```

Restart Gitea to see the changes.
1 change: 1 addition & 0 deletions docs/content/doc/advanced/config-cheat-sheet.en-us.md
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,7 @@ relation to port exhaustion.
- `HCAPTCHA_SITEKEY`: **""**: Sign up at https://www.hcaptcha.com/ to get a sitekey for hcaptcha.
- `DEFAULT_KEEP_EMAIL_PRIVATE`: **false**: By default set users to keep their email address private.
- `DEFAULT_ALLOW_CREATE_ORGANIZATION`: **true**: Allow new users to create organizations by default.
- `DEFAULT_USER_IS_RESTRICTED`: **false**: Give new users restricted permissions by default
- `DEFAULT_ENABLE_DEPENDENCIES`: **true**: Enable this to have dependencies enabled by default.
- `ALLOW_CROSS_REPOSITORY_DEPENDENCIES` : **true** Enable this to allow dependencies on issues from any repository where the user is granted access.
- `ENABLE_USER_HEATMAP`: **true**: Enable this to display the heatmap on users profiles.
Expand Down
14 changes: 7 additions & 7 deletions docs/content/doc/advanced/customizing-gitea.en-us.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ For instance, let's say you are in Germany and must add the famously legally-req
just place it under your "$GITEA_CUSTOM/public/" directory (for instance `$GITEA_CUSTOM/public/impressum.html`) and put a link to it in either `$GITEA_CUSTOM/templates/custom/extra_links.tmpl` or `$GITEA_CUSTOM/templates/custom/extra_links_footer.tmpl`.

To match the current style, the link should have the class name "item", and you can use `{{AppSubUrl}}` to get the base URL:
`<a class="item" href="{{AppSubUrl}}/impressum.html">Impressum</a>`
`<a class="item" href="{{AppSubUrl}}/assets/impressum.html">Impressum</a>`

For more information, see [Adding Legal Pages](https://docs.gitea.io/en-us/adding-legal-pages).

Expand Down Expand Up @@ -174,21 +174,21 @@ You can display STL file directly in Gitea by adding:
if ($('.view-raw>a[href$=".stl" i]').length) {
$("body").append(
'<link href="/Madeleine.js/src/css/Madeleine.css" rel="stylesheet">'
'<link href="/assets/Madeleine.js/src/css/Madeleine.css" rel="stylesheet">'
);
Promise.all([
lS("/Madeleine.js/src/lib/stats.js"),
lS("/Madeleine.js/src/lib/detector.js"),
lS("/Madeleine.js/src/lib/three.min.js"),
lS("/Madeleine.js/src/Madeleine.js"),
lS("/assets/Madeleine.js/src/lib/stats.js"),
lS("/assets/Madeleine.js/src/lib/detector.js"),
lS("/assets/Madeleine.js/src/lib/three.min.js"),
lS("/assets/Madeleine.js/src/Madeleine.js"),
]).then(function () {
$(".view-raw")
.attr("id", "view-raw")
.attr("style", "padding: 0;margin-bottom: -10px;");
new Madeleine({
target: "view-raw",
data: $('.view-raw>a[href$=".stl" i]').attr("href"),
path: "/Madeleine.js/src",
path: "/assets/Madeleine.js/src",
});
$('.view-raw>a[href$=".stl"]').remove();
});
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/advanced/customizing-gitea.zh-cn.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ Gitea 引用 `custom` 目录中的自定义配置文件来覆盖配置、模板
"custom/public/"目录下(比如 `custom/public/impressum.html`)并且将它与 `custom/templates/custom/extra_links.tmpl` 链接起来即可。

这个链接应当使用一个名为“item”的 class 来匹配当前样式,您可以使用 `{{AppSubUrl}}` 来获取 base URL:
`<a class="item" href="{{AppSubUrl}}/impressum.html">Impressum</a>`
`<a class="item" href="{{AppSubUrl}}/assets/impressum.html">Impressum</a>`

同理,您可以将页签添加到 `extra_tabs.tmpl` 中,使用同样的方式来添加页签。它的具体样式需要与
`templates/repo/header.tmpl` 中已有的其他选项卡的样式匹配
Expand Down
2 changes: 1 addition & 1 deletion docs/content/doc/advanced/external-renderers.en-us.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,5 +164,5 @@ And so you could write some CSS:

Add your stylesheet to your custom directory e.g `custom/public/css/my-style-XXXXX.css` and import it using a custom header file `custom/templates/custom/header.tmpl`:
```html
<link type="text/css" href="{{AppSubUrl}}/css/my-style-XXXXX.css" />
<link type="text/css" href="{{AppSubUrl}}/assets/css/my-style-XXXXX.css" />
```
23 changes: 23 additions & 0 deletions integrations/signup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"strings"
"testing"

"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/setting"
"github.com/stretchr/testify/assert"
"github.com/unknwon/i18n"
Expand All @@ -33,6 +34,28 @@ func TestSignup(t *testing.T) {
MakeRequest(t, req, http.StatusOK)
}

func TestSignupAsRestricted(t *testing.T) {
defer prepareTestEnv(t)()

setting.Service.EnableCaptcha = false
setting.Service.DefaultUserIsRestricted = true

req := NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{
"user_name": "restrictedUser",
"email": "[email protected]",
"password": "examplePassword!1",
"retype": "examplePassword!1",
})
MakeRequest(t, req, http.StatusFound)

// should be able to view new user's page
req = NewRequest(t, "GET", "/restrictedUser")
MakeRequest(t, req, http.StatusOK)

user2 := models.AssertExistsAndLoadBean(t, &models.User{Name: "restrictedUser"}).(*models.User)
assert.True(t, user2.IsRestricted)
}

func TestSignupEmail(t *testing.T) {
defer prepareTestEnv(t)()

Expand Down
4 changes: 2 additions & 2 deletions models/login_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@ var (
// possible that a Blob may gain an unwanted prefix of 0xff 0xfe.
func jsonUnmarshalIgnoreErroneousBOM(bs []byte, v interface{}) error {
json := jsoniter.ConfigCompatibleWithStandardLibrary
err := json.Unmarshal(bs, &v)
err := json.Unmarshal(bs, v)
if err != nil && len(bs) > 2 && bs[0] == 0xff && bs[1] == 0xfe {
err = json.Unmarshal(bs[2:], &v)
err = json.Unmarshal(bs[2:], v)
}
return err
}
Expand Down
15 changes: 9 additions & 6 deletions modules/markup/html.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"path/filepath"
"regexp"
"strings"
"sync"

"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/emoji"
Expand Down Expand Up @@ -71,9 +72,6 @@ var (
// CSS class for action keywords (e.g. "closes: #1")
const keywordClass = "issue-keyword"

// regexp for full links to issues/pulls
var issueFullPattern *regexp.Regexp

// IsLink reports whether link fits valid format.
func IsLink(link []byte) bool {
return isLink(link)
Expand All @@ -88,12 +86,17 @@ func isLinkStr(link string) bool {
return validLinksPattern.MatchString(link)
}

// FIXME: This function is not concurrent safe
// regexp for full links to issues/pulls
var issueFullPattern *regexp.Regexp

// Once for to prevent races
var issueFullPatternOnce sync.Once

func getIssueFullPattern() *regexp.Regexp {
if issueFullPattern == nil {
issueFullPatternOnce.Do(func() {
issueFullPattern = regexp.MustCompile(regexp.QuoteMeta(setting.AppURL) +
`\w+/\w+/(?:issues|pulls)/((?:\w{1,10}-)?[1-9][0-9]*)([\?|#]\S+.(\S+)?)?\b`)
}
})
return issueFullPattern
}

Expand Down
1 change: 0 additions & 1 deletion modules/markup/renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import (

// Init initialize regexps for markdown parsing
func Init() {
getIssueFullPattern()
NewSanitizer()
if len(setting.Markdown.CustomURLSchemes) > 0 {
CustomLinkURLSchemes(setting.Markdown.CustomURLSchemes)
Expand Down
2 changes: 2 additions & 0 deletions modules/setting/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ var Service = struct {
HcaptchaSitekey string
DefaultKeepEmailPrivate bool
DefaultAllowCreateOrganization bool
DefaultUserIsRestricted bool
EnableTimetracking bool
DefaultEnableTimetracking bool
DefaultEnableDependencies bool
Expand Down Expand Up @@ -134,6 +135,7 @@ func newService() {
Service.HcaptchaSitekey = sec.Key("HCAPTCHA_SITEKEY").MustString("")
Service.DefaultKeepEmailPrivate = sec.Key("DEFAULT_KEEP_EMAIL_PRIVATE").MustBool()
Service.DefaultAllowCreateOrganization = sec.Key("DEFAULT_ALLOW_CREATE_ORGANIZATION").MustBool(true)
Service.DefaultUserIsRestricted = sec.Key("DEFAULT_USER_IS_RESTRICTED").MustBool(false)
Service.EnableTimetracking = sec.Key("ENABLE_TIMETRACKING").MustBool(true)
if Service.EnableTimetracking {
Service.DefaultEnableTimetracking = sec.Key("DEFAULT_ENABLE_TIMETRACKING").MustBool(true)
Expand Down
34 changes: 17 additions & 17 deletions options/locale/locale_pt-PT.ini
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ issue_assigned.issue=@%[1]s atribuiu-lhe a questão %[2]s no repositório %[3]s.

issue.x_mentioned_you=<b>@%s</b> mencionou a si:
issue.action.force_push=<b>%[1]s</b> forçou o envio de <b>%[2]s</b> de %[3]s para %[4]s.
issue.action.push_1=<b>@%[1]s</b> enviou %[3]d cometimento(s) para o ramo %[2]s
issue.action.push_1=<b>@%[1]s</b> enviou %[3]d cometimento para o ramo %[2]s
issue.action.push_n=<b>@%[1]s</b> enviou %[3]d cometimentos para o ramo %[2]s
issue.action.close=<b>@%[1]s</b> fechou #%[2]d.
issue.action.reopen=<b>@%[1]s</b> reabriu #%[2]d.
Expand Down Expand Up @@ -1264,16 +1264,16 @@ issues.unlock=Desbloquear diálogo
issues.lock.unknown_reason=Não é possível bloquear uma questão com um motivo desconhecido.
issues.lock_duplicate=Uma questão não pode ser bloqueada duas vezes.
issues.unlock_error=Não é possível desbloquear uma questão que não está bloqueada.
issues.lock_with_reason=bloqueada como <strong>%s</strong> e o diálogo está limitado aos colaboradores %s
issues.lock_no_reason=bloqueada e o diálogo está limitado aos colaboradores %s
issues.unlock_comment=bloqueou este diálogo %s
issues.lock_with_reason=bloqueou como sendo <strong>%s</strong> e restringiu o diálogo aos colaboradores %s
issues.lock_no_reason=bloqueou e restringiu o diálogo aos colaboradores %s
issues.unlock_comment=desbloqueou este diálogo %s
issues.lock_confirm=Bloquear
issues.unlock_confirm=Desbloquear
issues.lock.notice_1=- Outros utilizadores não podem adicionar novos comentários a esta questão.
issues.lock.notice_2=- Você e outros colaboradores com acesso a este repositório ainda podem deixar comentários que outros possam ver.
issues.lock.notice_3=- Pode sempre voltar a desbloquear esta questão no futuro.
issues.lock.notice_1=- Os outros utilizadores deixarão de poder adicionar novos comentários a esta questão.
issues.lock.notice_2=- Você e outros colaboradores com acesso a este repositório ainda poderão deixar comentários que outros possam ver.
issues.lock.notice_3=- Poderá sempre voltar a desbloquear esta questão no futuro.
issues.unlock.notice_1=- Todos poderão voltar a comentar nesta questão.
issues.unlock.notice_2=- Pode sempre voltar a bloquear esta questão no futuro.
issues.unlock.notice_2=- Poderá sempre voltar a bloquear esta questão no futuro.
issues.lock.reason=Motivo do bloqueio
issues.lock.title=Bloquear diálogo sobre esta questão.
issues.unlock.title=Desbloquear diálogo sobre esta questão.
Expand Down Expand Up @@ -1363,11 +1363,11 @@ issues.review.reviewers=Revisores
issues.review.outdated=Obsoleta
issues.review.show_outdated=Mostrar as obsoletas
issues.review.hide_outdated=Esconder as obsoletas
issues.review.show_resolved=Mostrar resolvidos
issues.review.hide_resolved=Ocultar resolvidos
issues.review.show_resolved=Mostrar os concluídos
issues.review.hide_resolved=Ocultar os concluídos
issues.review.resolve_conversation=Passar diálogo ao estado de resolvido
issues.review.un_resolve_conversation=Passar diálogo ao estado de não resolvido
issues.review.resolved_by=marcou este diálogo como estando resolvido
issues.review.resolved_by=marcou este diálogo como estando concluído
issues.assignee.error=Nem todos os responsáveis foram adicionados devido a um erro inesperado.
issues.reference_issue.body=Conteúdo

Expand Down Expand Up @@ -1581,9 +1581,9 @@ activity.closed_issue_label=Encerrada
activity.new_issues_count_1=questão nova
activity.new_issues_count_n=questões novas
activity.new_issue_label=Em aberto
activity.title.unresolved_conv_1=%d diálogo não resolvido
activity.title.unresolved_conv_n=%d diálogos não resolvidos
activity.unresolved_conv_desc=Estas questões e estes pedidos de integração que foram modificados recentemente ainda não foram resolvidos.
activity.title.unresolved_conv_1=%d diálogo não concluído
activity.title.unresolved_conv_n=%d diálogos não concluídos
activity.unresolved_conv_desc=Estas questões e estes pedidos de integração que foram modificados recentemente ainda não foram concluídos.
activity.unresolved_conv_label=Em aberto
activity.title.releases_1=%d lançamento
activity.title.releases_n=%d Lançamentos
Expand Down Expand Up @@ -1703,8 +1703,8 @@ settings.transfer_abort_success=A transferência de repositório para %s foi can
settings.transfer_desc=Transferir este repositório para um utilizador ou para uma organização na qual você tenha direitos de administrador.
settings.transfer_form_title=Insira o nome do repositório para confirmar:
settings.transfer_in_progress=Está a ser feita uma transferência. Cancele-a, por favor, se quiser transferir este repositório para outro utilizador.
settings.transfer_notices_1=- Você perderá o acesso ao repositório se transferir para um utilizador individual.
settings.transfer_notices_2=- Você manterá o acesso ao repositório se o transferir para uma organização da qual você é (co-)proprietário.
settings.transfer_notices_1=- Você perderá o acesso ao repositório se o transferir para um utilizador individual.
settings.transfer_notices_2=- Você manterá o acesso ao repositório se o transferir para uma organização da qual você é (co-)proprietário(a).
settings.transfer_notices_3=- Se o repositório for privado e for transferido para um utilizador individual, esta operação certifica que o utilizador tem pelo menos a permissão de leitura (e altera as permissões se for necessário).
settings.transfer_owner=Novo proprietário
settings.transfer_perform=Executar transferência
Expand All @@ -1725,7 +1725,7 @@ settings.trust_model.collaboratorcommitter.long=Colaborador + Autor do cometimen
settings.trust_model.collaboratorcommitter.desc=Assinaturas válidas feitas por colaboradores deste repositório serão marcadas como "fiável" se corresponderem ao autor do cometimento. Caso contrário, assinaturas válidas serão marcadas como "não fiável" se a assinatura corresponder ao autor do cometimento e "não corresponde" se não corresponder. Isto irá forçar a que o Gitea seja marcado como sendo o autor do cometimento nos cometimentos assinados, ficando o autor real marcado como Co-Autorado-Por: e Co-Cometido-Por: no resumo do cometimento. A chave padrão do Gitea tem que corresponder a um utilizador na base de dados.
settings.wiki_delete=Eliminar dados do wiki
settings.wiki_delete_desc=Eliminar os dados do repositório do wiki é permanente e não pode ser revertido.
settings.wiki_delete_notices_1=- Isso excluirá e desabilitará permanentemente o repositório do wiki para %s.
settings.wiki_delete_notices_1=- Isso excluirá e desabilitará permanentemente o wiki do repositório para %s.
settings.confirm_wiki_delete=Eliminar dados do wiki
settings.wiki_deletion_success=Os dados do repositório do wiki foram eliminados.
settings.delete=Eliminar este repositório
Expand Down
13 changes: 9 additions & 4 deletions routers/api/v1/repo/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -374,16 +374,21 @@ func Generate(ctx *context.APIContext) {
ctxUser := ctx.User
var err error
if form.Owner != ctxUser.Name {
ctxUser, err = models.GetOrgByName(form.Owner)
ctxUser, err = models.GetUserByName(form.Owner)
if err != nil {
if models.IsErrOrgNotExist(err) {
if models.IsErrUserNotExist(err) {
ctx.JSON(http.StatusNotFound, map[string]interface{}{
"error": "request owner `" + form.Name + "` is not exist",
"error": "request owner `" + form.Owner + "` does not exist",
})
return
}

ctx.Error(http.StatusInternalServerError, "GetOrgByName", err)
ctx.Error(http.StatusInternalServerError, "GetUserByName", err)
return
}

if !ctx.User.IsAdmin && !ctxUser.IsOrganization() {
ctx.Error(http.StatusForbidden, "", "Only admin can generate repository for other user.")
return
}

Expand Down
9 changes: 5 additions & 4 deletions routers/web/user/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -1204,10 +1204,11 @@ func SignUpPost(ctx *context.Context) {
}

u := &models.User{
Name: form.UserName,
Email: form.Email,
Passwd: form.Password,
IsActive: !(setting.Service.RegisterEmailConfirm || setting.Service.RegisterManualConfirm),
Name: form.UserName,
Email: form.Email,
Passwd: form.Password,
IsActive: !(setting.Service.RegisterEmailConfirm || setting.Service.RegisterManualConfirm),
IsRestricted: setting.Service.DefaultUserIsRestricted,
}

if !createAndHandleCreatedUser(ctx, tplSignUp, form, u, nil, false) {
Expand Down

0 comments on commit 06e55f4

Please sign in to comment.