-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrouter.js
More file actions
166 lines (126 loc) · 4.68 KB
/
Copy pathrouter.js
File metadata and controls
166 lines (126 loc) · 4.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/**
* Created by wellington on 21/07/2017.
*/
let fs = require('fs')
import Init from './init'
import Input from '../core/input'
let routes = []
if (fs.existsSync(`${APP_PATH}/.conf/routes.json`))
routes = require(`${APP_PATH}/.conf/routes.json`)
class Router
{
is_public = (req) =>
{
let route_to = req.path
for (let key in routes)
if(req.path.startsWith(key))
route_to = routes[key]
let regex = new RegExp('{\\*}')
return regex.test(route_to)
}
is_static = (req) =>
{
let route_to = req.path
return route_to == '/favicon.ico'
}
router = (req) =>
{
let params = {}
let route_to = req.path
let controller = 'index'
let method = 'index'
let folder = '/'
let counter = 0
let application_permission = false
let client_id = ''
// check if the path have some route set in router.json
for (let key in routes) if(req.path.startsWith(key)) route_to = routes[key]
let url_params = route_to
// check if some have some pre-assigned application set in the router.json
let permitted_applications = route_to.substring(route_to.lastIndexOf("{")+1,route_to.lastIndexOf("}")).replace(/\s/g,'').split(',')
route_to = route_to.replace(/\{.*\}/, '') // remove the pre-assignment declaration from the variable to avoid fake route
//todo check why this route is remove the last character of the route
let argument = route_to.slice(0,route_to.indexOf(':')).split('/')
let params_arr = route_to.match(/:(\w+(\_)?\w+)\?/g)
let url = req.path.split('/')
// extracting parameters from url
if( params_arr )
{
for ( let i = 0; i < params_arr.length; i++ )
{
let param_name = params_arr[i].replace(':','').replace('?','')
params[param_name] = url[ i + argument.length - 2 ]
}
}
// removing parameters declaration from route to avoid confusing in routing process
route_to = route_to.replace(/\/\:.*\?/, '').split('/')
// #routing process
for( let i = 1; i < route_to.length; i++ )
{
if( route_to[i] != '' && fs.existsSync(`${CTL_PATH}${folder}${route_to[i]}`) )
{
folder = `${folder}${route_to[i]}/`
counter = i
}
}
counter ++
url_params = url_params.replace(folder, '')
if( route_to[ counter ])
{
controller = route_to[ counter ]
url_params = url_params.replace(`${controller}/`, '')
counter ++
url_params = url_params.replace(controller, '')
}
let class_name = controller
if(folder != '/')
{
class_name = `${folder}${controller}`.replace(/^\//, "")
class_name = class_name.split('/').join('_')
}
let test_class = new Init(class_name)
if(route_to[ counter ] && typeof test_class[route_to[counter]] == "function")
{
method = route_to[counter]
url_params = url_params.replace(`${method}/`, '')
counter ++
url_params = url_params.replace(method, '')
}
if(test_class.params)
{
let param_values = url_params.split('/')
let param_keys = test_class.params()
for (let i = 0; i < param_keys.length; i ++) params[param_keys[i]] = param_values[i]
}
global.parameters = params
let input = new Input()
if(input.oauth()) client_id = input.oauth('clientId').toLowerCase()
if(permitted_applications[0] == '') permitted_applications[0] = '*'
if(permitted_applications.includes(client_id) || permitted_applications[0] == '*') application_permission = true
if (test_class.assign)
{
let assigned_applications = test_class.assign()
if(assigned_applications !== undefined && assigned_applications.length && !assigned_applications.includes(client_id))
application_permission = false
else
application_permission = true
permitted_applications = assigned_applications
}
let config =
{
folder:folder,
controller:controller,
class_name:class_name,
method:method,
permission:application_permission,
applications:
{
allowed: permitted_applications,
accessed:client_id
},
params:params
}
return config
}
}
export default Router