Skip to content

Commit dccc645

Browse files
committed
wip passkeys
1 parent 15f4d9b commit dccc645

8 files changed

Lines changed: 431 additions & 83 deletions

File tree

composer.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@
4747
"spatie/laravel-typescript-transformer": "^2.3",
4848
"spatie/typescript-transformer": "^2.2"
4949
},
50+
"suggest": {
51+
"spatie/laravel-passkeys": "Allows you to use passkey authentication (^1.0 is required).",
52+
"pragmarx/google2fa-laravel": "Allows you to use 2FA default TOTP command",
53+
"bacon/bacon-qr-code": "Allows you to use QR codes in default TOTP command"
54+
},
55+
"conflict": {
56+
"spatie/laravel-passkeys": "<1.0 || >=2.0"
57+
},
5058
"autoload": {
5159
"files": [
5260
"src/sharp_helper.php"

resources/lang/en/auth.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,25 @@
2828
],
2929
],
3030
],
31+
'passkeys' => [
32+
'entity_label' => 'Passkey',
33+
'commands' => [
34+
'rename' => [
35+
'command_label' => 'Rename passkey',
36+
'name_field_label' => 'Name',
37+
],
38+
'add' => [
39+
'command_label' => 'Add a passkey',
40+
],
41+
],
42+
'fields' => [
43+
'name' => 'Name',
44+
'usage' => 'Usage',
45+
'created_at' => 'Creation date',
46+
'last_used_at' => 'Last used at',
47+
],
48+
'used_in_this_browser' => 'Used in this browser',
49+
],
3150
'password_change' => [
3251
'command' => [
3352
'label' => 'Change password...',

resources/lang/fr/auth.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,25 @@
2828
],
2929
],
3030
],
31+
'passkeys' => [
32+
'entity_label' => 'Clé d’accès',
33+
'commands' => [
34+
'rename' => [
35+
'command_label' => 'Renommer la clé d’accès',
36+
'name_field_label' => 'Nom',
37+
],
38+
'add' => [
39+
'command_label' => 'Ajouter une clé d’accès',
40+
],
41+
],
42+
'fields' => [
43+
'name' => 'Nom',
44+
'usage' => 'Utilisation',
45+
'created_at' => 'Date de création',
46+
'last_used_at' => 'Dernière utilisation',
47+
],
48+
'used_in_this_browser' => 'Utilisée dans ce navigateur',
49+
],
3150
'password_change' => [
3251
'command' => [
3352
'label' => 'Modifier le mot de passe...',

src/Auth/Passkeys/Commands/UpdatePasskeyNameCommand.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ class UpdatePasskeyNameCommand extends InstanceCommand
1111
{
1212
public function label(): string
1313
{
14-
return 'Rename';
14+
return trans('sharp::auth.passkeys.commands.rename.command_label');
1515
}
1616

1717
public function buildFormFields(FieldsContainer $formFields): void
1818
{
1919
$formFields->addField(
2020
SharpFormTextField::make('name')
21-
->setLabel('Name')
21+
->setLabel(trans('sharp::auth.passkeys.commands.rename.name_field_label'))
2222
);
2323
}
2424

src/Auth/Passkeys/Entity/PasskeyEntity.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
class PasskeyEntity extends SharpEntity
88
{
99
protected ?string $list = PasskeyList::class;
10-
protected string $label = 'Passkeys';
1110
protected array $prohibitedActions = ['create', 'update'];
11+
12+
protected function getLabel(): string
13+
{
14+
return trans('sharp::auth.passkeys.entity_label');
15+
}
1216
}

src/Auth/Passkeys/Entity/PasskeyList.php

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ public function buildList(EntityListFieldsContainer $fields): void
2020
$fields
2121
->addField(
2222
EntityListField::make('name')
23-
->setLabel('Name')
23+
->setLabel(trans('sharp::auth.passkeys.fields.name'))
2424
)
2525
->addField(
2626
EntityListBadgeField::make('usage')
27-
->setLabel('Usage')
27+
->setLabel(trans('sharp::auth.passkeys.fields.usage'))
2828
)
2929
->addField(
30-
EntityListField::make('created_at')
31-
->setLabel('Creation date')
30+
EntityListField::make('last_used_at')
31+
->setLabel(trans('sharp::auth.passkeys.fields.last_used_at'))
3232
)
3333
->addField(
34-
EntityListField::make('last_used_at')
35-
->setLabel('Last used at')
34+
EntityListField::make('created_at')
35+
->setLabel(trans('sharp::auth.passkeys.fields.created_at'))
3636
);
3737
}
3838

@@ -48,7 +48,7 @@ public function getEntityCommands(): ?array
4848
{
4949
public function label(): string
5050
{
51-
return 'Add a passkey';
51+
return trans('sharp::auth.passkeys.commands.add.command_label');
5252
}
5353

5454
public function execute(array $data = []): array
@@ -78,11 +78,17 @@ public function getListData(): array|Arrayable
7878
return $this
7979
->setCustomTransformer('usage', function ($value, Model $passkey) {
8080
return $passkey->getKey() == request()->cookie('sharp_last_used_passkey')
81-
? 'Used in this browser'
81+
? trans('sharp::auth.passkeys.used_in_this_browser')
8282
: null;
8383
})
84+
->setCustomTransformer('last_used_at', function ($value, Model $passkey) {
85+
return $passkey->last_used_at?->diffForHumans();
86+
})
87+
->setCustomTransformer('created_at', function ($value, Model $passkey) {
88+
return $passkey->created_at?->isoFormat('LLL');
89+
})
8490
->transform(
85-
$this->currentUser()->passkeys
91+
$this->currentUser()->passkeys()->orderByDesc('created_at')->get()
8692
);
8793
}
8894

0 commit comments

Comments
 (0)