-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwdgi.go
92 lines (81 loc) · 2.89 KB
/
wdgi.go
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
package main
import (
"net/http"
agi "imuslab.com/arozos/mod/agi"
prout "imuslab.com/arozos/mod/prouter"
"imuslab.com/arozos/mod/utils"
)
var (
WDGIGateway *wdgi.Gateway
)
func WDGIInit() {
//Create new WDGI Gateway object
gw, err := wdgi.NewGateway(wdgi.WdgiSysInfo{
BuildVersion: build_version,
InternalVersion: internal_version,
LoadedModule: moduleHandler.GetModuleNameList(),
ReservedTables: []string{"auth", "permisson", "register", "desktop"},
ModuleRegisterParser: moduleHandler.RegisterModuleFromAGI,
PackageManager: packageManager,
UserHandler: userHandler,
StartupRoot: "./app",
ActivateScope: []string{"./app", "./subservice"},
FileSystemRender: thumbRenderHandler,
ShareManager: shareManager,
NightlyManager: nightlyManager,
TempFolderPath: *tmp_directory,
})
if err != nil {
systemWideLogger.PrintAndLog("WDGI", "WDGI Gateway Initialization Failed", err)
}
//Register user request handler endpoint
http.HandleFunc("/system/wdgi/interface", func(w http.ResponseWriter, r *http.Request) {
//Require login check
authAgent.HandleCheckAuth(w, r, func(w http.ResponseWriter, r *http.Request) {
//API Call from actual human users
thisuser, _ := gw.Option.UserHandler.GetUserInfoFromRequest(w, r)
gw.InterfaceHandler(w, r, thisuser)
})
})
//Register external API request handler endpoint
http.HandleFunc("/api/wdgi/interface", func(w http.ResponseWriter, r *http.Request) {
//Check if token exists
token, err := utils.PostPara(r, "token")
if err != nil {
w.WriteHeader(http.StatusUnauthorized)
w.Write([]byte("401 - Unauthorized (token is empty)"))
return
}
//Validate Token
if authAgent.TokenValid(token) {
//Valid
thisUsername, err := gw.Option.UserHandler.GetAuthAgent().GetTokenOwner(token)
if err != nil {
systemWideLogger.PrintAndLog("WDGI", "Unable to validate token owner", err)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("500 - Internal Server Error"))
return
}
thisuser, _ := gw.Option.UserHandler.GetUserInfoFromUsername(thisUsername)
gw.APIHandler(w, r, thisuser)
} else {
w.WriteHeader(http.StatusUnauthorized)
w.Write([]byte("401 - Unauthorized (Invalid / expired token)"))
return
}
})
http.HandleFunc("/api/wdgi/exec", gw.HandleAgiExecutionRequestWithToken)
// external WDGI related function
externalWDGIRouter := prout.NewModuleRouter(prout.RouterOption{
ModuleName: "WDE Serverless",
AdminOnly: false,
UserHandler: userHandler,
DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
errorHandlePermissionDenied(w, r)
},
})
externalWDGIRouter.HandleFunc("/api/wdgi/listExt", gw.ListExternalEndpoint)
externalWDGIRouter.HandleFunc("/api/wdgi/addExt", gw.AddExternalEndPoint)
externalWDGIRouter.HandleFunc("/api/wdgi/rmExt", gw.RemoveExternalEndPoint)
WDGIGateway = gw
}