Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion server/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: '3.5'
version: '3.7'

services:
postgres:
Expand All @@ -13,6 +13,7 @@ services:
ports:
- "5432:5432"
restart: unless-stopped
platform: linux/amd64

volumes:
postgres:
28 changes: 13 additions & 15 deletions server/routes/api/v1/_middleware.dart
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -24,16 +22,16 @@ final database = Database(
);

Handler middleware(Handler handler) {
return handler.use(
provider<Database>((context) {
return database;
}),
).use(
bearerAuthentication<User>(
authenticator: (context, token) async {
final authy = context.read<Authy>();
return authy.verifyToken(token);
},
),
);
final authy = Authenticator(database: database);
return handler
.use(
provider<Authenticator>((context) {
return authy;
}),
)
.use(
provider<Database>((context) {
return database;
}),
);
}
4 changes: 2 additions & 2 deletions server/routes/api/v1/auth/login.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<Response> onRequest(RequestContext context) async {
switch (context.request.method) {
Expand Down Expand Up @@ -66,7 +66,7 @@ Future<Response> _login(
);
}

final authy = context.read<Authy>();
final authy = context.read<Authenticator>();
final token = await authy.generateToken(User.fromUserView(user));

return Response.json(
Expand Down
9 changes: 4 additions & 5 deletions server/routes/api/v1/auth/register.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ Future<Response> _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!',
},
);
}
Expand All @@ -62,10 +64,7 @@ Future<Response> _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: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Response> onRequest(RequestContext context) async {
switch (context.request.method) {
Expand All @@ -20,14 +19,18 @@ Future<Response> 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<User?> verifyToken(String? token) async {
Future<bool> verifyToken(String? token) async {
if (token == null) {
return null;
return false;
}

final users = await database.users.queryUsers();
Expand All @@ -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<String> generateToken(User user) async {
Expand Down
23 changes: 23 additions & 0 deletions server/routes/api/v1/posts/_middleware.dart
Original file line number Diff line number Diff line change
@@ -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<Database>((context) {
return database;
}),
)
.use(
bearerAuthentication<bool>(
authenticator: (context, token) {
return authy.verifyToken(token);
},
),
);
}
12 changes: 2 additions & 10 deletions server/routes/api/v1/posts/index.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,7 @@ Future<Response> _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<Response> _post(
Expand Down Expand Up @@ -76,9 +71,6 @@ Future<Response> _post(
final sharedPost = Post.fromPostView(dbPost!);

return Response.json(
body: {
'status': 'success',
'data': sharedPost.toJson(),
},
body: {'status': 'success', 'data': sharedPost.toJson()},
);
}
23 changes: 23 additions & 0 deletions server/routes/api/v1/stories/_middleware.dart
Original file line number Diff line number Diff line change
@@ -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<Database>((context) {
return database;
}),
)
.use(
bearerAuthentication<bool>(
authenticator: (context, token) {
return authy.verifyToken(token);
},
),
);
}
Loading