mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-11-24 18:56:11 +01:00
Compare commits
24 commits
0094528a78
...
a290f0b6d9
Author | SHA1 | Date | |
---|---|---|---|
a290f0b6d9 | |||
2a1908f8d9 | |||
990a07ddbc | |||
b1892fe224 | |||
ebdecb7a71 | |||
044f19834f | |||
fadfa8fa28 | |||
edce6107cd | |||
2bce2defb8 | |||
89beddcd99 | |||
659839f0f7 | |||
ac08fc45de | |||
c37922907f | |||
d19ae0b4b9 | |||
693b047deb | |||
7228311e22 | |||
0325a604bc | |||
2f723af051 | |||
e36bba3af7 | |||
095394eb23 | |||
99259029c3 | |||
f1b7486ae6 | |||
7e38bbe42e | |||
2039dab43c |
|
@ -84,3 +84,20 @@ jobs:
|
|||
ref_name: '${{ github.ref_name }}'
|
||||
image: 'codeberg.org/forgejo-experimental/forgejo'
|
||||
tag_suffix: '-rootless'
|
||||
|
||||
- name: set up go for the DNS update below
|
||||
if: vars.ROLE == 'forgejo-experimental' && secrets.OVH_APP_KEY != ''
|
||||
uses: https://code.forgejo.org/actions/setup-go@v5
|
||||
with:
|
||||
go-version-file: "go.mod"
|
||||
- name: update the _release.experimental DNS record
|
||||
if: vars.ROLE == 'forgejo-experimental' && secrets.OVH_APP_KEY != ''
|
||||
uses: https://code.forgejo.org/actions/ovh-dns-update@v1
|
||||
with:
|
||||
subdomain: _release.experimental
|
||||
domain: forgejo.com # there is a CNAME from .org to .com (for security reasons)
|
||||
record-id: 5283602601
|
||||
value: v=${{ github.ref_name }}
|
||||
ovh-app-key: ${{ secrets.OVH_APP_KEY }}
|
||||
ovh-app-secret: ${{ secrets.OVH_APP_SECRET }}
|
||||
ovh-consumer-key: ${{ secrets.OVH_CON_KEY }}
|
||||
|
|
|
@ -139,38 +139,6 @@ func GetPrimaryEmailAddressOfUser(ctx context.Context, uid int64) (*EmailAddress
|
|||
return ea, nil
|
||||
}
|
||||
|
||||
// Deletes the primary email address of the user
|
||||
// This is only allowed if the user is a organization
|
||||
func DeletePrimaryEmailAddressOfUser(ctx context.Context, uid int64) error {
|
||||
user, err := GetUserByID(ctx, uid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if user.Type != UserTypeOrganization {
|
||||
return fmt.Errorf("%s is not a organization", user.Name)
|
||||
}
|
||||
|
||||
ctx, committer, err := db.TxContext(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer committer.Close()
|
||||
|
||||
_, err = db.GetEngine(ctx).Exec("DELETE FROM email_address WHERE uid = ? AND is_primary = true", uid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
user.Email = ""
|
||||
err = UpdateUserCols(ctx, user, "email")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return committer.Commit()
|
||||
}
|
||||
|
||||
// GetEmailAddresses returns all email addresses belongs to given user.
|
||||
func GetEmailAddresses(ctx context.Context, uid int64) ([]*EmailAddress, error) {
|
||||
emails := make([]*EmailAddress, 0, 5)
|
||||
|
|
|
@ -163,21 +163,3 @@ func TestGetActivatedEmailAddresses(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeletePrimaryEmailAddressOfUser(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
|
||||
user, err := user_model.GetUserByName(db.DefaultContext, "org3")
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "org3@example.com", user.Email)
|
||||
|
||||
require.NoError(t, user_model.DeletePrimaryEmailAddressOfUser(db.DefaultContext, user.ID))
|
||||
|
||||
user, err = user_model.GetUserByName(db.DefaultContext, "org3")
|
||||
require.NoError(t, err)
|
||||
assert.Empty(t, user.Email)
|
||||
|
||||
email, err := user_model.GetPrimaryEmailAddressOfUser(db.DefaultContext, user.ID)
|
||||
assert.True(t, user_model.IsErrEmailAddressNotExist(err))
|
||||
assert.Nil(t, email)
|
||||
}
|
||||
|
|
|
@ -47,11 +47,11 @@ type CreateOrgOption struct {
|
|||
|
||||
// EditOrgOption options for editing an organization
|
||||
type EditOrgOption struct {
|
||||
FullName string `json:"full_name" binding:"MaxSize(100)"`
|
||||
Email *string `json:"email" binding:"MaxSize(255)"`
|
||||
Description string `json:"description" binding:"MaxSize(255)"`
|
||||
Website string `json:"website" binding:"ValidUrl;MaxSize(255)"`
|
||||
Location string `json:"location" binding:"MaxSize(50)"`
|
||||
FullName string `json:"full_name" binding:"MaxSize(100)"`
|
||||
Email string `json:"email" binding:"MaxSize(255)"`
|
||||
Description string `json:"description" binding:"MaxSize(255)"`
|
||||
Website string `json:"website" binding:"ValidUrl;MaxSize(255)"`
|
||||
Location string `json:"location" binding:"MaxSize(50)"`
|
||||
// possible values are `public`, `limited` or `private`
|
||||
// enum: ["public", "limited", "private"]
|
||||
Visibility string `json:"visibility" binding:"In(,public,limited,private)"`
|
||||
|
|
|
@ -2126,7 +2126,7 @@ settings.collaboration.undefined=Neurčeno
|
|||
settings.hooks=Webhooky
|
||||
settings.githooks=Git hooky
|
||||
settings.basic_settings=Základní nastavení
|
||||
settings.mirror_settings=Nastavení zrcadel
|
||||
settings.mirror_settings=Nastavení zrcadla
|
||||
settings.mirror_settings.docs=Nastavte repozitář pro automatickou synchronizaci commitů, značek a větví s jiným repozitářem.
|
||||
settings.mirror_settings.docs.disabled_pull_mirror.instructions=Nastavte váš projekt pro automatické nahrávání commitů, značek a větví do jiného repozitáře. Správce webu zakázal zrcadla pro natažení.
|
||||
settings.mirror_settings.docs.disabled_push_mirror.instructions=Nastavte svůj projekt pro automatické natažení commitů, značek a větví z jiného repozitáře.
|
||||
|
|
|
@ -2791,8 +2791,6 @@ settings.transfer.button = Transferir la propiedad
|
|||
settings.transfer.modal.title = Transferir la propiedad
|
||||
settings.enter_repo_name = Introduce el nombre del propietario y del repositorio exactamente como se muestra:
|
||||
settings.confirmation_string = Cadena de confirmación
|
||||
issues.filter_sort.relevance = Relevancia
|
||||
settings.transfer_quota_exceeded = El nuevo propietario (%s) ha sobrepasado la cuota. El repositorio no ha sido transferido.
|
||||
|
||||
[graphs]
|
||||
|
||||
|
|
|
@ -1168,10 +1168,10 @@ file_view_rendered=Skatīt rezultātu
|
|||
file_view_raw=Rādīt neapstrādātu
|
||||
file_permalink=Patstāvīgā saite
|
||||
file_too_large=Šis fails ir par lielu, lai to parādītu.
|
||||
invisible_runes_header=Šī datne satur neredzamas unikoda rakstzīmes
|
||||
invisible_runes_description=`Šī datne satur neredzamas unikoda rakstzīmes, kas ir neatšķiramas cilvēkiem, bet dators tās var apstrādāt atšķirīgi. Ja šķiet, ka tas ir ar nolūku, šo brīdinājumu var droši neņemt vērā. Jāizmanto atsoļa taustiņš (Esc), lai atklātu tās.`
|
||||
ambiguous_runes_header=`Šī datne satur neviennozīmīgas unikoda rakstzīmes`
|
||||
ambiguous_runes_description=`Šī datne satur unikoda rakstzīmes, kas var tikt sajauktas ar citām rakstzīmēm. Ja šķiet, ka tas ir ar nolūku, šo brīdinājumu var droši neņemt vērā. Jāizmanto atsoļa taustiņš (Esc), lai tās atklātu.`
|
||||
invisible_runes_header=`Šīs fails satur neredzamus unikoda simbolus`
|
||||
invisible_runes_description=`Šis fails satur neredzamus unikoda simbolus, kas ir neatšķirami cilvēkiem, bet dators tās var atstrādāt atšķirīgi. Ja šķiet, ka tas ir ar nolūku, šo brīdinājumu var droši neņemt vērā. Jāizmanto atsoļa taustiņš (Esc), lai atklātu tās.`
|
||||
ambiguous_runes_header=`Šis fails satur neviennozīmīgus unikoda simbolus`
|
||||
ambiguous_runes_description=`Šis fails satur unikoda simbolus, kas var tikt sajauktas ar citām rakstzīmēm. Ja šķiet, ka tas ir ar nolūku, šo brīdinājumu var droši neņemt vērā. Jāizmanto atsoļa taustiņš (Esc), lai atklātu tās.`
|
||||
invisible_runes_line=`Šajā rindā ir neredzamas unikoda rakstzīmes`
|
||||
ambiguous_runes_line=`Šajā rindā ir neviennozīmīgas unikoda rakstzīmes`
|
||||
ambiguous_character=`%[1]c [U+%04[1]X] var tikt sajaukts ar %[2]c [U+%04[2]X]`
|
||||
|
@ -1194,7 +1194,7 @@ commit.contained_in=Šī revīzija ir iekļauta:
|
|||
commit.contained_in_default_branch=Šī revīzija ir daļa no noklusētā atzara
|
||||
commit.load_referencing_branches_and_tags=Ielādēt atzarus un tagus, kas atsaucas uz šo revīziju
|
||||
blame=Vainot
|
||||
download_file=Lejupielādēt datni
|
||||
download_file=Lejupielādēt failu
|
||||
normal_view=Parastais skats
|
||||
line=rinda
|
||||
lines=rindas
|
||||
|
@ -1205,16 +1205,16 @@ editor.new_file=Jauna datne
|
|||
editor.upload_file=Augšupielādēt datni
|
||||
editor.edit_file=Labot datni
|
||||
editor.preview_changes=Priekšskatīt izmaiņas
|
||||
editor.cannot_edit_lfs_files=LFS datnes tīmekļa saskarnē nevar labot.
|
||||
editor.cannot_edit_non_text_files=Binārās datnes tīmekļa saskarnē nevar labot.
|
||||
editor.cannot_edit_lfs_files=LFS failus nevar labot no tīmekļa saskarnes.
|
||||
editor.cannot_edit_non_text_files=Nav iespējams labot bināros failus no pārlūka saskarnes.
|
||||
editor.edit_this_file=Labot datni
|
||||
editor.this_file_locked=Datne ir slēgta
|
||||
editor.must_be_on_a_branch=Ir jābūt zarā, lai šajā datnē veiktu vai ierosinātu izmaiņas.
|
||||
editor.fork_before_edit=Jāizveido šīs glabātavas atzarojums, lai šajā datnē veiktu vai ierosinātu izmaiņas.
|
||||
editor.this_file_locked=Fails ir bloķēts
|
||||
editor.must_be_on_a_branch=Ir jābūt izvēlētam atzaram, lai varētu veikt vai piedāvāt izmaiņas šim failam.
|
||||
editor.fork_before_edit=Lai varētu labot failu, ir nepieciešams atdalīt repozitoriju.
|
||||
editor.delete_this_file=Izdzēst datni
|
||||
editor.must_have_write_access=Ir jābūt rakstīšanas piekļuvei, lai šajā datnē veiktu vai ierosinātu izmaiņas.
|
||||
editor.file_delete_success=Datne "%s" tika izdzēsta.
|
||||
editor.name_your_file=Jāpiešķir datnei nosaukums…
|
||||
editor.must_have_write_access=Jums ir jābūt rakstīšanas tiesībām, lai varētu veikt vai piedāvāt izmaiņas šim failam.
|
||||
editor.file_delete_success=Fails "%s" tika izdzēsts.
|
||||
editor.name_your_file=Ievadiet faila nosaukumu…
|
||||
editor.filename_help=Mapi var pievienot, ja ieraksta tās nosaukumu, aiz kura ir slīpsvītra ("/"). Mapi var noņemt ar atpakaļatkāpes taustiņa nospiešanu ievades lauka sākumā.
|
||||
editor.or=vai
|
||||
editor.cancel_lower=Atcelt
|
||||
|
@ -1233,33 +1233,33 @@ editor.signoff_desc=Pievienot revīzijas žurnāla ziņojuma beigās Signed-off-
|
|||
editor.commit_directly_to_this_branch=Apstiprināt revīzijas izmaiņas atzarā <strong class="%[2]s">%[1]s</strong>.
|
||||
editor.create_new_branch=Izveidot <strong>jaunu atzaru</strong> un izmaiņu pieprasījumu šai revīzijai.
|
||||
editor.create_new_branch_np=Izveidot <strong>jaunu atzaru</strong> šai revīzijai.
|
||||
editor.propose_file_change=Ierosināt datnes izmaiņas
|
||||
editor.propose_file_change=Ieteikt faila izmaiņas
|
||||
editor.new_branch_name=Jaunā atzara nosaukums šai revīzijai
|
||||
editor.new_branch_name_desc=Jaunā atzara nosaukums…
|
||||
editor.cancel=Atcelt
|
||||
editor.filename_cannot_be_empty=Datnes nosaukums nevar būt tukšs.
|
||||
editor.filename_is_invalid=Datnes nosaukums "%s" nav derīgs.
|
||||
editor.filename_cannot_be_empty=Faila nosaukums nevar būt tukšs.
|
||||
editor.filename_is_invalid=Faila nosaukums "%s" nav korekts.
|
||||
editor.branch_does_not_exist=Šajā repozitorijā neeksistē atzars "%s".
|
||||
editor.branch_already_exists=Atzars "%s" šajā repozitorijā jau eksistē.
|
||||
editor.directory_is_a_file=Mapes nosaukums "%s" šajā glabātavā jau tiek izmantots kā datnes nosaukums.
|
||||
editor.file_is_a_symlink=`"%s" ir simboliska saite. Simboliskās saites tīmekļa redaktorā nevar labot`
|
||||
editor.filename_is_a_directory=Datnes nosaukums "%s" šajā glabātavā jau tiek izmantos kā mapes nosaukums.
|
||||
editor.file_editing_no_longer_exists=Datne, kas tiek labota ("%s"), šajā glabātavā vairs nepastāv.
|
||||
editor.file_deleting_no_longer_exists=Datne, kas tiek izdzēsta ("%s"), šajā glabātavā vairs nepastāv.
|
||||
editor.directory_is_a_file=Direktorijas nosaukums "%s" vecāka ceļā ir fails nevis direktorija šajā repozitorijā.
|
||||
editor.file_is_a_symlink=Fails "%s" ir norāde, kuru nav iespējams labot no tīmekļa redaktora
|
||||
editor.filename_is_a_directory=Faila nosaukums "%s" sakrīt ar direktorijas nosaukumu šajā repozitorijā.
|
||||
editor.file_editing_no_longer_exists=Fails "%s", ko labojat, vairs neeksistē šajā repozitorijā.
|
||||
editor.file_deleting_no_longer_exists=Fails "%s", ko dzēšat, vairs neeksistē šajā repozitorijā.
|
||||
editor.file_changed_while_editing=Datnes saturs ir mainījies kopš labošanas uzsākšanas. <a target="_blank" rel="noopener noreferrer" href="%s">Klikšķināt šeit</a>, lai apskatītu vai <strong>atkārtoti iesūtītu izmaiņas</strong>, lai tās pārrakstītu.
|
||||
editor.file_already_exists=Datne ar nosaukumu "%s" jau pastāv šajā repozitorijā.
|
||||
editor.commit_empty_file_header=Iesūtīt tukšu datni
|
||||
editor.commit_empty_file_text=Iesūtāmā datne ir tukša. Turpināt?
|
||||
editor.file_already_exists=Fails ar nosaukumu "%s" šajā repozitorijā jau eksistē.
|
||||
editor.commit_empty_file_header=Iesūtīt tukšu failu
|
||||
editor.commit_empty_file_text=Fails, ko vēlaties iesūtīt, ir tukšs. Vai turpināt?
|
||||
editor.no_changes_to_show=Nav izmaiņu, ko rādīt.
|
||||
editor.fail_to_update_file=Neizdevās atjaunināt/izveidot datni "%s".
|
||||
editor.fail_to_update_file=Neizdevās atjaunot/izveidot failu "%s".
|
||||
editor.fail_to_update_file_summary=Kļūdas ziņojums:
|
||||
editor.push_rejected_no_message=Serveris noraidīja izmaiņas bez paziņojuma. Lūgums pārbaudīt Git aizķeres.
|
||||
editor.push_rejected=Serveris noraidīja izmaiņas. Lūgums pārbaudīt Git aizķeres.
|
||||
editor.push_rejected_summary=Pilns noraidīšanas ziņojums:
|
||||
editor.add_subdir=Pievienot direktoriju…
|
||||
editor.unable_to_upload_files=Neizdevās augšupielādēt datnes "%s" šīs kļūdas dēļ: %v
|
||||
editor.upload_file_is_locked=Datni "%s" ir aizslēdza %s.
|
||||
editor.upload_files_to_dir=Augšupielādēt datnes "%s"
|
||||
editor.unable_to_upload_files=Neizdevās augšupielādēt failus uz direktoriju "%s", kļūda: %v
|
||||
editor.upload_file_is_locked=Failu "%s" ir nobloķējis %s.
|
||||
editor.upload_files_to_dir=`Augšupielādēt failus uz direktoriju "%s"`
|
||||
editor.cannot_commit_to_protected_branch=Nav atļauts veikt izmaiņas aizsargātam atzaram "%s".
|
||||
editor.no_commit_to_branch=Nevar apstiprināt revīzijas atzarā:
|
||||
editor.user_no_push_to_branch=Lietotājs nevar iesūtīt izmaiņas šajā atzarā
|
||||
|
@ -1387,7 +1387,7 @@ issues.label_templates.title=Ielādēt iepriekš noteiktu iezīmju kopu
|
|||
issues.label_templates.info=Nav izveidota neviena etiķete. Jūs varat noklikšķināt uz "Jauna etiķete" augstāk, lai to izveidotu vai izmantot zemāk piedāvātās etiķetes:
|
||||
issues.label_templates.helper=Izvēlieties etiķešu kopu
|
||||
issues.label_templates.use=Izmantot etiķešu kopu
|
||||
issues.label_templates.fail_to_load_file=Neizdevās ielādēt iezīmju sagataves datni "%s": %v
|
||||
issues.label_templates.fail_to_load_file=Neizdevās ielādēt etiķetes sagataves failu "%s": %v
|
||||
issues.add_label=pievienoja %s etiķeti %s
|
||||
issues.add_labels=pievienoja %s etiķetes %s
|
||||
issues.remove_label=noņēma %s etiķeti %s
|
||||
|
@ -1691,9 +1691,9 @@ pulls.allow_edits_from_maintainers_err=Atjaunošana neizdevās
|
|||
pulls.compare_changes_desc=Izvēlieties atzaru, kurā sapludināt izmaiņas un atzaru, no kura tās saņemt.
|
||||
pulls.has_viewed_file=Skatīts
|
||||
pulls.has_changed_since_last_review=Mainīts kopš pēdējās recenzijas
|
||||
pulls.viewed_files_label=apskatītas %[1]d no %[2]d datnēm
|
||||
pulls.expand_files=Izvērst visas datnes
|
||||
pulls.collapse_files=Savērst visas datnes
|
||||
pulls.viewed_files_label=%[1]d no %[2]d failiem apskatīts
|
||||
pulls.expand_files=Izvērst visus failus
|
||||
pulls.collapse_files=Savērst visus failus
|
||||
pulls.compare_base=pamata
|
||||
pulls.compare_compare=salīdzināmais
|
||||
pulls.switch_comparison_type=Mainīt salīdzināšanas tipu
|
||||
|
@ -1716,7 +1716,7 @@ pulls.merged_title_desc_few=sapludināja %[1]d revīzijas no <code>%[2]s</code>
|
|||
pulls.change_target_branch_at=`nomainīja mērķa atzaru no <b>%s</b> uz <b>%s</b> %s`
|
||||
pulls.tab_conversation=Saruna
|
||||
pulls.tab_commits=Revīzijas
|
||||
pulls.tab_files=Izmainītās datnes
|
||||
pulls.tab_files=Izmainītie faili
|
||||
pulls.reopen_to_merge=Atkārtoti atveriet izmaiņu pieprasījumu, lai veiktu sapludināšanu.
|
||||
pulls.cant_reopen_deleted_branch=Šo izmaiņu pieprasīju nevar atkāroti atvērt, jo atzars ir izdzēsts.
|
||||
pulls.merged=Sapludināts
|
||||
|
@ -1742,13 +1742,13 @@ pulls.blocked_by_approvals=Šim izmaiņu pieprasījumam vēl nav pietiekami daud
|
|||
pulls.blocked_by_rejection=Šim izmaiņu pieprasījumam oficiālais recenzents ir pieprasījis labojumus.
|
||||
pulls.blocked_by_official_review_requests=Šim izmaiņu pieprasījumam ir oficiāli recenzijas pieprasījumi.
|
||||
pulls.blocked_by_outdated_branch=Šis izmaiņu pieprasījums ir bloķēts, jo tas ir novecojis.
|
||||
pulls.blocked_by_changed_protected_files_1=Šis izmaiņu pieprasījums ir aizturēts, jo tas izmaina aizsargātu datni:
|
||||
pulls.blocked_by_changed_protected_files_n=Šis izmaiņu pieprasījums ir aizturēts, jo tas izmaina aizsargātas datnes:
|
||||
pulls.blocked_by_changed_protected_files_1=Šis izmaiņu pieprasījums ir bloķēts, jo tas izmaina aizsargāto failu:
|
||||
pulls.blocked_by_changed_protected_files_n=Šis izmaiņu pieprasījums ir bloķēts, jo tas izmaina aizsargātos failus:
|
||||
pulls.can_auto_merge_desc=Šo izmaiņu pieprasījumu var automātiski sapludināt.
|
||||
pulls.cannot_auto_merge_desc=Šis izmaiņu pieprasījums nevar tikt automātiski sapludināts konfliktu dēļ.
|
||||
pulls.cannot_auto_merge_helper=Sapludiniet manuāli, lai atrisinātu konfliktus.
|
||||
pulls.num_conflicting_files_1=%d nesaderīga datne
|
||||
pulls.num_conflicting_files_n=%d nesaderīgas datnes
|
||||
pulls.num_conflicting_files_1=%d fails ar konfliktiem
|
||||
pulls.num_conflicting_files_n=%d faili ar konfliktiem
|
||||
pulls.approve_count_1=%d apstiprinājums
|
||||
pulls.approve_count_n=%d apstiprinājumi
|
||||
pulls.reject_count_1=%d izmaiņu pieprasījums
|
||||
|
@ -1899,7 +1899,7 @@ wiki.reserved_page=Vikivietnes lapas nosaukums "%s" ir rezervēts.
|
|||
wiki.pages=Lapas
|
||||
wiki.last_updated=Pēdējo reizi labota %s
|
||||
wiki.page_name_desc=Ievadiet vikivietnes lapas nosaukumu. Speciālie nosaukumi ir: 'Home', '_Sidebar' un '_Footer'.
|
||||
wiki.original_git_entry_tooltip=Rādīt sākotnējo Git datni, nevis izmantot draudzīgo saiti.
|
||||
wiki.original_git_entry_tooltip=Attēlot oriģinālo Git faila nosaukumu.
|
||||
|
||||
activity=Aktivitāte
|
||||
activity.period.filter_label=Laika periods:
|
||||
|
@ -1956,8 +1956,8 @@ activity.git_stats_commit_n=%d revīzijas
|
|||
activity.git_stats_push_to_branch=atzarā %s un
|
||||
activity.git_stats_push_to_all_branches=visos atzaros.
|
||||
activity.git_stats_on_default_branch=Atzarā %s,
|
||||
activity.git_stats_file_1=%d datne
|
||||
activity.git_stats_file_n=%d datnes
|
||||
activity.git_stats_file_1=%d fails
|
||||
activity.git_stats_file_n=%d faili
|
||||
activity.git_stats_files_changed_1=tika izmainīts
|
||||
activity.git_stats_files_changed_n=tika izmainīti
|
||||
activity.git_stats_additions=un tika veiktas
|
||||
|
@ -2321,7 +2321,7 @@ settings.require_signed_commits_desc=Noraidīt iesūtītās izmaiņas šim atzar
|
|||
settings.protect_branch_name_pattern=Aizsargātā zara šablons
|
||||
settings.protect_branch_name_pattern_desc=Aizsargāto atzaru nosaukumu šabloni. Šablonu pierakstu skatīt <a href="%s">dokumentācijā</a>. Piemēri: main, release/**
|
||||
settings.protect_patterns=Šabloni
|
||||
settings.protect_protected_file_patterns=Aizsargāto datņu paraugs (vairākus atdala ar semikolu ";")
|
||||
settings.protect_protected_file_patterns=Aizsargāto failu šablons (vairākus var norādīt atdalot ar semikolu ';'):
|
||||
settings.protect_protected_file_patterns_desc=Aizsargātie faili, ko nevar mainīt, pat ja lietotājam ir tiesības veidot jaunus, labot vai dzēst failus šajā atzarā. Vairākus šablons ir iespējams norādīt atdalot tos ar semikolu (';'). Sīkāka informācija par šabloniem pieejama <a href='%s'>%s</a> dokumentācijā. Piemēram, <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
|
||||
settings.protect_unprotected_file_patterns=Neaizsargāto failu šablons (vairākus var norādīt atdalot ar semikolu ';'):
|
||||
settings.protect_unprotected_file_patterns_desc=Neaizsargātie faili, ko iespējams mainīt apejot iesūtīšanas ierobežojumus, ja lietotājam ir tiesības iesūtīt izmaiņas šajā atzarā. Vairākus šablons ir iespējams norādīt atdalot tos ar semikolu (';'). Sīkāka informācija par šabloniem pieejama <a href='%[1]s'>%[2]s</a> dokumentācijā. Piemēram, <code>.drone.yml</code>, <code>/docs/**/*.txt</code>.
|
||||
|
|
|
@ -15,7 +15,6 @@ import (
|
|||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/optional"
|
||||
api "code.gitea.io/gitea/modules/structs"
|
||||
"code.gitea.io/gitea/modules/validation"
|
||||
"code.gitea.io/gitea/modules/web"
|
||||
"code.gitea.io/gitea/routers/api/v1/user"
|
||||
"code.gitea.io/gitea/routers/api/v1/utils"
|
||||
|
@ -341,28 +340,13 @@ func Edit(ctx *context.APIContext) {
|
|||
// "$ref": "#/responses/Organization"
|
||||
// "404":
|
||||
// "$ref": "#/responses/notFound"
|
||||
// "422":
|
||||
// "$ref": "#/responses/error"
|
||||
|
||||
form := web.GetForm(ctx).(*api.EditOrgOption)
|
||||
|
||||
if form.Email != nil {
|
||||
if *form.Email == "" {
|
||||
err := user_model.DeletePrimaryEmailAddressOfUser(ctx, ctx.Org.Organization.ID)
|
||||
if err != nil {
|
||||
ctx.Error(http.StatusInternalServerError, "DeletePrimaryEmailAddressOfUser", err)
|
||||
return
|
||||
}
|
||||
ctx.Org.Organization.Email = ""
|
||||
} else {
|
||||
if err := user_service.ReplacePrimaryEmailAddress(ctx, ctx.Org.Organization.AsUser(), *form.Email); err != nil {
|
||||
if validation.IsErrEmailInvalid(err) || validation.IsErrEmailCharIsNotSupported(err) {
|
||||
ctx.Error(http.StatusUnprocessableEntity, "ReplacePrimaryEmailAddress", err)
|
||||
} else {
|
||||
ctx.Error(http.StatusInternalServerError, "ReplacePrimaryEmailAddress", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
if form.Email != "" {
|
||||
if err := user_service.ReplacePrimaryEmailAddress(ctx, ctx.Org.Organization.AsUser(), form.Email); err != nil {
|
||||
ctx.Error(http.StatusInternalServerError, "ReplacePrimaryEmailAddress", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -93,13 +93,7 @@ func SettingsPost(ctx *context.Context) {
|
|||
ctx.Org.OrgLink = setting.AppSubURL + "/org/" + url.PathEscape(org.Name)
|
||||
}
|
||||
|
||||
if form.Email == "" {
|
||||
err := user_model.DeletePrimaryEmailAddressOfUser(ctx, org.ID)
|
||||
if err != nil {
|
||||
ctx.ServerError("DeletePrimaryEmailAddressOfUser", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if form.Email != "" {
|
||||
if err := user_service.ReplacePrimaryEmailAddress(ctx, org.AsUser(), form.Email); err != nil {
|
||||
ctx.Data["Err_Email"] = true
|
||||
ctx.RenderWithErr(ctx.Tr("form.email_invalid"), tplSettingsOptions, &form)
|
||||
|
|
3
templates/swagger/v1_json.tmpl
generated
3
templates/swagger/v1_json.tmpl
generated
|
@ -2263,9 +2263,6 @@
|
|||
},
|
||||
"404": {
|
||||
"$ref": "#/responses/notFound"
|
||||
},
|
||||
"422": {
|
||||
"$ref": "#/responses/error"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -218,57 +218,3 @@ func TestAPIOrgSearchEmptyTeam(t *testing.T) {
|
|||
assert.EqualValues(t, "Empty", data.Data[0].Name)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAPIOrgChangeEmail(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
|
||||
session := loginUser(t, "user1")
|
||||
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteOrganization)
|
||||
|
||||
t.Run("Invalid", func(t *testing.T) {
|
||||
newMail := "invalid"
|
||||
settings := api.EditOrgOption{Email: &newMail}
|
||||
|
||||
resp := MakeRequest(t, NewRequestWithJSON(t, "PATCH", "/api/v1/orgs/org3", &settings).AddTokenAuth(token), http.StatusUnprocessableEntity)
|
||||
|
||||
var org *api.Organization
|
||||
DecodeJSON(t, resp, &org)
|
||||
|
||||
assert.Empty(t, org.Email)
|
||||
})
|
||||
|
||||
t.Run("Valid", func(t *testing.T) {
|
||||
newMail := "example@example.com"
|
||||
settings := api.EditOrgOption{Email: &newMail}
|
||||
|
||||
resp := MakeRequest(t, NewRequestWithJSON(t, "PATCH", "/api/v1/orgs/org3", &settings).AddTokenAuth(token), http.StatusOK)
|
||||
|
||||
var org *api.Organization
|
||||
DecodeJSON(t, resp, &org)
|
||||
|
||||
assert.Equal(t, "example@example.com", org.Email)
|
||||
})
|
||||
|
||||
t.Run("NoChange", func(t *testing.T) {
|
||||
settings := api.EditOrgOption{}
|
||||
|
||||
resp := MakeRequest(t, NewRequestWithJSON(t, "PATCH", "/api/v1/orgs/org3", &settings).AddTokenAuth(token), http.StatusOK)
|
||||
|
||||
var org *api.Organization
|
||||
DecodeJSON(t, resp, &org)
|
||||
|
||||
assert.Equal(t, "example@example.com", org.Email)
|
||||
})
|
||||
|
||||
t.Run("Empty", func(t *testing.T) {
|
||||
newMail := ""
|
||||
settings := api.EditOrgOption{Email: &newMail}
|
||||
|
||||
resp := MakeRequest(t, NewRequestWithJSON(t, "PATCH", "/api/v1/orgs/org3", &settings).AddTokenAuth(token), http.StatusOK)
|
||||
|
||||
var org *api.Organization
|
||||
DecodeJSON(t, resp, &org)
|
||||
|
||||
assert.Empty(t, org.Email)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,89 +0,0 @@
|
|||
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package integration
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
auth_model "code.gitea.io/gitea/models/auth"
|
||||
api "code.gitea.io/gitea/modules/structs"
|
||||
"code.gitea.io/gitea/tests"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func getOrgSettingsFormData(t *testing.T, session *TestSession, orgName string) map[string]string {
|
||||
return map[string]string{
|
||||
"_csrf": GetCSRF(t, session, fmt.Sprintf("/org/%s/settings", orgName)),
|
||||
"name": orgName,
|
||||
"full_name": "",
|
||||
"email": "",
|
||||
"description": "",
|
||||
"website": "",
|
||||
"location": "",
|
||||
"visibility": "0",
|
||||
"repo_admin_change_team_access": "on",
|
||||
"max_repo_creation": "-1",
|
||||
}
|
||||
}
|
||||
|
||||
func getOrgSettings(t *testing.T, token, orgName string) *api.Organization {
|
||||
t.Helper()
|
||||
|
||||
req := NewRequestf(t, "GET", "/api/v1/orgs/%s", orgName).AddTokenAuth(token)
|
||||
resp := MakeRequest(t, req, http.StatusOK)
|
||||
|
||||
var org *api.Organization
|
||||
DecodeJSON(t, resp, &org)
|
||||
|
||||
return org
|
||||
}
|
||||
|
||||
func TestOrgSettingsChangeEmail(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
|
||||
const orgName = "org3"
|
||||
settingsURL := fmt.Sprintf("/org/%s/settings", orgName)
|
||||
|
||||
session := loginUser(t, "user1")
|
||||
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadOrganization)
|
||||
|
||||
t.Run("Invalid", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
settings := getOrgSettingsFormData(t, session, orgName)
|
||||
|
||||
settings["email"] = "invalid"
|
||||
session.MakeRequest(t, NewRequestWithValues(t, "POST", settingsURL, settings), http.StatusOK)
|
||||
|
||||
org := getOrgSettings(t, token, orgName)
|
||||
assert.Equal(t, "org3@example.com", org.Email)
|
||||
})
|
||||
|
||||
t.Run("Valid", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
settings := getOrgSettingsFormData(t, session, orgName)
|
||||
|
||||
settings["email"] = "example@example.com"
|
||||
session.MakeRequest(t, NewRequestWithValues(t, "POST", settingsURL, settings), http.StatusSeeOther)
|
||||
|
||||
org := getOrgSettings(t, token, orgName)
|
||||
assert.Equal(t, "example@example.com", org.Email)
|
||||
})
|
||||
|
||||
t.Run("Empty", func(t *testing.T) {
|
||||
defer tests.PrintCurrentTest(t)()
|
||||
|
||||
settings := getOrgSettingsFormData(t, session, orgName)
|
||||
|
||||
settings["email"] = ""
|
||||
session.MakeRequest(t, NewRequestWithValues(t, "POST", settingsURL, settings), http.StatusSeeOther)
|
||||
|
||||
org := getOrgSettings(t, token, orgName)
|
||||
assert.Empty(t, org.Email)
|
||||
})
|
||||
}
|
Loading…
Reference in a new issue