Merge branch 'lowerMemRequirement' of https://github.com/ente-io/auth into lowerMemRequirement
This commit is contained in:
@@ -257,6 +257,9 @@
|
||||
"Crypto com"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "CSAM"
|
||||
},
|
||||
{
|
||||
"title": "CSFloat"
|
||||
},
|
||||
@@ -342,8 +345,7 @@
|
||||
"title": "Estateguru"
|
||||
},
|
||||
{
|
||||
"title": "Fastmail",
|
||||
"hex": "0067B9"
|
||||
"title": "Fastmail"
|
||||
},
|
||||
{
|
||||
"title": "Fidelity",
|
||||
@@ -834,6 +836,9 @@
|
||||
"Registro.br"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "reMarkable"
|
||||
},
|
||||
{
|
||||
"title": "Restorecord"
|
||||
},
|
||||
|
||||
4
auth/assets/custom-icons/icons/csam.svg
Normal file
4
auth/assets/custom-icons/icons/csam.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024">
|
||||
<circle cx="512" cy="512" r="512" fill="#9a2857"/>
|
||||
<path d="M727 278.6q-99 37.09-197.74 74.76a27.83 27.83 0 0 1-20.85.41q-102.54-36.2-205.09-72.35c-4.45-1.57-9-2.82-14.22-4.56v469.89c3.42-1.16 5.67-1.83 7.84-2.7 69-28.07 138.13-55.9 206.95-84.41a34.06 34.06 0 0 1 29.52.36c66.62 29.54 133.53 58.41 201.5 88V276c-3.35 1.09-5.67 1.74-7.91 2.6Zm-208 339-.57-225.6c18.21-6.66 36.44-13.21 54.6-20 42.69-15.8 85.34-31.83 129.09-48.23v373.44C640.57 671 579.79 644.3 519 617.63Zm162.1-107a14 14 0 0 1-12.86 13.31 14.34 14.34 0 0 1-13.66-12.66c-.32-5.93 6.92-13.46 13-13.53a14.58 14.58 0 0 1 13.51 12.88Z" fill="#fff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 683 B |
3
auth/assets/custom-icons/icons/remarkable.svg
Normal file
3
auth/assets/custom-icons/icons/remarkable.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 960">
|
||||
<path fill="#000000" d="M494.86,409.59l-37.52-83.51h-35.35v1.44c2.89,2.52,4.69,9.56,4.69,17.31v80.63c0,12.8-1.62,19.12-4.33,21.83v1.44h20.56s0-1.44,0-1.44c-2.71-2.71-5.41-7.22-5.41-21.83v-80.99s46.18,104.26,46.18,104.26h5.23l46.19-104.61v84.05c0,10.1-1.62,16.42-4.33,19.12v1.44h34.81s0-1.44,0-1.44c-2.71-2.71-4.33-9.01-4.33-19.12v-83.34c0-7.76,1.81-14.79,4.69-17.31v-1.44h-34.09l-36.98,83.51h0ZM378.21,373.87v-20.2h-.73l-31.03,11.19v1.27c3.79,3.25,6.49,10.28,6.49,20.92v41.12c0,10.1-1.62,16.42-4.33,19.12v1.44h35.71s0-1.44,0-1.44c-3.06-2.35-6.14-6.68-6.14-19.12v-47.98c3.79-3.6,9.56-5.6,16.96-5.6,6.14,0,11.9,1.08,16.23,3.25h1.44s0-22.54,0-22.54c-1.62-.36-3.97-.54-6.49-.54-12.44,0-22.37,8.66-28.14,19.12h.01Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 784 B |
@@ -88,6 +88,8 @@
|
||||
"useRecoveryKey": "Utilizza un codice di recupero",
|
||||
"incorrectPasswordTitle": "Password sbagliata",
|
||||
"welcomeBack": "Bentornato!",
|
||||
"emailAlreadyRegistered": "Email già registrata.",
|
||||
"emailNotRegistered": "Email non registrata.",
|
||||
"madeWithLoveAtPrefix": "realizzato con ❤️ a ",
|
||||
"supportDevs": "Iscriviti a <bold-green>ente</bold-green> per supportare questo progetto.",
|
||||
"supportDiscount": "Utilizzare il codice coupon \"AUTH\" per ottenere il 10% di sconto al primo anno",
|
||||
|
||||
@@ -88,6 +88,8 @@
|
||||
"useRecoveryKey": "Herstelsleutel gebruiken",
|
||||
"incorrectPasswordTitle": "Onjuist wachtwoord",
|
||||
"welcomeBack": "Welkom terug!",
|
||||
"emailAlreadyRegistered": "E-mail is al geregistreerd.",
|
||||
"emailNotRegistered": "E-mail niet geregistreerd.",
|
||||
"madeWithLoveAtPrefix": "met ❤️ gemaakt door",
|
||||
"supportDevs": "Abonneer u op <bold-green>ente</bold-green> om ons te steunen",
|
||||
"supportDiscount": "Gebruik couponcode \"AUTH\" om het eerste jaar 10% korting te krijgen",
|
||||
|
||||
@@ -88,6 +88,8 @@
|
||||
"useRecoveryKey": "Använd återställningsnyckel",
|
||||
"incorrectPasswordTitle": "Felaktigt lösenord",
|
||||
"welcomeBack": "Välkommen tillbaka!",
|
||||
"emailAlreadyRegistered": "E-postadress redan registrerad.",
|
||||
"emailNotRegistered": "E-postadress ej registrerad.",
|
||||
"madeWithLoveAtPrefix": "gjord med ❤️ av ",
|
||||
"supportDevs": "Prenumerera på <bold-green>ente</bold-green> för att stödja oss",
|
||||
"supportDiscount": "Använd kupongkoden \"AUTH\" för att få 10% rabatt första året",
|
||||
@@ -321,7 +323,11 @@
|
||||
"terminate": "Avsluta",
|
||||
"thisDevice": "Den här enheten",
|
||||
"thisEmailIsAlreadyInUse": "Denna e-postadress används redan",
|
||||
"verificationFailedPleaseTryAgain": "Verifiering misslyckades, vänligen försök igen",
|
||||
"yourVerificationCodeHasExpired": "Din verifieringskod har upphört att gälla",
|
||||
"incorrectCode": "Felaktig kod",
|
||||
"sorryTheCodeYouveEnteredIsIncorrect": "Tyvärr, den kod som du har angett är felaktig",
|
||||
"authenticationFailedPleaseTryAgain": "Autentisering misslyckades, vänligen försök igen",
|
||||
"authenticationSuccessful": "Autentisering lyckades!",
|
||||
"twofactorAuthenticationSuccessfullyReset": "Tvåfaktorsautentisering återställd",
|
||||
"incorrectRecoveryKey": "Felaktig återställningsnyckel",
|
||||
|
||||
@@ -65,7 +65,7 @@ type AlbumFileEntry struct {
|
||||
func SortAlbumFileEntry(entries []*AlbumFileEntry) {
|
||||
sort.Slice(entries, func(i, j int) bool {
|
||||
if entries[i].IsDeleted != entries[j].IsDeleted {
|
||||
return !entries[i].IsDeleted && entries[j].IsDeleted
|
||||
return entries[i].IsDeleted && !entries[j].IsDeleted
|
||||
}
|
||||
return entries[i].AlbumID < entries[j].AlbumID
|
||||
})
|
||||
|
||||
36
mobile/fastlane/metadata/android/ro/full_description.txt
Normal file
36
mobile/fastlane/metadata/android/ro/full_description.txt
Normal file
@@ -0,0 +1,36 @@
|
||||
ente este o aplicație simplă pentru a face copii de rezervă și a partaja fotografiile și videoclipurile.
|
||||
|
||||
Dacă ați căutat o alternativă la Google Photos care să respecte confidențialitatea, ați ajuns la locul potrivit. Cu ente, acestea sunt stocate criptat integral (e2ee). Asta înseamnă că numai dvs. le puteți vedea.
|
||||
|
||||
Avem aplicații open-source pentru Android, iOS, web și desktop, iar fotografiile dvs. se vor sincroniza perfect între toate acestea într-o manieră criptată integral (e2ee).
|
||||
|
||||
De asemenea, ente simplifică partajarea albumelor dvs. cu cei dragi, chiar dacă aceștia nu folosesc ente. Puteți partaja linkuri vizibile public, unde aceștia pot vizualiza albumul dvs. și pot colabora prin adăugarea de fotografii la acesta, chiar și fără un cont sau o aplicație.
|
||||
|
||||
Datele dvs. criptate sunt copiate în 3 locații diferite, inclusiv într-un adăpost antiatomic din Paris. Luăm posteritatea în serios și vă asigurăm că amintirile dvs. vor ajunge la următoarea generație.
|
||||
|
||||
Suntem aici pentru a crea cea mai sigură aplicație de fotografii, veniți alături de noi!
|
||||
|
||||
CARACTERISTICI
|
||||
- Copii de rezervă în calitate originală, deoarece fiecare pixel contează
|
||||
- Planuri de familie, astfel încât să puteți distribui spațiul cu familia dvs.
|
||||
- Albume colaborative, astfel încât să puteți pune în comun fotografii după o excursie
|
||||
- Dosare distribuite, în cazul în care doriți ca partenerul dvs. să se bucure și de fotografiile dvs.
|
||||
- Linkuri pentru albume care pot fi protejate cu o parolă
|
||||
- Abilitatea de a elibera spațiu, prin eliminarea fișierelor care au fost salvate în siguranță
|
||||
- Asistență umană, pentru că meritați
|
||||
- Descrieri, astfel încât să vă puteți subtitra amintirile și să le găsiți cu ușurință
|
||||
- Editor de imagini, pentru a adăuga ultimele retușuri
|
||||
- Evidențiați, ascundeți și retrăiți-vă amintirile, căci sunt prețioase
|
||||
- Import cu o singură apăsare din Google, Apple, hard disk și multe altele
|
||||
- Temă întunecată, deoarece fotografiile dvs. arată bine și cu ea
|
||||
- 2FA, 3FA, autentificare biometrică
|
||||
- și MULTE altele!
|
||||
|
||||
PERMISIUNI
|
||||
ente solicită anumite permisiuni pentru a servi scopului unui furnizor de stocare a fotografiilor, care poate fi revizuit aici: https://github.com/ente-io/ente/blob/f-droid/mobile/android/permissions.md
|
||||
|
||||
PREȚURI
|
||||
Nu oferim planuri gratuite pentru totdeauna, deoarece este important pentru noi să rămânem sustenabili și să trecem testul timpului. În schimb, oferim planuri accesibile pe care le puteți distribui liber familiei dvs. Puteți afla mai multe la ente.io.
|
||||
|
||||
ASISTENȚĂ
|
||||
Suntem mândri să oferim asistență umană. Dacă sunteți clientul nostru plătit, vă puteți adresa la team@ente.io și așteptați un răspuns din partea echipei noastre în termen de 24 de ore.
|
||||
@@ -0,0 +1 @@
|
||||
ente este o aplicație de stocare foto criptată integral
|
||||
1
mobile/fastlane/metadata/android/ro/title.txt
Normal file
1
mobile/fastlane/metadata/android/ro/title.txt
Normal file
@@ -0,0 +1 @@
|
||||
ente - stocare foto criptată
|
||||
33
mobile/fastlane/metadata/ios/ro/description.txt
Normal file
33
mobile/fastlane/metadata/ios/ro/description.txt
Normal file
@@ -0,0 +1,33 @@
|
||||
Ente este o aplicație simplă pentru a face automat copii de rezervă și a vă organiza fotografiile și videoclipurile.
|
||||
|
||||
Dacă erați în căutarea unei alternative care să respecte confidențialitatea pentru a vă păstra amintirile, ați ajuns la locul potrivit. Cu Ente, acestea sunt stocate criptate integral (e2ee). Asta înseamnă că numai dvs. le puteți vedea.
|
||||
|
||||
Avem aplicații pentru toate platformele, iar fotografiile dvs. se vor sincroniza perfect între toate dispozitivele dvs. într-un mod criptat integral (e2ee).
|
||||
|
||||
De asemenea, Ente simplifică distribuirea albumelor dvs. cu cei dragi. Puteți fie să le distribuiți direct altor utilizatori Ente, criptate integral, fie cu linkuri care pot fi vizualizate public.
|
||||
|
||||
Datele dvs. criptate sunt stocate în mai multe locații, inclusiv într-un adăpost antiatomic din Paris. Luăm posteritatea în serios și vă asigurăm că amintirile dvs. vor ajunge la următoarea generație.
|
||||
|
||||
Suntem aici pentru a crea cea mai sigură aplicație de fotografii, veniți alături de noi!
|
||||
|
||||
CARACTERISTICI
|
||||
- Copii de rezervă în calitate originală, deoarece fiecare pixel contează
|
||||
- Planuri de familie, astfel încât să puteți distribui spațiul cu familia dvs.
|
||||
- Dosare distribuite, în cazul în care doriți ca partenerul dvs. să se bucure și de fotografiile dvs.
|
||||
- Linkuri pentru albume, care pot fi protejate cu o parolă și setate să expire
|
||||
- Abilitatea de a elibera spațiu, prin eliminarea fișierelor care au fost salvate în siguranță
|
||||
- Editor de imagini, pentru a adăuga ultimele retușuri
|
||||
- Evidențiați, ascundeți și retrăiți-vă amintirile, căci sunt prețioase
|
||||
- Import cu un singur clic de la toți furnizorii majori de stocare
|
||||
- Temă întunecată, deoarece fotografiile dvs. arată bine și cu ea
|
||||
- 2FA, 3FA, autentificare biometrică
|
||||
- și MULTE altele!
|
||||
|
||||
PREȚURI
|
||||
Nu oferim planuri gratuite pentru totdeauna, deoarece este important pentru noi să rămânem sustenabili și să trecem testul timpului. În schimb, oferim planuri accesibile pe care le puteți distribui liber familiei dvs. Puteți afla mai multe la ente.io.
|
||||
|
||||
ASISTENȚĂ
|
||||
Suntem mândri să oferim asistență umană. Dacă sunteți clientul nostru plătit, vă puteți adresa la team@ente.io și așteptați un răspuns din partea echipei noastre în termen de 24 de ore.
|
||||
|
||||
TERMENI
|
||||
https://ente.io/terms
|
||||
1
mobile/fastlane/metadata/ios/ro/keywords.txt
Normal file
1
mobile/fastlane/metadata/ios/ro/keywords.txt
Normal file
@@ -0,0 +1 @@
|
||||
fotografii,fotografie,familie,intimitate,cloud,backup,video,foto,criptare,stocare,album,alternative
|
||||
1
mobile/fastlane/metadata/ios/ro/name.txt
Normal file
1
mobile/fastlane/metadata/ios/ro/name.txt
Normal file
@@ -0,0 +1 @@
|
||||
Ente Foto
|
||||
1
mobile/fastlane/metadata/ios/ro/subtitle.txt
Normal file
1
mobile/fastlane/metadata/ios/ro/subtitle.txt
Normal file
@@ -0,0 +1 @@
|
||||
Stocare foto criptată
|
||||
@@ -2,6 +2,8 @@
|
||||
"@@locale ": "en",
|
||||
"enterYourEmailAddress": "Voer uw e-mailadres in",
|
||||
"accountWelcomeBack": "Welkom terug!",
|
||||
"emailAlreadyRegistered": "E-mail is al geregistreerd.",
|
||||
"emailNotRegistered": "E-mail niet geregistreerd.",
|
||||
"email": "E-mail",
|
||||
"cancel": "Annuleer",
|
||||
"verify": "Verifiëren",
|
||||
@@ -185,6 +187,8 @@
|
||||
},
|
||||
"allowAddPhotosDescription": "Sta toe dat mensen met de link ook foto's kunnen toevoegen aan het gedeelde album.",
|
||||
"passwordLock": "Wachtwoord slot",
|
||||
"canNotOpenTitle": "Kan dit album niet openen",
|
||||
"canNotOpenBody": "Sorry, dit album kan niet worden geopend in de app.",
|
||||
"disableDownloadWarningTitle": "Let op",
|
||||
"disableDownloadWarningBody": "Kijkers kunnen nog steeds screenshots maken of een kopie van je foto's opslaan met behulp van externe tools",
|
||||
"allowDownloads": "Downloads toestaan",
|
||||
@@ -1378,6 +1382,7 @@
|
||||
"extraPhotosFound": "Extra foto's gevonden",
|
||||
"configuration": "Configuratie",
|
||||
"localIndexing": "Lokaal indexeren",
|
||||
"processed": "Verwerkt",
|
||||
"resetPerson": "Verwijderen",
|
||||
"areYouSureYouWantToResetThisPerson": "Weet u zeker dat u deze persoon wilt resetten?",
|
||||
"allPersonGroupingWillReset": "Alle groepen voor deze persoon worden gereset, en je verliest alle suggesties die voor deze persoon zijn gedaan",
|
||||
@@ -1578,5 +1583,11 @@
|
||||
},
|
||||
"legacyInvite": "{email} heeft je uitgenodigd om een vertrouwd contact te zijn",
|
||||
"authToManageLegacy": "Verifieer om je vertrouwde contacten te beheren",
|
||||
"useDifferentPlayerInfo": "Problemen met het afspelen van deze video? Hier ingedrukt houden om een andere speler te proberen."
|
||||
"useDifferentPlayerInfo": "Problemen met het afspelen van deze video? Hier ingedrukt houden om een andere speler te proberen.",
|
||||
"hideSharedItemsFromHomeGallery": "Verberg gedeelde bestanden uit de galerij",
|
||||
"gallery": "Galerij",
|
||||
"joinAlbum": "Deelnemen aan album",
|
||||
"joinAlbumSubtext": "om je foto's te bekijken en toe te voegen",
|
||||
"joinAlbumSubtextViewer": "om dit aan gedeelde albums toe te voegen",
|
||||
"join": "Deelnemen"
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
"@@locale ": "en",
|
||||
"enterYourEmailAddress": "Introduceți adresa de e-mail",
|
||||
"accountWelcomeBack": "Bine ați revenit!",
|
||||
"emailAlreadyRegistered": "E-mail deja înregistrat.",
|
||||
"emailNotRegistered": "E-mailul nu este înregistrat.",
|
||||
"email": "E-mail",
|
||||
"cancel": "Anulare",
|
||||
"verify": "Verificare",
|
||||
@@ -185,6 +187,8 @@
|
||||
},
|
||||
"allowAddPhotosDescription": "Permiteți persoanelor care au linkul să adauge și fotografii la albumul distribuit.",
|
||||
"passwordLock": "Blocare cu parolă",
|
||||
"canNotOpenTitle": "Nu se poate deschide acest album",
|
||||
"canNotOpenBody": "Ne pare rău, acest album nu poate fi deschis în aplicație.",
|
||||
"disableDownloadWarningTitle": "Rețineți",
|
||||
"disableDownloadWarningBody": "Observatorii pot să facă capturi de ecran sau să salveze o copie a fotografiilor dvs. folosind instrumente externe",
|
||||
"allowDownloads": "Permiteți descărcările",
|
||||
@@ -351,6 +355,7 @@
|
||||
"failedToLoadAlbums": "Încărcarea albumelor nu a reușit",
|
||||
"hidden": "Ascunse",
|
||||
"authToViewYourHiddenFiles": "Vă rugăm să vă autentificați pentru a vedea fișierele ascunse",
|
||||
"authToViewTrashedFiles": "Vă rugăm să vă autentificați pentru a vedea fișierele din coșul de gunoi",
|
||||
"trash": "Coș de gunoi",
|
||||
"uncategorized": "Necategorisite",
|
||||
"videoSmallCase": "videoclip",
|
||||
@@ -412,6 +417,7 @@
|
||||
"description": "The text to display in the advanced settings section"
|
||||
},
|
||||
"photoGridSize": "Dimensiunea grilei foto",
|
||||
"manageDeviceStorage": "Gestionați memoria cache a dispozitivului",
|
||||
"manageDeviceStorageDesc": "Revizuiți și ștergeți spațiul din memoria cache locală.",
|
||||
"machineLearning": "Învățare automată",
|
||||
"mlConsent": "Activați învățarea automată",
|
||||
@@ -688,6 +694,8 @@
|
||||
"noPhotosAreBeingBackedUpRightNow": "Nicio fotografie nu este salvată în acest moment",
|
||||
"preserveMore": "Păstrați mai multe",
|
||||
"grantFullAccessPrompt": "Vă rugăm să permiteți accesul la toate fotografiile în aplicația Setări",
|
||||
"allowPermTitle": "Permiteți accesul la fotografii",
|
||||
"allowPermBody": "Vă rugăm să permiteți accesul la fotografiile dvs. din Setări, astfel încât Ente să vă poată afișa și salva biblioteca.",
|
||||
"openSettings": "Deschideți Setări",
|
||||
"selectMorePhotos": "Selectați mai multe fotografii",
|
||||
"existingUser": "Utilizator existent",
|
||||
@@ -1090,6 +1098,83 @@
|
||||
"description": "Label of confirm button to add a new custom radius to the radius selector of a location tag"
|
||||
},
|
||||
"setRadius": "Setare rază",
|
||||
"familyPlanPortalTitle": "Familie",
|
||||
"familyPlanOverview": "Adăugați 5 membri ai familiei la planul dvs. existent fără a plăti suplimentar.\n\nFiecare membru primește propriul spațiu privat și nu poate vedea fișierele celuilalt decât dacă acestea sunt partajate.\n\nPlanurile de familie sunt disponibile pentru clienții care au un abonament Ente plătit.\n\nAbonați-vă acum pentru a începe!",
|
||||
"androidBiometricHint": "Verificați-vă identitatea",
|
||||
"@androidBiometricHint": {
|
||||
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidBiometricNotRecognized": "Neidentificat. Încercați din nou.",
|
||||
"@androidBiometricNotRecognized": {
|
||||
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidBiometricSuccess": "Succes",
|
||||
"@androidBiometricSuccess": {
|
||||
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidCancelButton": "Anulare",
|
||||
"@androidCancelButton": {
|
||||
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
|
||||
},
|
||||
"androidSignInTitle": "Autentificare necesară",
|
||||
"@androidSignInTitle": {
|
||||
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidBiometricRequiredTitle": "Biometrice necesare",
|
||||
"@androidBiometricRequiredTitle": {
|
||||
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidDeviceCredentialsRequiredTitle": "Sunt necesare acreditările dispozitivului",
|
||||
"@androidDeviceCredentialsRequiredTitle": {
|
||||
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidDeviceCredentialsSetupDescription": "Sunt necesare acreditările dispozitivului",
|
||||
"@androidDeviceCredentialsSetupDescription": {
|
||||
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
|
||||
},
|
||||
"goToSettings": "Mergeți la setări",
|
||||
"@goToSettings": {
|
||||
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
|
||||
},
|
||||
"androidGoToSettingsDescription": "Autentificarea biometrică nu este configurată pe dispozitivul dvs. Mergeți la „Setări > Securitate” pentru a adăuga autentificarea biometrică.",
|
||||
"@androidGoToSettingsDescription": {
|
||||
"description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
|
||||
},
|
||||
"iOSLockOut": "Autentificarea biometrică este dezactivată. Vă rugăm să blocați și să deblocați ecranul pentru a o activa.",
|
||||
"@iOSLockOut": {
|
||||
"description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
|
||||
},
|
||||
"iOSGoToSettingsDescription": "Autentificarea biometrică nu este configurată pe dispozitivul dvs. Vă rugăm să activați Touch ID sau Face ID pe telefonul dvs.",
|
||||
"@iOSGoToSettingsDescription": {
|
||||
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
|
||||
},
|
||||
"iOSOkButton": "OK",
|
||||
"@iOSOkButton": {
|
||||
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
|
||||
},
|
||||
"openstreetmapContributors": "Contribuitori OpenStreetMap",
|
||||
"hostedAtOsmFrance": "Găzduit la OSM Franţa",
|
||||
"map": "Hartă",
|
||||
"@map": {
|
||||
"description": "Label for the map view"
|
||||
},
|
||||
"maps": "Hărţi",
|
||||
"enableMaps": "Activare hărți",
|
||||
"enableMapsDesc": "Se va afișa fotografiile dvs. pe o hartă a lumii.\n\nAceastă hartă este găzduită de Open Street Map, iar locațiile exacte ale fotografiilor dvs. nu sunt niciodată partajate.\n\nPuteți dezactiva această funcție oricând din Setări.",
|
||||
"quickLinks": "Link-uri rapide",
|
||||
"selectItemsToAdd": "Selectați elementele de adăugat",
|
||||
"addSelected": "Adăugați selectate",
|
||||
"addFromDevice": "Adăugați de pe dispozitiv",
|
||||
"addPhotos": "Adăugați fotografii",
|
||||
"noPhotosFoundHere": "Nu s-au găsit fotografii aici",
|
||||
"zoomOutToSeePhotos": "Micșorați pentru a vedea fotografiile",
|
||||
"noImagesWithLocation": "Nicio imagine cu locație",
|
||||
"unpinAlbum": "Anulați fixarea albumului",
|
||||
"pinAlbum": "Fixați albumul",
|
||||
"create": "Creare",
|
||||
"viewAll": "Vizualizați tot",
|
||||
"nothingSharedWithYouYet": "Nimic distribuit cu dvs. încă",
|
||||
"noAlbumsSharedByYouYet": "Niciun album nu a fost distribuit de dvs. încă",
|
||||
"sharedWithYou": "Distribuite cu dvs.",
|
||||
"sharedByYou": "Distribuite de dvs.",
|
||||
"inviteYourFriendsToEnte": "Invitați-vă prietenii la Ente",
|
||||
@@ -1152,6 +1237,21 @@
|
||||
"changeLocationOfSelectedItems": "Schimbați locația articolelor selectate?",
|
||||
"editsToLocationWillOnlyBeSeenWithinEnte": "Editările locației vor fi vizibile doar pe Ente",
|
||||
"cleanUncategorized": "Curățare Necategorisite",
|
||||
"cleanUncategorizedDescription": "Eliminați toate fișierele din „Fără categorie” care sunt prezente în alte albume",
|
||||
"waitingForVerification": "Se așteaptă verificarea...",
|
||||
"passkey": "Cheie de acces",
|
||||
"passkeyAuthTitle": "Verificare cheie de acces",
|
||||
"loginWithTOTP": "Autentificare cu parolă unică (TOTP)",
|
||||
"passKeyPendingVerification": "Verificarea este încă în așteptare",
|
||||
"loginSessionExpired": "Sesiune expirată",
|
||||
"loginSessionExpiredDetails": "Sesiunea a expirat. Vă rugăm să vă autentificați din nou.",
|
||||
"verifyPasskey": "Verificați cheia de acces",
|
||||
"playOnTv": "Redare album pe TV",
|
||||
"pair": "Asociere",
|
||||
"deviceNotFound": "Dispozitivul nu a fost găsit",
|
||||
"castInstruction": "Accesați cast.ente.io de pe dispozitivul pe care doriți să îl asociați.\n\nIntroduceți codul de mai jos pentru a reda albumul pe TV.",
|
||||
"deviceCodeHint": "Introduceți codul",
|
||||
"joinDiscord": "Alăturați-vă pe Discord",
|
||||
"locations": "Locații",
|
||||
"addAName": "Adăugați un nume",
|
||||
"findThemQuickly": "Găsiți rapid",
|
||||
@@ -1225,5 +1325,269 @@
|
||||
"panorama": "Panoramă",
|
||||
"reenterPassword": "Reintroduceți parola",
|
||||
"reenterPin": "Reintroduceți codul PIN",
|
||||
"deviceLock": "Blocare dispozitiv"
|
||||
"deviceLock": "Blocare dispozitiv",
|
||||
"pinLock": "Blocare PIN",
|
||||
"next": "Înainte",
|
||||
"setNewPassword": "Setați parola noua",
|
||||
"enterPin": "Introduceţi codul PIN",
|
||||
"setNewPin": "Setați un cod nou PIN",
|
||||
"appLock": "Blocare aplicație",
|
||||
"noSystemLockFound": "Nu s-a găsit nicio blocare de sistem",
|
||||
"tapToUnlock": "Atingeți pentru a debloca",
|
||||
"tooManyIncorrectAttempts": "Prea multe încercări incorecte",
|
||||
"videoInfo": "Informaţii video",
|
||||
"autoLock": "Blocare automată",
|
||||
"immediately": "Imediat",
|
||||
"autoLockFeatureDescription": "Timpul după care aplicația se blochează după ce a fost pusă în fundal",
|
||||
"hideContent": "Ascundeți conținutul",
|
||||
"hideContentDescriptionAndroid": "Ascunde conținutul aplicației în comutatorul de aplicații și dezactivează capturile de ecran",
|
||||
"hideContentDescriptionIos": "Ascunde conținutul aplicației în comutatorul de aplicații",
|
||||
"passwordStrengthInfo": "Puterea parolei este calculată luând în considerare lungimea parolei, caracterele utilizate și dacă parola apare sau nu în top 10.000 cele mai utilizate parole",
|
||||
"noQuickLinksSelected": "Nu au fost găsite linkuri rapide",
|
||||
"pleaseSelectQuickLinksToRemove": "Vă rugăm să selectați linkurile rapide de eliminat",
|
||||
"removePublicLinks": "Eliminați linkurile publice",
|
||||
"thisWillRemovePublicLinksOfAllSelectedQuickLinks": "Se vor elimina linkurile publice ale linkurilor rapide selectate.",
|
||||
"guestView": "Mod oaspete",
|
||||
"guestViewEnablePreSteps": "Pentru a activa modul oaspete, vă rugăm să configurați codul de acces al dispozitivului sau blocarea ecranului în setările sistemului.",
|
||||
"nameTheAlbum": "Denumiți albumul",
|
||||
"collectPhotosDescription": "Creați un link unde prietenii dvs. pot încărca fotografii la calitatea originală.",
|
||||
"collect": "Colectare",
|
||||
"appLockDescriptions": "Alegeți între ecranul de blocare implicit al dispozitivului dvs. și un ecran de blocare personalizat cu PIN sau parolă.",
|
||||
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Pentru a activa blocarea aplicației, vă rugăm să configurați codul de acces al dispozitivului sau blocarea ecranului în setările sistemului.",
|
||||
"authToViewPasskey": "Vă rugăm să vă autentificați pentru a vizualiza cheia de acces",
|
||||
"loopVideoOn": "Repetare video activată",
|
||||
"loopVideoOff": "Repetare video dezactivată",
|
||||
"localSyncErrorMessage": "Se pare că ceva nu a mers bine, deoarece sincronizarea fotografiilor locale durează mai mult decât ne așteptam. Vă rugăm să contactați echipa noastră de asistență",
|
||||
"showPerson": "Afișare persoană",
|
||||
"sort": "Sortare",
|
||||
"mostRecent": "Cele mai recente",
|
||||
"mostRelevant": "Cele mai relevante",
|
||||
"loadingYourPhotos": "Se încarcă fotografiile dvs...",
|
||||
"processingImport": "Se procesează {folderName}...",
|
||||
"personName": "Numele persoanei",
|
||||
"addNewPerson": "Adăugare persoană nouă",
|
||||
"addNameOrMerge": "Adăugare nume sau îmbinare",
|
||||
"mergeWithExisting": "Îmbinare cu unul existent",
|
||||
"newPerson": "Persoană nouă",
|
||||
"addName": "Adăugare nume",
|
||||
"add": "Adăugare",
|
||||
"extraPhotosFoundFor": "S-au găsit fotografii extra pentru {text}",
|
||||
"@extraPhotosFoundFor": {
|
||||
"placeholders": {
|
||||
"text": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"extraPhotosFound": "S-au găsit fotografii extra",
|
||||
"configuration": "Configurare",
|
||||
"localIndexing": "Indexare locală",
|
||||
"processed": "Procesate",
|
||||
"resetPerson": "Eliminare",
|
||||
"areYouSureYouWantToResetThisPerson": "Sunteți sigur că doriți să resetaţi această persoană?",
|
||||
"allPersonGroupingWillReset": "Toate grupările pentru această persoană vor fi resetate și veți pierde toate sugestiile făcute pentru această persoană",
|
||||
"yesResetPerson": "Da, resetează persoana",
|
||||
"onlyThem": "Numai el/ea",
|
||||
"checkingModels": "Se verifică modelele...",
|
||||
"enableMachineLearningBanner": "Activați învățarea automată pentru a folosi căutarea magică și recunoașterea facială",
|
||||
"searchDiscoverEmptySection": "Imaginile vor fi afișate aici odată ce procesarea și sincronizarea este completă",
|
||||
"searchPersonsEmptySection": "Persoanele vor fi afișate aici odată ce procesarea și sincronizarea este completă",
|
||||
"viewersSuccessfullyAdded": "{count, plural, one {} few {S-au adăugat {count} observatori}=0 {S-au adăugat 0 observatori} =1 {S-a adăugat 1 observator} other {S-au adăugat {count} de observatori}}",
|
||||
"@viewersSuccessfullyAdded": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int",
|
||||
"example": "2"
|
||||
}
|
||||
},
|
||||
"description": "Number of viewers that were successfully added to an album."
|
||||
},
|
||||
"collaboratorsSuccessfullyAdded": "{count, plural, one {} few {S-au adăugat {count} colaboratori}=0 {S-au adăugat 0 colaboratori} =1 {S-a adăugat 1 colaborator} other {S-au adăugat {count} de colaboratori}}",
|
||||
"@collaboratorsSuccessfullyAdded": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int",
|
||||
"example": "2"
|
||||
}
|
||||
},
|
||||
"description": "Number of collaborators that were successfully added to an album."
|
||||
},
|
||||
"accountIsAlreadyConfigured": "Contul este deja configurat.",
|
||||
"sessionIdMismatch": "Nepotrivire ID sesiune",
|
||||
"@sessionIdMismatch": {
|
||||
"description": "In passkey page, deeplink is ignored because of session ID mismatch."
|
||||
},
|
||||
"failedToFetchActiveSessions": "Nu s-a reușit preluarea sesiunilor active",
|
||||
"@failedToFetchActiveSessions": {
|
||||
"description": "In session page, warn user (in toast) that active sessions could not be fetched."
|
||||
},
|
||||
"failedToRefreshStripeSubscription": "Nu s-a reușit reîmprospătarea abonamentului",
|
||||
"failedToPlayVideo": "Eroare la redarea videoclipului",
|
||||
"uploadIsIgnoredDueToIgnorereason": "Încărcare ignorată din motivul {ignoreReason}",
|
||||
"@uploadIsIgnoredDueToIgnorereason": {
|
||||
"placeholders": {
|
||||
"ignoreReason": {
|
||||
"type": "String",
|
||||
"example": "no network"
|
||||
}
|
||||
}
|
||||
},
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": "Tipul de galerie {galleryType} nu este acceptat pentru redenumire",
|
||||
"@typeOfGallerGallerytypeIsNotSupportedForRename": {
|
||||
"placeholders": {
|
||||
"galleryType": {
|
||||
"type": "String",
|
||||
"example": "no network"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tapToUploadIsIgnoredDue": "Atingeți pentru a încărca, încărcarea este ignorată în prezent datorită {ignoreReason}",
|
||||
"@tapToUploadIsIgnoredDue": {
|
||||
"description": "Shown in upload icon widet, inside a tooltip.",
|
||||
"placeholders": {
|
||||
"ignoreReason": {
|
||||
"type": "String",
|
||||
"example": "no network"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tapToUpload": "Atingeți pentru a încărca",
|
||||
"@tapToUpload": {
|
||||
"description": "Shown in upload icon widet, inside a tooltip."
|
||||
},
|
||||
"info": "Informații",
|
||||
"addFiles": "Adăugați fișiere",
|
||||
"castAlbum": "Difuzați albumul",
|
||||
"imageNotAnalyzed": "Imaginea nu a fost analizată",
|
||||
"noFacesFound": "Nu au fost găsite fețe",
|
||||
"fileNotUploadedYet": "Fișierul nu a fost încărcat încă",
|
||||
"noSuggestionsForPerson": "Nicio sugestie pentru {personName}",
|
||||
"@noSuggestionsForPerson": {
|
||||
"placeholders": {
|
||||
"personName": {
|
||||
"type": "String",
|
||||
"example": "Alice"
|
||||
}
|
||||
}
|
||||
},
|
||||
"month": "lună",
|
||||
"yearShort": "an",
|
||||
"@yearShort": {
|
||||
"description": "Appears in pricing page (/yr)"
|
||||
},
|
||||
"currentlyRunning": "rulează în prezent",
|
||||
"ignored": "ignorat",
|
||||
"photosCount": "{count, plural, one {} few {{count} fotografii}=0 {0 fotografii} =1 {1 fotografie} other {{count} de fotografii}}",
|
||||
"@photosCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int",
|
||||
"example": "2"
|
||||
}
|
||||
}
|
||||
},
|
||||
"file": "Fișier",
|
||||
"searchSectionsLengthMismatch": "Lungimea secțiunilor nu se potrivesc: {snapshotLength} != {searchLength}",
|
||||
"@searchSectionsLengthMismatch": {
|
||||
"description": "Appears in search tab page",
|
||||
"placeholders": {
|
||||
"snapshotLength": {
|
||||
"type": "int",
|
||||
"example": "1"
|
||||
},
|
||||
"searchLength": {
|
||||
"type": "int",
|
||||
"example": "2"
|
||||
}
|
||||
}
|
||||
},
|
||||
"selectMailApp": "Selectați aplicația de e-mail",
|
||||
"selectAllShort": "Toate",
|
||||
"@selectAllShort": {
|
||||
"description": "Text that appears in bottom right when you start to select multiple photos. When clicked, it selects all photos."
|
||||
},
|
||||
"changeLogMagicSearchImprovementTitle": "Îmbunătățire a căutării magice",
|
||||
"changeLogMagicSearchImprovementContent": "Am îmbunătățit căutarea magică pentru a deveni mult mai rapidă, astfel încât să nu trebuiască să așteptați pentru a găsi ceea ce căutați.",
|
||||
"changeLogBackupStatusTitle": "Starea copiei de rezervă",
|
||||
"changeLogBackupStatusContent": "Am adăugat un jurnal al tuturor fișierelor care au fost încărcate pe Ente, inclusiv eșecurile și coada de așteptare.",
|
||||
"changeLogDiscoverTitle": "Descoperire",
|
||||
"changeLogDiscoverContent": "Căutați fotografii ale cărților de identitate, notițe sau chiar meme-uri? Mergeți la fila de căutare și dați o privire la Descoperire. Bazat pe căutarea noastră semantică, este un loc în care puteți găsi fotografii care ar putea fi importante pentru dvs.\\n\\nEste disponibilă numai dacă ați activat învățarea automată.",
|
||||
"selectCoverPhoto": "Selectați fotografia de copertă",
|
||||
"newLocation": "Locație nouă",
|
||||
"faceNotClusteredYet": "Fața nu este încă grupată, vă rugăm să reveniți mai târziu",
|
||||
"theLinkYouAreTryingToAccessHasExpired": "Linkul pe care încercați să îl accesați a expirat.",
|
||||
"openFile": "Deschidere fișier",
|
||||
"backupFile": "Salvare fișier",
|
||||
"openAlbumInBrowser": "Deschideți albumul în browser",
|
||||
"openAlbumInBrowserTitle": "Vă rugăm să utilizați aplicația web pentru a adăuga fotografii la acest album",
|
||||
"allow": "Permiteți",
|
||||
"allowAppToOpenSharedAlbumLinks": "Permiteți aplicației să deschidă link-uri de album partajate",
|
||||
"seePublicAlbumLinksInApp": "Vedeți linkurile albumelor publice în aplicație",
|
||||
"emergencyContacts": "Contacte de urgență",
|
||||
"acceptTrustInvite": "Acceptați invitația",
|
||||
"declineTrustInvite": "Refuzați invitația",
|
||||
"removeYourselfAsTrustedContact": "Eliminați-vă ca persoană de contact de încredere",
|
||||
"legacy": "Moștenire",
|
||||
"legacyPageDesc": "Moștenirea permite contactelor de încredere să vă acceseze contul în absența dvs.",
|
||||
"legacyPageDesc2": "Persoanele de contact de încredere pot iniția recuperarea contului și, dacă nu este blocată în termen de 30 de zile, vă pot reseta parola și accesa contul.",
|
||||
"legacyAccounts": "Conturi de moștenire",
|
||||
"trustedContacts": "Contacte de încredere",
|
||||
"addTrustedContact": "Adăugare contact de încredere",
|
||||
"removeInvite": "Eliminare invitație",
|
||||
"recoveryWarning": "Un contact de încredere încearcă să vă acceseze contul",
|
||||
"rejectRecovery": "Respingeți recuperarea",
|
||||
"recoveryInitiated": "Recuperare inițiată",
|
||||
"recoveryInitiatedDesc": "Puteți accesa contul după {days} zile. O notificare va fi trimisă la {email}.",
|
||||
"@recoveryInitiatedDesc": {
|
||||
"placeholders": {
|
||||
"days": {
|
||||
"type": "int",
|
||||
"example": "30"
|
||||
},
|
||||
"email": {
|
||||
"type": "String",
|
||||
"example": "me@example.com"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cancelAccountRecovery": "Anulare recuperare",
|
||||
"recoveryAccount": "Recuperare cont",
|
||||
"cancelAccountRecoveryBody": "Sunteți sigur că doriți să anulați recuperarea?",
|
||||
"startAccountRecoveryTitle": "Începeți recuperarea",
|
||||
"whyAddTrustContact": "Contactul de încredere vă poate ajuta la recuperarea datelor.",
|
||||
"recoveryReady": "Acum puteți recupera contul {email} setând o nouă parolă.",
|
||||
"@recoveryReady": {
|
||||
"placeholders": {
|
||||
"email": {
|
||||
"type": "String",
|
||||
"example": "me@example.com"
|
||||
}
|
||||
}
|
||||
},
|
||||
"recoveryWarningBody": "{email} încearcă să vă recupereze contul.",
|
||||
"trustedInviteBody": "Ați fost învitat să fiți un contact de moștenire de către {email}.",
|
||||
"warning": "Atenție",
|
||||
"proceed": "Continuați",
|
||||
"confirmAddingTrustedContact": "Sunteți pe cale să adăugați {email} ca persoană de contact de încredere. Acesta va putea să vă recupereze contul dacă lipsiți timp de {numOfDays} de zile.",
|
||||
"@confirmAddingTrustedContact": {
|
||||
"placeholders": {
|
||||
"email": {
|
||||
"type": "String",
|
||||
"example": "me@example.com"
|
||||
},
|
||||
"numOfDays": {
|
||||
"type": "int",
|
||||
"example": "30"
|
||||
}
|
||||
}
|
||||
},
|
||||
"legacyInvite": "{email} v-a invitat să fiți un contact de încredere",
|
||||
"authToManageLegacy": "Vă rugăm să vă autentificați pentru a gestiona contactele de încredere",
|
||||
"useDifferentPlayerInfo": "Aveți probleme cu redarea acestui videoclip? Apăsați lung aici pentru a încerca un alt player.",
|
||||
"hideSharedItemsFromHomeGallery": "Ascundeți elementele distribuite din galeria principală",
|
||||
"gallery": "Galerie",
|
||||
"joinAlbum": "Alăturați-vă albumului",
|
||||
"joinAlbumSubtext": "pentru a vedea și a adăuga fotografii",
|
||||
"joinAlbumSubtextViewer": "pentru a adăuga la albumele distribuite",
|
||||
"join": "Alăturare"
|
||||
}
|
||||
@@ -17,6 +17,8 @@ const int loginSubKeyLen = 32;
|
||||
const int loginSubKeyId = 1;
|
||||
const String loginSubKeyContext = "loginctx";
|
||||
|
||||
const int _keyDerivationStregth = 1073741824 * 4;
|
||||
|
||||
Uint8List cryptoSecretboxEasy(Map<String, dynamic> args) {
|
||||
return Sodium.cryptoSecretboxEasy(args["source"], args["nonce"], args["key"]);
|
||||
}
|
||||
|
||||
@@ -496,7 +496,6 @@ func main() {
|
||||
privateAPI.POST("/users/two-factor/disable", userHandler.DisableTwoFactor)
|
||||
privateAPI.PUT("/users/attributes", userHandler.SetAttributes)
|
||||
privateAPI.PUT("/users/email-mfa", userHandler.UpdateEmailMFA)
|
||||
privateAPI.PUT("/users/keys", userHandler.UpdateKeys)
|
||||
privateAPI.POST("/users/srp/setup", userHandler.SetupSRP)
|
||||
privateAPI.POST("/users/srp/complete", userHandler.CompleteSRPSetup)
|
||||
privateAPI.POST("/users/srp/update", userHandler.UpdateSrpAndKeyAttributes)
|
||||
|
||||
@@ -105,23 +105,6 @@ func (h *UserHandler) UpdateEmailMFA(c *gin.Context) {
|
||||
c.Status(http.StatusOK)
|
||||
}
|
||||
|
||||
// UpdateKeys updates the user key attributes on password change
|
||||
func (h *UserHandler) UpdateKeys(c *gin.Context) {
|
||||
userID := auth.GetUserID(c.Request.Header)
|
||||
var request ente.UpdateKeysRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
handler.Error(c, stacktrace.Propagate(err, ""))
|
||||
return
|
||||
}
|
||||
token := auth.GetToken(c)
|
||||
err := h.UserController.UpdateKeys(c, userID, request, token)
|
||||
if err != nil {
|
||||
handler.Error(c, stacktrace.Propagate(err, ""))
|
||||
return
|
||||
}
|
||||
c.Status(http.StatusOK)
|
||||
}
|
||||
|
||||
// SetRecoveryKey sets the recovery key attributes for a user.
|
||||
func (h *UserHandler) SetRecoveryKey(c *gin.Context) {
|
||||
userID := auth.GetUserID(c.Request.Header)
|
||||
|
||||
@@ -184,31 +184,6 @@ func (c *UserController) UpdateEmailMFA(context *gin.Context, userID int64, isEn
|
||||
return c.UserAuthRepo.UpdateEmailMFA(context, userID, isEnabled)
|
||||
}
|
||||
|
||||
// UpdateKeys updates the user keys on password change
|
||||
func (c *UserController) UpdateKeys(context *gin.Context, userID int64,
|
||||
request ente.UpdateKeysRequest, token string) error {
|
||||
/*
|
||||
todo: send email to the user on password change and may be keep history of old keys for X days.
|
||||
History will allow easy recovery of the account when password is changed by a bad actor
|
||||
*/
|
||||
isSRPSetupDone, err := c.UserAuthRepo.IsSRPSetupDone(context, userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if isSRPSetupDone {
|
||||
return stacktrace.Propagate(ente.NewBadRequestWithMessage("Need to upgrade client"), "can not use old API to change password after SRP is setup")
|
||||
}
|
||||
err = c.UserRepo.UpdateKeys(userID, request)
|
||||
if err != nil {
|
||||
return stacktrace.Propagate(err, "")
|
||||
}
|
||||
err = c.UserAuthRepo.RemoveAllOtherTokens(userID, token)
|
||||
if err != nil {
|
||||
return stacktrace.Propagate(err, "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetRecoveryKey sets the recovery key attributes for a user, if not already set
|
||||
func (c *UserController) SetRecoveryKey(userID int64, request ente.SetRecoveryKeyRequest) error {
|
||||
keyAttr, keyErr := c.UserRepo.GetKeyAttributes(userID)
|
||||
|
||||
@@ -265,13 +265,6 @@ func (repo *UserRepository) SetKeyAttributes(userID int64, keyAttributes ente.Ke
|
||||
return stacktrace.Propagate(err, "")
|
||||
}
|
||||
|
||||
// UpdateKeys sets the keys of a user
|
||||
func (repo *UserRepository) UpdateKeys(userID int64, keys ente.UpdateKeysRequest) error {
|
||||
_, err := repo.DB.Exec(`UPDATE key_attributes SET kek_salt = $1, encrypted_key = $2, key_decryption_nonce = $3, mem_limit = $4, ops_limit = $5 WHERE user_id = $6`,
|
||||
keys.KEKSalt, keys.EncryptedKey, keys.KeyDecryptionNonce, keys.MemLimit, keys.OpsLimit, userID)
|
||||
return stacktrace.Propagate(err, "")
|
||||
}
|
||||
|
||||
// SetRecoveryKeyAttributes sets the recovery key and related attributes for a user
|
||||
func (repo *UserRepository) SetRecoveryKeyAttributes(userID int64, keys ente.SetRecoveryKeyRequest) error {
|
||||
_, err := repo.DB.Exec(`UPDATE key_attributes SET master_key_encrypted_with_recovery_key = $1, master_key_decryption_nonce = $2, recovery_key_encrypted_with_master_key = $3, recovery_key_decryption_nonce = $4 WHERE user_id = $5`,
|
||||
|
||||
@@ -221,9 +221,9 @@
|
||||
"terms_and_conditions": "Ik ga akkoord met de <a>gebruiksvoorwaarden</a> en <b>privacybeleid</b>",
|
||||
"people": "Personen",
|
||||
"indexing_scheduled": "Indexering is gepland...",
|
||||
"indexing_photos": "",
|
||||
"indexing_fetching": "",
|
||||
"indexing_people": "",
|
||||
"indexing_photos": "Indexen bijwerken...",
|
||||
"indexing_fetching": "Indexen synchroniseren...",
|
||||
"indexing_people": "Mensen synchroniseren...",
|
||||
"syncing_wait": "Synchroniseren...",
|
||||
"people_empty_too_few": "Mensen worden hier getoond wanneer er voldoende foto's van een persoon zijn",
|
||||
"unnamed_person": "Naamloos persoon",
|
||||
|
||||
@@ -307,13 +307,13 @@
|
||||
"INPROGRESS_UPLOADS": "Envios em andamento",
|
||||
"TOO_LARGE_UPLOADS": "Arquivos grandes",
|
||||
"LARGER_THAN_AVAILABLE_STORAGE_UPLOADS": "Armazenamento insuficiente",
|
||||
"LARGER_THAN_AVAILABLE_STORAGE_INFO": "Estes arquivos não foram carregados pois excedem o tamanho máximo para seu plano de armazenamento",
|
||||
"TOO_LARGE_INFO": "Estes arquivos não foram carregados pois excedem nosso limite máximo de tamanho de arquivo",
|
||||
"THUMBNAIL_GENERATION_FAILED_INFO": "Estes arquivos foram enviados, mas infelizmente não conseguimos gerar as miniaturas para eles.",
|
||||
"upload_to_album": "Enviar para o álbum",
|
||||
"LARGER_THAN_AVAILABLE_STORAGE_INFO": "Os arquivos não foram enviados, já que, eles ultrapassam o limite máximo do seu plano de armazenamento.",
|
||||
"TOO_LARGE_INFO": "Os arquivos não foram enviados, já que, eles excedem o limite máximo do arquivo.",
|
||||
"THUMBNAIL_GENERATION_FAILED_INFO": "Os arquivos foram enviados, porém, não conseguimos gerar miniaturas. (thumbnails)",
|
||||
"upload_to_album": "Enviar ao álbum",
|
||||
"add_to_album": "Adicionar ao álbum",
|
||||
"move_to_album": "Mover para álbum",
|
||||
"unhide_to_album": "Reexibir para o álbum",
|
||||
"move_to_album": "Mover ao álbum",
|
||||
"unhide_to_album": "Desocultar do álbum",
|
||||
"restore_to_album": "Restaurar para álbum",
|
||||
"section_all": "Todos",
|
||||
"section_uncategorized": "Sem categoria",
|
||||
@@ -566,7 +566,7 @@
|
||||
"unpreviewable_file_notification": "Este arquivo não pôde ser pré-visualizado. Clique aqui para baixar o original.",
|
||||
"download_complete": "Download concluído",
|
||||
"downloading_album": "Fazendo download de {{name}}",
|
||||
"download_failed": "Falha no download",
|
||||
"download_failed": "Falhou ao baixar",
|
||||
"download_progress": "{{count, number}} / {{total, number}} arquivos",
|
||||
"CHRISTMAS": "Natal",
|
||||
"CHRISTMAS_EVE": "Véspera de Natal",
|
||||
|
||||
Reference in New Issue
Block a user