Skip to content

Commit 84b8ac8

Browse files
authored
Merge pull request #7 from mhmzdev/authentication
authentication added via dart_frog_auth
2 parents 2a4c45e + 5280886 commit 84b8ac8

File tree

8 files changed

+79
-40
lines changed

8 files changed

+79
-40
lines changed

server/docker-compose.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: '3.5'
1+
version: '3.7'
22

33
services:
44
postgres:
@@ -13,6 +13,7 @@ services:
1313
ports:
1414
- "5432:5432"
1515
restart: unless-stopped
16+
platform: linux/amd64
1617

1718
volumes:
1819
postgres:
Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import 'package:dart_frog/dart_frog.dart';
2-
import 'package:dart_frog_auth/dart_frog_auth.dart';
3-
import 'package:shared/shared.dart';
42
import 'package:stormberry/stormberry.dart';
53

6-
import 'authy.dart';
4+
import 'authenticator.dart';
75

86
/*
97
NOTE: This won't be readable while migration in stormberry, so requires
@@ -24,16 +22,16 @@ final database = Database(
2422
);
2523

2624
Handler middleware(Handler handler) {
27-
return handler.use(
28-
provider<Database>((context) {
29-
return database;
30-
}),
31-
).use(
32-
bearerAuthentication<User>(
33-
authenticator: (context, token) async {
34-
final authy = context.read<Authy>();
35-
return authy.verifyToken(token);
36-
},
37-
),
38-
);
25+
final authy = Authenticator(database: database);
26+
return handler
27+
.use(
28+
provider<Authenticator>((context) {
29+
return authy;
30+
}),
31+
)
32+
.use(
33+
provider<Database>((context) {
34+
return database;
35+
}),
36+
);
3937
}

server/routes/api/v1/auth/login.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import 'package:db/db.dart' as db;
66
import 'package:shared/shared.dart';
77
import 'package:stormberry/stormberry.dart';
88

9-
import '../authy.dart';
9+
import '../authenticator.dart';
1010

1111
Future<Response> onRequest(RequestContext context) async {
1212
switch (context.request.method) {
@@ -66,7 +66,7 @@ Future<Response> _login(
6666
);
6767
}
6868

69-
final authy = context.read<Authy>();
69+
final authy = context.read<Authenticator>();
7070
final token = await authy.generateToken(User.fromUserView(user));
7171

7272
return Response.json(

server/routes/api/v1/auth/register.dart

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ Future<Response> _register(
3737
statusCode: 205,
3838
body: {
3939
'status': 'failed',
40-
'message': 'username ${body['username']} is already taken!',
40+
'message':
41+
// ignore: lines_longer_than_80_chars
42+
'username ${body['username']} or email ${body['email']} is already taken!',
4143
},
4244
);
4345
}
@@ -62,10 +64,7 @@ Future<Response> _register(
6264

6365
final id = await database.users.insertOne(request);
6466

65-
final sharedUser = User.fromJson({
66-
...body,
67-
'id': id,
68-
});
67+
final sharedUser = User.fromJson({...body, 'id': id});
6968

7069
return Response.json(
7170
body: {
Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ import 'package:dart_frog/dart_frog.dart';
44
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
55
import 'package:db/db.dart' as db;
66
import 'package:shared/shared.dart';
7-
8-
import '_middleware.dart';
7+
import 'package:stormberry/stormberry.dart';
98

109
Future<Response> onRequest(RequestContext context) async {
1110
switch (context.request.method) {
@@ -20,14 +19,18 @@ Future<Response> onRequest(RequestContext context) async {
2019
}
2120
}
2221

23-
class Authy {
22+
class Authenticator {
23+
Authenticator({required this.database});
24+
25+
final Database database;
26+
2427
static const String jwtSecret =
2528
// ignore: lines_longer_than_80_chars
2629
'JWT SECRET AUTH KEY, I AM SORRY IF THIS GOT HACKED.NOT A PRO BACKEND DEVELOPER XD';
2730

28-
Future<User?> verifyToken(String? token) async {
31+
Future<bool> verifyToken(String? token) async {
2932
if (token == null) {
30-
return null;
33+
return false;
3134
}
3235

3336
final users = await database.users.queryUsers();
@@ -39,11 +42,11 @@ class Authy {
3942

4043
for (final u in users) {
4144
if (u.id == (payload['uid'] as int)) {
42-
return User.fromUserView(u);
45+
return true;
4346
}
4447
}
4548

46-
return null;
49+
return false;
4750
}
4851

4952
Future<String> generateToken(User user) async {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:dart_frog/dart_frog.dart';
2+
import 'package:dart_frog_auth/dart_frog_auth.dart';
3+
import 'package:stormberry/stormberry.dart';
4+
5+
import '../_middleware.dart';
6+
import '../authenticator.dart';
7+
8+
Handler middleware(Handler handler) {
9+
final authy = Authenticator(database: database);
10+
return handler
11+
.use(
12+
provider<Database>((context) {
13+
return database;
14+
}),
15+
)
16+
.use(
17+
bearerAuthentication<bool>(
18+
authenticator: (context, token) {
19+
return authy.verifyToken(token);
20+
},
21+
),
22+
);
23+
}

server/routes/api/v1/posts/index.dart

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,7 @@ Future<Response> _get(RequestContext context) async {
3737
sharedPosts = dbPosts.map(Post.fromPostView).toList();
3838
}
3939

40-
return Response.json(
41-
body: {
42-
'status': 'success',
43-
'data': sharedPosts,
44-
},
45-
);
40+
return Response.json(body: {'status': 'success', 'data': sharedPosts});
4641
}
4742

4843
Future<Response> _post(
@@ -76,9 +71,6 @@ Future<Response> _post(
7671
final sharedPost = Post.fromPostView(dbPost!);
7772

7873
return Response.json(
79-
body: {
80-
'status': 'success',
81-
'data': sharedPost.toJson(),
82-
},
74+
body: {'status': 'success', 'data': sharedPost.toJson()},
8375
);
8476
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:dart_frog/dart_frog.dart';
2+
import 'package:dart_frog_auth/dart_frog_auth.dart';
3+
import 'package:stormberry/stormberry.dart';
4+
5+
import '../_middleware.dart';
6+
import '../authenticator.dart';
7+
8+
Handler middleware(Handler handler) {
9+
final authy = Authenticator(database: database);
10+
return handler
11+
.use(
12+
provider<Database>((context) {
13+
return database;
14+
}),
15+
)
16+
.use(
17+
bearerAuthentication<bool>(
18+
authenticator: (context, token) {
19+
return authy.verifyToken(token);
20+
},
21+
),
22+
);
23+
}

0 commit comments

Comments
 (0)