mirror of https://github.com/Bubka/2FAuth.git
Compare commits
4 Commits
44d7328d6c
...
063fb2ef18
Author | SHA1 | Date |
---|---|---|
Bubka | 063fb2ef18 | |
Bubka | 4e22fe7e2c | |
Bubka | 0dee0f51f0 | |
Bubka | 086dd241d2 |
|
@ -6,6 +6,7 @@ use App\Models\Traits\AuthenticationLoggable;
|
|||
use App\Models\Traits\WebAuthnManageCredentials;
|
||||
use Illuminate\Auth\Events\PasswordReset;
|
||||
use Illuminate\Auth\Notifications\ResetPassword;
|
||||
use Illuminate\Contracts\Translation\HasLocalePreference;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
@ -41,7 +42,7 @@ use Laravel\Passport\HasApiTokens;
|
|||
* @property-read \Illuminate\Database\Eloquent\Collection|\Laragear\WebAuthn\Models\WebAuthnCredential[] $webAuthnCredentials
|
||||
* @property-read int|null $web_authn_credentials_count
|
||||
*/
|
||||
class User extends Authenticatable implements WebAuthnAuthenticatable
|
||||
class User extends Authenticatable implements HasLocalePreference, WebAuthnAuthenticatable
|
||||
{
|
||||
use AuthenticationLoggable;
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
@ -86,6 +87,14 @@ class User extends Authenticatable implements WebAuthnAuthenticatable
|
|||
'demoting',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the user's preferred locale.
|
||||
*/
|
||||
public function preferredLocale() : string
|
||||
{
|
||||
return strval($this->preferences['lang']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope a query to only include admin users.
|
||||
*
|
||||
|
|
|
@ -126,6 +126,11 @@ return [
|
|||
'emergency' => [
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
],
|
||||
|
||||
'silent' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => NullHandler::class,
|
||||
],
|
||||
],
|
||||
|
||||
];
|
||||
|
|
|
@ -125,13 +125,21 @@
|
|||
|
||||
<template>
|
||||
<SearchBox v-if="props.showSearch" v-model:keyword="searched" :hasNoBackground="true" />
|
||||
<nav v-if="props.showSearch" class="level is-mobile">
|
||||
<nav v-if="props.showSearch" class="level is-mobile mb-2">
|
||||
<div class="level-item has-text-centered">
|
||||
<div class="buttons">
|
||||
<button id="btnShowOneMonth" :title="$t('admin.show_last_month_log')" v-on:click="setPeriod(periods.aMonth)" :class="{ 'has-text-grey' : period !== periods.aMonth }" class="button is-ghost p-1">1m</button>
|
||||
<button id="btnShowThreeMonths" :title="$t('admin.show_three_months_log')" v-on:click="setPeriod(periods.threeMonths)" :class="{ 'has-text-grey' : period !== periods.threeMonths }" class="button is-ghost p-1">3m</button>
|
||||
<button id="btnShowSixMonths" :title="$t('admin.show_six_months_log')" v-on:click="setPeriod(periods.halfYear)" :class="{ 'has-text-grey' : period !== periods.halfYear }" class="button is-ghost p-1">6m</button>
|
||||
<button id="btnShowOneYear" :title="$t('admin.show_one_year_log')" v-on:click="setPeriod(periods.aYear)" :class="{ 'has-text-grey' : period !== periods.aYear }" class="button is-ghost p-1 mr-5">1y</button>
|
||||
<button id="btnShowOneMonth" :title="$t('admin.show_last_month_log')" v-on:click="setPeriod(periods.aMonth)" :class="{ 'has-text-grey' : period !== periods.aMonth }" class="button is-ghost p-1">
|
||||
{{ $t('commons.one_month') }}
|
||||
</button>
|
||||
<button id="btnShowThreeMonths" :title="$t('admin.show_three_months_log')" v-on:click="setPeriod(periods.threeMonths)" :class="{ 'has-text-grey' : period !== periods.threeMonths }" class="button is-ghost p-1">
|
||||
{{ $t('commons.x_month', { 'x' : '3' }) }}
|
||||
</button>
|
||||
<button id="btnShowSixMonths" :title="$t('admin.show_six_months_log')" v-on:click="setPeriod(periods.halfYear)" :class="{ 'has-text-grey' : period !== periods.halfYear }" class="button is-ghost p-1">
|
||||
{{ $t('commons.x_month', { 'x' : '6' }) }}
|
||||
</button>
|
||||
<button id="btnShowOneYear" :title="$t('admin.show_one_year_log')" v-on:click="setPeriod(periods.aYear)" :class="{ 'has-text-grey' : period !== periods.aYear }" class="button is-ghost p-1 mr-5">
|
||||
{{ $t('commons.one_year') }}
|
||||
</button>
|
||||
<button id="btnSortLogDesc" v-on:click="setDesc" :title="$t('admin.sort_by_date_desc')" :class="{ 'has-text-grey' : !orderIsDesc }" class="button p-1 is-ghost">
|
||||
<FontAwesomeIcon :icon="['fas', 'arrow-up-long']" flip="vertical" />
|
||||
<FontAwesomeIcon :icon="['far', 'calendar']" />
|
||||
|
|
|
@ -81,9 +81,6 @@ return [
|
|||
'information' => 'Information',
|
||||
'send' => 'Send',
|
||||
'optimize' => 'Optimize',
|
||||
'duration' => 'Duration',
|
||||
'from' => 'From',
|
||||
'using' => 'Using',
|
||||
'IP' => 'IP',
|
||||
'browser' => 'Browser',
|
||||
'operating_system_short' => 'OS',
|
||||
|
@ -91,4 +88,7 @@ return [
|
|||
'time' => 'Time',
|
||||
'ip_address' => 'IP Address',
|
||||
'device' => 'Device',
|
||||
'one_month' => '1 mo.',
|
||||
'x_month' => ':x mos.',
|
||||
'one_year' => '1 yr',
|
||||
];
|
||||
|
|
|
@ -27,7 +27,7 @@ return [
|
|||
'confirm' => [
|
||||
'delete_user' => 'Êtes-vous sûr de vouloir supprimer cet utilisateur ? Il est impossible de restaurer un utilisateur supprimé.',
|
||||
'request_password_reset' => 'Êtes-vous sûr de vouloir réinitialiser le mot de passe de cet utilisateur ?',
|
||||
'purge_password_reset_request' => 'Êtes-vous sûr de vouloir supprimer la demande ?',
|
||||
'purge_password_reset_request' => 'Êtes-vous sûr de vouloir supprimer la demande précédente ?',
|
||||
'delete_account' => 'Êtes-vous sûr de vouloir supprimer cet utilisateur ?',
|
||||
'edit_own_account' => 'Il s\'agit de votre propre compte. Êtes-vous sûr ?',
|
||||
'change_admin_role' => 'Cela va grandement impacter les permissions de cet utilisateur. Êtes-vous sûr ?',
|
||||
|
@ -68,6 +68,20 @@ return [
|
|||
'check_now' => 'Vérifier maintenant',
|
||||
'view_on_github' => 'Voir sur GitHub',
|
||||
'x_is_available' => ':version est disponible',
|
||||
'successful_login_on' => 'Connexion réussie le <span class="has-text-grey-light">:login_at</span>',
|
||||
'successful_logout_on' => 'Déconnexion réussie le <span class="has-text-grey-light">:login_at</span>',
|
||||
'failed_login_on' => 'Connexion refusée le <span class="has-text-grey-light">:login_at</span>',
|
||||
'last_accesses' => 'Derniers accès',
|
||||
'see_full_log' => 'Voir le log complet',
|
||||
'browser_on_platform' => ':browser sur :platform',
|
||||
'access_log_has_more_entries' => 'Le journal des accès contient probablement plus d\'entrées.',
|
||||
'access_log_legend_for_user' => 'Journal des accès de l\'utilisateur :username',
|
||||
'show_last_month_log' => 'Afficher les entrées sur un mois',
|
||||
'show_three_months_log' => 'Afficher les entrées sur 3 mois',
|
||||
'show_six_months_log' => 'Afficher les entrées sur 6 mois',
|
||||
'show_one_year_log' => 'Afficher les entrées sur un an',
|
||||
'sort_by_date_asc' => 'Afficher les plus anciens en premier',
|
||||
'sort_by_date_desc' => 'Afficher les plus récents en premier',
|
||||
'forms' => [
|
||||
'use_encryption' => [
|
||||
'label' => 'Protéger les données sensibles',
|
||||
|
|
|
@ -79,7 +79,13 @@ return [
|
|||
'nothing' => 'rien',
|
||||
'no_result' => 'Aucun résultat',
|
||||
'information' => 'Information',
|
||||
'permissions' => 'Autorisations',
|
||||
'send' => 'Envoyer',
|
||||
'optimize' => 'Optimiser',
|
||||
'IP' => 'IP',
|
||||
'browser' => 'Navigateur',
|
||||
'operating_system_short' => 'OS',
|
||||
'no_entry_yet' => 'Aucune entrée pour l\'instant',
|
||||
'time' => 'Heure',
|
||||
'ip_address' => 'Adresse IP',
|
||||
'device' => 'Appareil',
|
||||
];
|
||||
|
|
|
@ -57,6 +57,7 @@ return [
|
|||
'unauthorized' => 'Non autorisé',
|
||||
'unauthorized_legend' => 'Vous n\'avez pas la permission de voir cette ressource ou d\'effectuer cette action',
|
||||
'cannot_delete_the_only_admin' => 'Impossible de supprimer le seul compte administrateur',
|
||||
'cannot_demote_the_only_admin' => 'Impossible de rétrograder le seul compte administrateur',
|
||||
'error_during_data_fetching' => '💀 Une erreur s\'est produite lors de la récupération des données',
|
||||
'check_failed_try_later' => 'Échec de la vérification, veuillez réessayer plus tard',
|
||||
'sso_disabled' => 'SSO est désactivé',
|
||||
|
@ -67,4 +68,8 @@ return [
|
|||
'account_managed_by_external_provider' => 'Compte géré par un fournisseur externe',
|
||||
'data_cannot_be_refreshed_from_server' => 'Les données ne peuvent être actualisées depuis le serveur',
|
||||
'no_pwd_reset_for_this_user_type' => 'Réinitialisation du mot de passe indisponible pour cet utilisateur',
|
||||
'cannot_detect_qrcode_in_image' => 'Impossible de détecter un QR code dans l\'image, essayez de recadrer l\'image',
|
||||
'cannot_decode_detected_qrcode' => 'Impossible de décoder le QR code détecté, essayez de rogner ou d\'améliorer l\'image',
|
||||
'qrcode_has_invalid_checksum' => 'La somme de contrôle du QR code est invalide',
|
||||
'no_readable_qrcode' => 'Aucun QR code lisible',
|
||||
];
|
|
@ -14,10 +14,17 @@ return [
|
|||
*/
|
||||
|
||||
'hello' => 'Bonjour',
|
||||
'hello_user' => 'Bonjour :username,',
|
||||
'regards' => 'Cordialement',
|
||||
'test_email_settings' => [
|
||||
'subject' => 'Email de test 2FAuth',
|
||||
'reason' => 'Vous recevez cet email car vous avez demandé à vérifier le bon fonctionnement de l\'envoi des emails sur votre instance 2FAuth.',
|
||||
'success' => 'Bonne nouvelle, ça fonctionne :)'
|
||||
],
|
||||
|
||||
'new_device' => [
|
||||
'subject' => 'Nouvelle connexion à 2FAuth',
|
||||
'resume' => 'Un nouvel appareil vient de se connecter à votre compte 2FAuth.',
|
||||
'connection_details' => 'Voici les détails de cette connexion',
|
||||
'recommandations' => 'S\'il s\'agit de vous, vous pouvez ignorer cette alerte. Dans le cas contraire, et si vous soupçonnez une activité suspecte sur votre compte, changez votre mot de passe sans attendre.'
|
||||
],
|
||||
];
|
|
@ -51,5 +51,8 @@ return [
|
|||
'users' => 'Gestion des utilisateurs',
|
||||
'createUser' => 'Créer un utilisateur',
|
||||
'manageUser' => 'Gestion de l\'utilisateur',
|
||||
'logs' => [
|
||||
'access' => 'Journal des accès'
|
||||
]
|
||||
]
|
||||
];
|
Loading…
Reference in New Issue