@@ -27,10 +27,13 @@ const { LLRead } = require("../../filesystem/ll_operations/ll_read");
27
27
const { Actor, UserActorType, SiteActorType } = require ( "../../services/auth/Actor" ) ;
28
28
const APIError = require ( "../../api/APIError" ) ;
29
29
30
+ const AT_DIRECTORY_NAMESPACE = '4aa6dc52-34c1-4b8a-b63c-a62b27f727cf' ;
31
+
30
32
class PuterSiteMiddleware extends AdvancedBase {
31
33
static MODULES = {
32
34
path : require ( 'path' ) ,
33
35
mime : require ( 'mime-types' ) ,
36
+ uuidv5 : require ( 'uuid' ) . v5 ,
34
37
}
35
38
install ( app ) {
36
39
app . use ( this . run . bind ( this ) ) ;
@@ -66,9 +69,39 @@ class PuterSiteMiddleware extends AdvancedBase {
66
69
67
70
const context = Context . get ( ) ;
68
71
const services = context . get ( 'services' ) ;
72
+
73
+ const get_username_site = ( async ( ) => {
74
+ if ( ! subdomain . endsWith ( '.at' ) ) return ;
75
+ const parts = subdomain . split ( '.' ) ;
76
+ if ( parts . length !== 2 ) return ;
77
+ const username = parts [ 0 ] ;
78
+ if ( ! username . match ( config . username_regex ) ) {
79
+ return ;
80
+ }
81
+ const svc_fs = services . get ( 'filesystem' ) ;
82
+ const index_node = await svc_fs . node ( new NodePathSelector (
83
+ `/${ username } /Public/index.html`
84
+ ) ) ;
85
+ const node = await svc_fs . node ( new NodePathSelector (
86
+ `/${ username } /Public`
87
+ ) ) ;
88
+ if ( ! await index_node . exists ( ) ) return ;
89
+
90
+ return {
91
+ name : username + '.at' ,
92
+ uuid : this . modules . uuidv5 ( username , AT_DIRECTORY_NAMESPACE ) ,
93
+ root_dir_id : await node . get ( 'mysql-id' ) ,
94
+ } ;
95
+ } )
96
+
97
+ const site =
98
+ await get_username_site ( ) ||
99
+ await ( async ( ) => {
100
+ const svc_puterSite = services . get ( 'puter-site' ) ;
101
+ const site = await svc_puterSite . get_subdomain ( subdomain ) ;
102
+ return site ;
103
+ } ) ( ) ;
69
104
70
- const svc_puterSite = services . get ( 'puter-site' ) ;
71
- const site = await svc_puterSite . get_subdomain ( subdomain ) ;
72
105
if ( site === null ) {
73
106
return res . status ( 404 ) . send ( 'Subdomain not found' ) ;
74
107
}
0 commit comments