Implement chat server auth, models, handlers, and docs context
This commit is contained in:
1 parent
23602efd5f
commit
f6b27565cd
16 files changed
+1285
-152
No files matched your search
+14
-26
@@ -1,5 +1,3 @@
|
||||
import 'package:chat_server/models.dart';
|
||||
import 'package:chat_server/objectbox.g.dart';
|
||||
import 'package:hotreloader/hotreloader.dart';
|
||||
import 'package:relic/relic.dart';
|
||||
|
||||
@@ -9,13 +7,7 @@ import 'src/handlers/auth_handlers.dart';
|
||||
import 'src/handlers/channel_handlers.dart';
|
||||
import 'src/handlers/message_handlers.dart';
|
||||
import 'src/handlers/public_handlers.dart';
|
||||
import 'src/utils/extensions.dart';
|
||||
|
||||
// Global ObjectBox store and boxes
|
||||
late final Store store;
|
||||
late final Box<User> userBox;
|
||||
late final Box<Channel> channelBox;
|
||||
late final Box<Message> messageBox;
|
||||
import 'src/state/app_state.dart';
|
||||
|
||||
RelicApp? _currentApp;
|
||||
|
||||
@@ -24,34 +16,34 @@ Future<void> startServer() async {
|
||||
|
||||
_currentApp = RelicApp()
|
||||
// ============ PUBLIC ENDPOINTS (no auth) ============
|
||||
|
||||
|
||||
// Auth
|
||||
..post('/auth/register', registerHandler)
|
||||
..post('/auth/login', loginHandler)
|
||||
..post('/auth/join', joinServerHandler)
|
||||
|
||||
|
||||
// Public identity verification (for cross-server)
|
||||
..get('/.well-known/users/<username>', publicUserHandler)
|
||||
..get('/.well-known/verify/<userId>', publicVerifyHandler)
|
||||
..get('/.well-known/users/:username', publicUserHandler)
|
||||
..get('/.well-known/verify/:userId', publicVerifyHandler)
|
||||
..get('/.well-known/server', publicServerInfoHandler)
|
||||
|
||||
|
||||
// ============ PROTECTED ENDPOINTS (requires auth) ============
|
||||
..use('/api', jwtMiddleware)
|
||||
|
||||
|
||||
// Current user
|
||||
..get('/api/me', getMeHandler)
|
||||
|
||||
|
||||
// Channels
|
||||
..get('/api/channels', getChannelsHandler)
|
||||
..post('/api/channels', createChannelHandler)
|
||||
..get('/api/channels/<channelId>', getChannelHandler)
|
||||
|
||||
..get('/api/channels/:channelId', getChannelHandler)
|
||||
|
||||
// Messages
|
||||
..get('/api/messages', getMessagesHandler)
|
||||
..post('/api/messages', sendMessageHandler)
|
||||
..put('/api/messages/<messageId>', editMessageHandler)
|
||||
..delete('/api/messages/<messageId>', deleteMessageHandler)
|
||||
|
||||
..put('/api/messages/:messageId', editMessageHandler)
|
||||
..delete('/api/messages/:messageId', deleteMessageHandler)
|
||||
|
||||
// ============ LOGGING & FALLBACK ============
|
||||
..use('/', logRequests())
|
||||
..fallback = respondWith((_) => Response.notFound());
|
||||
@@ -68,11 +60,7 @@ Future<void> startServer() async {
|
||||
}
|
||||
|
||||
void main() async {
|
||||
// Initialize ObjectBox
|
||||
store = openStore();
|
||||
userBox = store.box<User>();
|
||||
channelBox = store.box<Channel>();
|
||||
messageBox = store.box<Message>();
|
||||
initializeStore();
|
||||
|
||||
// Enable hot reload in development
|
||||
await HotReloader.create(
|
||||
|
||||
Reference in new issue
Block a user