Emalawi19 commited on
Commit
861aee8
·
verified ·
1 Parent(s): 3ab56e0

Create api/register.php

Browse files
Files changed (1) hide show
  1. api/register.php +69 -0
api/register.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ header('Content-Type: application/json');
3
+ header('Access-Control-Allow-Origin: *');
4
+ header('Access-Control-Allow-Methods: POST, OPTIONS');
5
+ header('Access-Control-Allow-Headers: Content-Type');
6
+
7
+ if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
8
+ http_response_code(204);
9
+ exit;
10
+ }
11
+
12
+ if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
13
+ http_response_code(405);
14
+ echo json_encode(['error' => 'Method not allowed']);
15
+ exit;
16
+ }
17
+
18
+ $input = json_decode(file_get_contents('php://input'), true);
19
+ $username = trim($input['username'] ?? '');
20
+
21
+ // Validate username
22
+ if (!preg_match('/^[a-z0-9]{3,32}$/', $username)) {
23
+ http_response_code(400);
24
+ echo json_encode(['error' => 'Username must be 3-32 lowercase letters and numbers only']);
25
+ exit;
26
+ }
27
+
28
+ // Reserved words blacklist
29
+ $reserved = ['api','www','mail','admin','root','static','assets','blog','app'];
30
+ if (in_array($username, $reserved)) {
31
+ http_response_code(400);
32
+ echo json_encode(['error' => 'That username is reserved']);
33
+ exit;
34
+ }
35
+
36
+ // Connect to SQLite
37
+ $db = new PDO('sqlite:/data/db/platform.sqlite');
38
+ $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
39
+
40
+ // Check if username already exists
41
+ $stmt = $db->prepare('SELECT id FROM users WHERE username = ?');
42
+ $stmt->execute([$username]);
43
+ if ($stmt->fetch()) {
44
+ http_response_code(409);
45
+ echo json_encode(['error' => 'Username already taken']);
46
+ exit;
47
+ }
48
+
49
+ // Create the user's site directory
50
+ $htdocs = "/data/sites/{$username}/htdocs";
51
+ if (!mkdir($htdocs, 0755, true)) {
52
+ http_response_code(500);
53
+ echo json_encode(['error' => 'Failed to create site directory']);
54
+ exit;
55
+ }
56
+ chown($htdocs, 'www-data');
57
+
58
+ // Create a default index.php for the user
59
+ file_put_contents("{$htdocs}/index.php", "<?php\necho '<h1>Welcome, {$username}!</h1>';\necho '<p>Edit this file to build your site.</p>';\n");
60
+
61
+ // Save user to database
62
+ $stmt = $db->prepare('INSERT INTO users (username) VALUES (?)');
63
+ $stmt->execute([$username]);
64
+
65
+ echo json_encode([
66
+ 'success' => true,
67
+ 'username' => $username,
68
+ 'message' => 'Site created successfully'
69
+ ]);