diff --git a/server/docker-compose.yaml b/server/docker-compose.yaml index 0fac6d8..e89d501 100644 --- a/server/docker-compose.yaml +++ b/server/docker-compose.yaml @@ -1,4 +1,4 @@ -version: '3.5' +version: '3.7' services: postgres: @@ -13,6 +13,7 @@ services: ports: - "5432:5432" restart: unless-stopped + platform: linux/amd64 volumes: postgres: \ No newline at end of file diff --git a/server/routes/api/v1/_middleware.dart b/server/routes/api/v1/_middleware.dart index a4b644e..6293803 100644 --- a/server/routes/api/v1/_middleware.dart +++ b/server/routes/api/v1/_middleware.dart @@ -1,9 +1,7 @@ import 'package:dart_frog/dart_frog.dart'; -import 'package:dart_frog_auth/dart_frog_auth.dart'; -import 'package:shared/shared.dart'; import 'package:stormberry/stormberry.dart'; -import 'authy.dart'; +import 'authenticator.dart'; /* NOTE: This won't be readable while migration in stormberry, so requires @@ -24,16 +22,16 @@ final database = Database( ); Handler middleware(Handler handler) { - return handler.use( - provider((context) { - return database; - }), - ).use( - bearerAuthentication( - authenticator: (context, token) async { - final authy = context.read(); - return authy.verifyToken(token); - }, - ), - ); + final authy = Authenticator(database: database); + return handler + .use( + provider((context) { + return authy; + }), + ) + .use( + provider((context) { + return database; + }), + ); } diff --git a/server/routes/api/v1/auth/login.dart b/server/routes/api/v1/auth/login.dart index 80d96a2..f7f9496 100644 --- a/server/routes/api/v1/auth/login.dart +++ b/server/routes/api/v1/auth/login.dart @@ -6,7 +6,7 @@ import 'package:db/db.dart' as db; import 'package:shared/shared.dart'; import 'package:stormberry/stormberry.dart'; -import '../authy.dart'; +import '../authenticator.dart'; Future onRequest(RequestContext context) async { switch (context.request.method) { @@ -66,7 +66,7 @@ Future _login( ); } - final authy = context.read(); + final authy = context.read(); final token = await authy.generateToken(User.fromUserView(user)); return Response.json( diff --git a/server/routes/api/v1/auth/register.dart b/server/routes/api/v1/auth/register.dart index a7769bd..2d47fb0 100644 --- a/server/routes/api/v1/auth/register.dart +++ b/server/routes/api/v1/auth/register.dart @@ -37,7 +37,9 @@ Future _register( statusCode: 205, body: { 'status': 'failed', - 'message': 'username ${body['username']} is already taken!', + 'message': + // ignore: lines_longer_than_80_chars + 'username ${body['username']} or email ${body['email']} is already taken!', }, ); } @@ -62,10 +64,7 @@ Future _register( final id = await database.users.insertOne(request); - final sharedUser = User.fromJson({ - ...body, - 'id': id, - }); + final sharedUser = User.fromJson({...body, 'id': id}); return Response.json( body: { diff --git a/server/routes/api/v1/authy.dart b/server/routes/api/v1/authenticator.dart similarity index 83% rename from server/routes/api/v1/authy.dart rename to server/routes/api/v1/authenticator.dart index d8bdf57..73d88f4 100644 --- a/server/routes/api/v1/authy.dart +++ b/server/routes/api/v1/authenticator.dart @@ -4,8 +4,7 @@ import 'package:dart_frog/dart_frog.dart'; import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart'; import 'package:db/db.dart' as db; import 'package:shared/shared.dart'; - -import '_middleware.dart'; +import 'package:stormberry/stormberry.dart'; Future onRequest(RequestContext context) async { switch (context.request.method) { @@ -20,14 +19,18 @@ Future onRequest(RequestContext context) async { } } -class Authy { +class Authenticator { + Authenticator({required this.database}); + + final Database database; + static const String jwtSecret = // ignore: lines_longer_than_80_chars 'JWT SECRET AUTH KEY, I AM SORRY IF THIS GOT HACKED.NOT A PRO BACKEND DEVELOPER XD'; - Future verifyToken(String? token) async { + Future verifyToken(String? token) async { if (token == null) { - return null; + return false; } final users = await database.users.queryUsers(); @@ -39,11 +42,11 @@ class Authy { for (final u in users) { if (u.id == (payload['uid'] as int)) { - return User.fromUserView(u); + return true; } } - return null; + return false; } Future generateToken(User user) async { diff --git a/server/routes/api/v1/posts/_middleware.dart b/server/routes/api/v1/posts/_middleware.dart new file mode 100644 index 0000000..cb35bd6 --- /dev/null +++ b/server/routes/api/v1/posts/_middleware.dart @@ -0,0 +1,23 @@ +import 'package:dart_frog/dart_frog.dart'; +import 'package:dart_frog_auth/dart_frog_auth.dart'; +import 'package:stormberry/stormberry.dart'; + +import '../_middleware.dart'; +import '../authenticator.dart'; + +Handler middleware(Handler handler) { + final authy = Authenticator(database: database); + return handler + .use( + provider((context) { + return database; + }), + ) + .use( + bearerAuthentication( + authenticator: (context, token) { + return authy.verifyToken(token); + }, + ), + ); +} diff --git a/server/routes/api/v1/posts/index.dart b/server/routes/api/v1/posts/index.dart index def6dca..9271243 100644 --- a/server/routes/api/v1/posts/index.dart +++ b/server/routes/api/v1/posts/index.dart @@ -37,12 +37,7 @@ Future _get(RequestContext context) async { sharedPosts = dbPosts.map(Post.fromPostView).toList(); } - return Response.json( - body: { - 'status': 'success', - 'data': sharedPosts, - }, - ); + return Response.json(body: {'status': 'success', 'data': sharedPosts}); } Future _post( @@ -76,9 +71,6 @@ Future _post( final sharedPost = Post.fromPostView(dbPost!); return Response.json( - body: { - 'status': 'success', - 'data': sharedPost.toJson(), - }, + body: {'status': 'success', 'data': sharedPost.toJson()}, ); } diff --git a/server/routes/api/v1/stories/_middleware.dart b/server/routes/api/v1/stories/_middleware.dart new file mode 100644 index 0000000..cb35bd6 --- /dev/null +++ b/server/routes/api/v1/stories/_middleware.dart @@ -0,0 +1,23 @@ +import 'package:dart_frog/dart_frog.dart'; +import 'package:dart_frog_auth/dart_frog_auth.dart'; +import 'package:stormberry/stormberry.dart'; + +import '../_middleware.dart'; +import '../authenticator.dart'; + +Handler middleware(Handler handler) { + final authy = Authenticator(database: database); + return handler + .use( + provider((context) { + return database; + }), + ) + .use( + bearerAuthentication( + authenticator: (context, token) { + return authy.verifyToken(token); + }, + ), + ); +}