@simitgroup/simpleapp-generator 1.0.25 → 1.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/framework.js +3 -1
- package/dist/framework.js.map +1 -1
- package/package.json +1 -1
- package/src/framework.ts +3 -1
- package/templates/nest/app.module.eta +26 -1
- package/templates/nest/nest.env.eta +3 -0
- package/templates/nuxt/nuxt.config.ts.eta +1 -1
- package/templates/nuxt/server.api.auth[...].ts.eta +227 -138
package/dist/framework.js
CHANGED
|
@@ -42,6 +42,8 @@ let config = {
|
|
|
42
42
|
"frontendPort": "8080",
|
|
43
43
|
"openapi3Yaml": "../openapi.yaml",
|
|
44
44
|
"keycloaksetting": {
|
|
45
|
+
"OAUTH2_BASEURL": "https://keycloak-server-url/",
|
|
46
|
+
"OAUTH2_REALM": "realm-name",
|
|
45
47
|
"OAUTH2_CONFIGURL": "https://keycloak-server-url/realms/realm-name",
|
|
46
48
|
"OAUTH2_CLIENTID": "client-id",
|
|
47
49
|
"OAUTH2_CLIENTSECRET": "client-secret-value",
|
|
@@ -87,7 +89,7 @@ const prepareNest = (callback) => {
|
|
|
87
89
|
const targetfolder = config.backendFolder;
|
|
88
90
|
log.info(`creating backend project ${targetfolder}`);
|
|
89
91
|
if (!fs_1.default.existsSync(`${targetfolder}/.env`)) {
|
|
90
|
-
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install --save @nestjs/serve-static axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats @nestjs/config`, async (error, stdout, stderr) => {
|
|
92
|
+
(0, child_process_1.exec)(`cd ${targetfolder};pnpm install --save nest-keycloak-connect keycloak-connect @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats @nestjs/config`, async (error, stdout, stderr) => {
|
|
91
93
|
// log.info(`dependency installed`)
|
|
92
94
|
if (!error) {
|
|
93
95
|
fs_1.default.mkdirSync(`${targetfolder}/public_html`, { recursive: true });
|
package/dist/framework.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAmB;AACnB,iDAAwC;AACxC,iCAAwC;AACxC,sDAAuC;AACvC,6BAA0B;AAC1B,MAAM,GAAG,GAAoB,IAAI,cAAM,EAAE,CAAC;AAE1C,IAAI,MAAM,GAAG;IACT,mBAAmB,EAAC,eAAe;IACnC,eAAe,EAAC,aAAa;IAC7B,aAAa,EAAC,MAAM;IACpB,iBAAiB,EAAC,kEAAkE;IACpF,gBAAgB,EAAC,cAAc;IAC/B,cAAc,EAAC,MAAM;IACrB,cAAc,EAAC,iBAAiB;IAChC,iBAAiB,EAAC;QACd,kBAAkB,EAAC,+CAA+C;QAClE,iBAAiB,EAAC,WAAW;QAC7B,qBAAqB,EAAC,qBAAqB;QAC3C,iBAAiB,EAAC,WAAW;KAChC;CACJ,CAAA;AAEM,MAAM,gBAAgB,GAAC,CAAC,UAAU,EAAC,EAAE;IACxC,MAAM,GAAC,UAAU,CAAA;AACrB,CAAC,CAAA;AAFY,QAAA,gBAAgB,oBAE5B;AACD,2BAA2B;AACpB,MAAM,aAAa,GAAE,CAAC,QAAiB,EAAE,EAAE;IAC9C,MAAM,aAAa,GAAC,MAAM,CAAC,aAAa,CAAA;IACxC,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAC;QAC7B,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAC,CAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAE,aAAa,EAAE,qCAAqC,EAAE,MAAM,CAAC,EAC/F,EAAG,KAAK,EAAE,SAAS,GAAE,CAAC,CAAA;QACtC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAC,CAAC,QAAQ,EAAC,EAAE;YACzB,MAAM,MAAM,GAAG,IAAA,qBAAK,EAAC,MAAM,EAAC,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAC,EAAG,KAAK,EAAE,SAAS,EAAC,CAAC,CAAA;YACtF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAC,CAAC,QAAQ,EAAC,EAAE;gBAC1B,QAAQ,EAAE,CAAA;YACd,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;KACL;SAAI;QACD,QAAQ,EAAE,CAAA;KACb;AACL,CAAC,CAAA;AAdY,QAAA,aAAa,iBAczB;AACD,2BAA2B;AACpB,MAAM,aAAa,GAAG,CAAC,QAAiB,EAAE,EAAE;IAC/C,MAAM,cAAc,GAAC,MAAM,CAAC,cAAc,CAAA;IAC1C,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAC;QAC9B,MAAM,MAAM,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAC,CAAC,aAAa,EAAC,MAAM,EAAC,cAAc,CAAC,EAAC,EAAG,KAAK,EAAE,SAAS,GAAE,CAAC,CAAA;QACvF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAC,CAAC,QAAQ,EAAC,EAAE;YAC1B,QAAQ,EAAE,CAAA;QACd,CAAC,CAAC,CAAA;KACL;SAAI;QACD,QAAQ,EAAE,CAAA;KACb;AACL,CAAC,CAAA;AAVY,QAAA,aAAa,iBAUzB;AAEM,MAAM,WAAW,GAAG,CAAC,QAAiB,EAAC,EAAE;IAC5C,MAAM,YAAY,GAAE,MAAM,CAAC,aAAa,CAAA;IACxC,GAAG,CAAC,IAAI,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAA;IACpD,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,YAAY,OAAO,CAAC,EAAC;QAGtC,IAAA,oBAAI,EAAC,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAmB;AACnB,iDAAwC;AACxC,iCAAwC;AACxC,sDAAuC;AACvC,6BAA0B;AAC1B,MAAM,GAAG,GAAoB,IAAI,cAAM,EAAE,CAAC;AAE1C,IAAI,MAAM,GAAG;IACT,mBAAmB,EAAC,eAAe;IACnC,eAAe,EAAC,aAAa;IAC7B,aAAa,EAAC,MAAM;IACpB,iBAAiB,EAAC,kEAAkE;IACpF,gBAAgB,EAAC,cAAc;IAC/B,cAAc,EAAC,MAAM;IACrB,cAAc,EAAC,iBAAiB;IAChC,iBAAiB,EAAC;QACd,gBAAgB,EAAC,8BAA8B;QAC/C,cAAc,EAAC,YAAY;QAC3B,kBAAkB,EAAC,+CAA+C;QAClE,iBAAiB,EAAC,WAAW;QAC7B,qBAAqB,EAAC,qBAAqB;QAC3C,iBAAiB,EAAC,WAAW;KAChC;CACJ,CAAA;AAEM,MAAM,gBAAgB,GAAC,CAAC,UAAU,EAAC,EAAE;IACxC,MAAM,GAAC,UAAU,CAAA;AACrB,CAAC,CAAA;AAFY,QAAA,gBAAgB,oBAE5B;AACD,2BAA2B;AACpB,MAAM,aAAa,GAAE,CAAC,QAAiB,EAAE,EAAE;IAC9C,MAAM,aAAa,GAAC,MAAM,CAAC,aAAa,CAAA;IACxC,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAC;QAC7B,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAC,CAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAE,aAAa,EAAE,qCAAqC,EAAE,MAAM,CAAC,EAC/F,EAAG,KAAK,EAAE,SAAS,GAAE,CAAC,CAAA;QACtC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAC,CAAC,QAAQ,EAAC,EAAE;YACzB,MAAM,MAAM,GAAG,IAAA,qBAAK,EAAC,MAAM,EAAC,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAC,EAAG,KAAK,EAAE,SAAS,EAAC,CAAC,CAAA;YACtF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAC,CAAC,QAAQ,EAAC,EAAE;gBAC1B,QAAQ,EAAE,CAAA;YACd,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;KACL;SAAI;QACD,QAAQ,EAAE,CAAA;KACb;AACL,CAAC,CAAA;AAdY,QAAA,aAAa,iBAczB;AACD,2BAA2B;AACpB,MAAM,aAAa,GAAG,CAAC,QAAiB,EAAE,EAAE;IAC/C,MAAM,cAAc,GAAC,MAAM,CAAC,cAAc,CAAA;IAC1C,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAC;QAC9B,MAAM,MAAM,GAAG,IAAA,qBAAK,EAAC,KAAK,EAAC,CAAC,aAAa,EAAC,MAAM,EAAC,cAAc,CAAC,EAAC,EAAG,KAAK,EAAE,SAAS,GAAE,CAAC,CAAA;QACvF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAC,CAAC,QAAQ,EAAC,EAAE;YAC1B,QAAQ,EAAE,CAAA;QACd,CAAC,CAAC,CAAA;KACL;SAAI;QACD,QAAQ,EAAE,CAAA;KACb;AACL,CAAC,CAAA;AAVY,QAAA,aAAa,iBAUzB;AAEM,MAAM,WAAW,GAAG,CAAC,QAAiB,EAAC,EAAE;IAC5C,MAAM,YAAY,GAAE,MAAM,CAAC,aAAa,CAAA;IACxC,GAAG,CAAC,IAAI,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAA;IACpD,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,YAAY,OAAO,CAAC,EAAC;QAGtC,IAAA,oBAAI,EAAC,MAAM,YAAY,0OAA0O,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAC,EAAE;YAC7R,mCAAmC;YACnC,IAAG,CAAC,KAAK,EAAC;gBACN,YAAE,CAAC,SAAS,CAAC,GAAG,YAAY,cAAc,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAA;gBAC5D,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,EAAC,KAAK,EAAE,SAAS,CAAC,WAAW,EAAC,CAAC,CAAC;gBACpD,MAAM,SAAS,GAAC,MAAM,CAAA;gBACtB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;gBAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC;gBAC9D,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC;gBAE5E,YAAE,CAAC,aAAa,CAAC,GAAG,YAAY,OAAO,EAAE,MAAM,CAAC,CAAC;gBACjD,YAAE,CAAC,aAAa,CAAC,GAAG,YAAY,cAAc,EAAE,OAAO,CAAC,CAAC;gBACzD,YAAE,CAAC,aAAa,CAAC,GAAG,YAAY,mCAAmC,EAAE,eAAe,CAAC,CAAC;gBACtF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,GAAC,GAAG,GAAC,GAAG,YAAY,gBAAgB,CAAA;gBACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;gBACtC,QAAQ,CAAC,eAAe,CAAC,eAAe,GAAC,IAAI,CAAA;gBAC7C,QAAQ,CAAC,eAAe,CAAC,iBAAiB,GAAC,IAAI,CAAA;gBAC/C,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAEzD,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBAClC,QAAQ,EAAE,CAAA;aAEb;iBAAK;gBACN,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACjB,MAAM,KAAK,CAAA;aACV;QACL,CAAC,CAAC,CAAA;KACL;SAAI;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,2CAA2C,CAAC,CAAA;QACpE,QAAQ,EAAE,CAAA;KACb;AACL,CAAC,CAAA;AArCY,QAAA,WAAW,eAqCvB;AACD,8CAA8C;AACvC,MAAM,WAAW,GAAG,CAAC,QAAiB,EAAC,EAAE;IAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAA;IAC1C,IAAG,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,YAAY,OAAO,CAAC,EAAC;QACtC,mCAAmC;QACnC,IAAA,oBAAI,EAAC,MAAM,YAAY,8IAA8I,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAC,EAAE;YAC5L,mBAAmB;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;YAC9B,IAAA,oBAAI,EAAC,MAAM,YAAY,qPAAqP,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAC,EAAE;gBACvS,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;gBAElC,YAAE,CAAC,SAAS,CAAC,GAAG,YAAY,cAAc,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAA;gBAC5D,YAAE,CAAC,SAAS,CAAC,GAAG,YAAY,UAAU,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAA;gBACxD,YAAE,CAAC,SAAS,CAAC,GAAG,YAAY,aAAa,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAA;gBAC3D,YAAE,CAAC,SAAS,CAAC,GAAG,YAAY,oBAAoB,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAA;gBAClE,YAAE,CAAC,SAAS,CAAC,GAAG,YAAY,kBAAkB,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAA;gBAChE,YAAE,CAAC,SAAS,CAAC,GAAG,YAAY,eAAe,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAA;gBAC7D,YAAE,CAAC,SAAS,CAAC,GAAG,YAAY,UAAU,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAA;gBACxD,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,EAAC,KAAK,EAAE,GAAG,SAAS,CAAC,WAAW,OAAO,EAAC,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAAC,MAAM,CAAA;gBACtB,MAAM,MAAM,GAAG;oBACX,eAAe,EAAC,SAAS;oBACzB,mCAAmC,EAAC,6BAA6B;oBACjE,4BAA4B,EAAC,sBAAsB;oBACnD,iCAAiC,EAAC,2BAA2B;oBAC7D,mCAAmC,EAAC,kCAAkC;oBACtE,2BAA2B,EAAC,qBAAqB;oBACjD,qBAAqB,EAAC,4BAA4B;oBAClD,iCAAiC,EAAC,2BAA2B;oBAC7D,+BAA+B,EAAC,0BAA0B;oBAC1D,sBAAsB,EAAC,gBAAgB;oBACvC,uBAAuB,EAAC,iBAAiB;oBACzC,8BAA8B,EAAC,wBAAwB;oBACvD,uBAAuB,EAAC,iBAAiB;oBACzC,4BAA4B,EAAC,sBAAsB;oBACnD,0BAA0B,EAAC,oBAAoB;oBAC/C,oBAAoB,EAAC,yBAAyB;oBAC9C,WAAW,EAAC,MAAM;iBACrB,CAAA;gBAED,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;gBACpD,KAAI,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,SAAS,CAAC,MAAM,EAAC,CAAC,EAAE,EAAC;oBAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;oBAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;oBACjC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;oBAC5C,MAAM,IAAI,GAAE,GAAG,YAAY,IAAI,QAAQ,EAAE,CAAA;oBACzC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAC,IAAI,CAAC,CAAA;oBACzB,YAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBAC/B;gBAED,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;gBAClC,QAAQ,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;QAEN,CAAC,CAAC,CAAA;KACT;SAAI;QACD,0BAA0B;QAC1B,QAAQ,EAAE,CAAA;KACb;AACL,CAAC,CAAA;AA1DY,QAAA,WAAW,eA0DvB;AAEM,MAAM,UAAU,GAAG,GAAE,EAAE;IAC1B,IAAA,oBAAI,EAAC,MAAM,MAAM,CAAC,cAAc,8DAA8D,CAAC,CAAA;AAEnG,CAAC,CAAA;AAHY,QAAA,UAAU,cAGtB;AACM,MAAM,UAAU,GAAG,GAAE,EAAE;IAC1B,IAAA,oBAAI,EAAC,MAAM,MAAM,CAAC,aAAa,iBAAiB,CAAC,CAAA;AACrD,CAAC,CAAA;AAFY,QAAA,UAAU,cAEtB;AAEM,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACrC,IAAA,oBAAI,EAAC,qCAAqC,MAAM,CAAC,YAAY,OAAO,MAAM,CAAC,cAAc,6DAA6D,CAAC,CAAA;AAC3J,CAAC,CAAA;AAFY,QAAA,oBAAoB,wBAEhC"}
|
package/package.json
CHANGED
package/src/framework.ts
CHANGED
|
@@ -14,6 +14,8 @@ let config = {
|
|
|
14
14
|
"frontendPort":"8080",
|
|
15
15
|
"openapi3Yaml":"../openapi.yaml",
|
|
16
16
|
"keycloaksetting":{
|
|
17
|
+
"OAUTH2_BASEURL":"https://keycloak-server-url/",
|
|
18
|
+
"OAUTH2_REALM":"realm-name",
|
|
17
19
|
"OAUTH2_CONFIGURL":"https://keycloak-server-url/realms/realm-name",
|
|
18
20
|
"OAUTH2_CLIENTID":"client-id",
|
|
19
21
|
"OAUTH2_CLIENTSECRET":"client-secret-value",
|
|
@@ -59,7 +61,7 @@ export const prepareNest = (callback:Function)=>{
|
|
|
59
61
|
if(!fs.existsSync(`${targetfolder}/.env`)){
|
|
60
62
|
|
|
61
63
|
|
|
62
|
-
exec(`cd ${targetfolder};pnpm install --save @nestjs/serve-static axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats @nestjs/config`,async (error, stdout, stderr)=>{
|
|
64
|
+
exec(`cd ${targetfolder};pnpm install --save nest-keycloak-connect keycloak-connect @nestjs/serve-static jsonwebtoken axios @darkwolf/base64url json-schema @wearenova/mongoose-tenant @nestjs/swagger @nestjs/mongoose mongoose ajv ajv-formats @nestjs/config`,async (error, stdout, stderr)=>{
|
|
63
65
|
// log.info(`dependency installed`)
|
|
64
66
|
if(!error){
|
|
65
67
|
fs.mkdirSync(`${targetfolder}/public_html`,{recursive:true})
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { Module,MiddlewareConsumer,NestModule } from '@nestjs/common';
|
|
2
2
|
import { MongooseModule } from '@nestjs/mongoose';
|
|
3
|
+
import { APP_GUARD } from '@nestjs/core';
|
|
4
|
+
import {
|
|
5
|
+
AuthGuard, KeycloakConnectModule,
|
|
6
|
+
ResourceGuard,TokenValidation,
|
|
7
|
+
RoleGuard,PolicyEnforcementMode
|
|
8
|
+
} from 'nest-keycloak-connect';
|
|
3
9
|
import { ConfigModule } from '@nestjs/config';
|
|
4
10
|
import { ServeStaticModule } from '@nestjs/serve-static';
|
|
5
11
|
import { join } from 'path';
|
|
@@ -17,9 +23,28 @@ import {<%= it[i].docname %>Module} from './docs/<%= it[i].doctype %>/<%= it[i].
|
|
|
17
23
|
rootPath: join(__dirname, '..', 'public_html'),
|
|
18
24
|
exclude: ['/api/(.*)'],
|
|
19
25
|
}),
|
|
26
|
+
KeycloakConnectModule.register({
|
|
27
|
+
authServerUrl: process.env.OAUTH2_BASEURL,
|
|
28
|
+
realm: process.env.OAUTH2_REALM,
|
|
29
|
+
clientId: process.env.OAUTH2_CLIENTID,
|
|
30
|
+
secret: process.env.OAUTH2_CLIENTSECRET,
|
|
31
|
+
policyEnforcement: PolicyEnforcementMode.PERMISSIVE,
|
|
32
|
+
tokenValidation: TokenValidation.ONLINE,
|
|
33
|
+
}),
|
|
20
34
|
<% for(let i=0;i<it.length; i++){ %><%= it[i].docname %>Module,<%}%>],
|
|
21
35
|
controllers: [],
|
|
22
|
-
providers: [
|
|
36
|
+
providers: [ {
|
|
37
|
+
provide: APP_GUARD,
|
|
38
|
+
useClass: AuthGuard,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
provide: APP_GUARD,
|
|
42
|
+
useClass: ResourceGuard,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
provide: APP_GUARD,
|
|
46
|
+
useClass: RoleGuard,
|
|
47
|
+
},],
|
|
23
48
|
})
|
|
24
49
|
export class AppModule implements NestModule{
|
|
25
50
|
configure(consumer: MiddlewareConsumer) {
|
|
@@ -6,6 +6,9 @@ PROJECT_NAME=SimpleApp Demo1
|
|
|
6
6
|
PROJECT_DESCRIPTION=Try CRUD
|
|
7
7
|
PROJECT_Version=1.0.0
|
|
8
8
|
|
|
9
|
+
OAUTH2_BASEURL=<%=it.keycloaksetting.OAUTH2_BASEURL%>
|
|
10
|
+
|
|
11
|
+
OAUTH2_REALM=<%=it.keycloaksetting.OAUTH2_REALM%>
|
|
9
12
|
|
|
10
13
|
OAUTH2_CONFIGURL=<%=it.keycloaksetting.OAUTH2_CONFIGURL%>
|
|
11
14
|
|
|
@@ -1,144 +1,233 @@
|
|
|
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
|
-
// console.log("------hihi------")
|
|
31
|
-
const seperateSymbol = '.';
|
|
32
|
-
// const seperateSymbol = '&';
|
|
33
|
-
const xOrg = event.context.params?.xorg ?? ''
|
|
34
|
-
const documentLink = event.context.params?._ ?? ''
|
|
35
|
-
// const platform = event.context.params?.platform ?? ''
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
// console.error("event.context???",event.context)
|
|
39
|
-
const accessToken = session?.accessToken;
|
|
40
|
-
|
|
41
|
-
// const allowPlatform = ['report-api', 'cloudapi'];
|
|
42
|
-
// if(!key || !platform || !allowPlatform.includes(platform) || !accessToken) {
|
|
43
|
-
// reject({ statusMessage: 'Unauthorized', statusCode: 401 });
|
|
44
|
-
// // throw createError({ statusMessage: 'Unauthorized', statusCode: 401 })
|
|
45
|
-
// }
|
|
46
|
-
|
|
47
|
-
// let tenantKey = '', organizationKey = '';
|
|
48
|
-
// let xOrg = '';
|
|
49
|
-
|
|
50
|
-
// if(key !== 'system') {
|
|
51
|
-
// [tenantKey, organizationKey] = key.split(seperateSymbol);
|
|
52
|
-
// xOrg = `${tenantKey}/${organizationKey}/`;
|
|
53
|
-
// }
|
|
54
|
-
|
|
55
|
-
// if(key === 'system' && platform == 'cloudapi') {
|
|
56
|
-
// // xOrg = 'MC0wLTA'
|
|
57
|
-
// }
|
|
58
|
-
|
|
59
|
-
let forwardData: any = {};
|
|
60
|
-
|
|
61
|
-
const req = event.node.req;
|
|
62
|
-
|
|
63
|
-
if(req.method == 'POST' || req.method == 'PUT') {
|
|
64
|
-
|
|
65
|
-
forwardData = await readBody(event);
|
|
66
|
-
} else {
|
|
67
|
-
forwardData = getQuery(event);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// if(typeof forwardData === "object" && "_branch" in forwardData) {
|
|
71
|
-
// xOrg = xOrg + forwardData._branch;
|
|
72
|
-
// delete forwardData._branch;
|
|
73
|
-
// }
|
|
74
|
-
|
|
75
|
-
const frontEndRes = event.node.res;
|
|
76
|
-
const url = process.env.SIMPLEAPP_BACKEND_URL + '/' + documentLink;
|
|
77
|
-
// console.warn('backend server-----',url,'xorg',xOrg,'documentLink',documentLink)
|
|
78
|
-
const axiosConfig: any = {
|
|
79
|
-
method: req.method,
|
|
80
|
-
url: url,
|
|
81
|
-
headers: {
|
|
82
|
-
Authorization: `Bearer ${accessToken}`,
|
|
83
|
-
'X-Org': xOrg,
|
|
1
|
+
import { NuxtAuthHandler } from "#auth";
|
|
2
|
+
import KeycloakProvider from "next-auth/providers/keycloak";
|
|
3
|
+
import type { JWT } from "next-auth/jwt";
|
|
4
|
+
// import GithubProvider from "next-auth/providers/github";
|
|
5
|
+
|
|
6
|
+
export default NuxtAuthHandler({
|
|
7
|
+
secret: process.env.AUTH_SECRET_KEY,
|
|
8
|
+
jwt: {
|
|
9
|
+
maxAge: 60 * 60 * 24 * 30,
|
|
10
|
+
},
|
|
11
|
+
providers: [
|
|
12
|
+
// GithubProvider.default({
|
|
13
|
+
// clientId: process.env.GITHUB_ID ?? '',
|
|
14
|
+
// clientSecret: process.env.GITHUB_SECRET ?? '',
|
|
15
|
+
// }),
|
|
16
|
+
// @ts-expect-error
|
|
17
|
+
KeycloakProvider.default({
|
|
18
|
+
clientId: process.env.OAUTH2_CLIENTID ?? "",
|
|
19
|
+
clientSecret: process.env.OAUTH2_CLIENTSECRET ?? "",
|
|
20
|
+
issuer: process.env.OAUTH2_CONFIGURL,
|
|
21
|
+
idToken: true,
|
|
22
|
+
scheme: "oauth2",
|
|
23
|
+
endpoints: {
|
|
24
|
+
authorization: `${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/auth`,
|
|
25
|
+
userInfo: `${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/userinfo`,
|
|
26
|
+
token: `${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/token`,
|
|
27
|
+
logout:
|
|
28
|
+
`${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/logout?redirect_uri=` +
|
|
29
|
+
encodeURIComponent(String(process.env.APP_URL)),
|
|
84
30
|
},
|
|
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
|
-
|
|
31
|
+
// accessTokenUrl: `${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/token`,
|
|
32
|
+
// requestTokenUrl: `${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/token`,
|
|
33
|
+
// profileUrl: `${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/userinfo`,
|
|
34
|
+
token: {
|
|
35
|
+
property: "access_token",
|
|
36
|
+
type: "Bearer",
|
|
37
|
+
name: "Authorization",
|
|
38
|
+
maxAge: 60 * 60 * 24,
|
|
39
|
+
},
|
|
40
|
+
refreshToken: {
|
|
41
|
+
property: "refresh_token",
|
|
42
|
+
maxAge: 60 * 60 * 24 * 30,
|
|
43
|
+
},
|
|
44
|
+
responseType: "code",
|
|
45
|
+
grantType: "authorization_code",
|
|
46
|
+
scope: ["openid", "profile", "email"],
|
|
47
|
+
codeChallengeMethod: "S256",
|
|
48
|
+
redirect: {
|
|
49
|
+
logout: "/",
|
|
50
|
+
callback: "/",
|
|
51
|
+
home: "/",
|
|
52
|
+
},
|
|
53
|
+
}),
|
|
54
|
+
],
|
|
55
|
+
pages: {
|
|
56
|
+
signIn: "/login",
|
|
57
|
+
},
|
|
58
|
+
callbacks: {
|
|
59
|
+
// async redirect({ url, baseUrl }) {
|
|
60
|
+
|
|
61
|
+
// console.log(url, baseUrl)
|
|
62
|
+
// return baseUrl
|
|
63
|
+
// },
|
|
64
|
+
async jwt({ token, account }) {
|
|
65
|
+
// Persist the OAuth access_token to the token right after signin
|
|
66
|
+
if (account) {
|
|
67
|
+
token.accessToken = account.access_token;
|
|
68
|
+
}
|
|
69
|
+
return token;
|
|
70
|
+
},
|
|
71
|
+
async session({ session, token, user }) {
|
|
72
|
+
// console.log("session", session);
|
|
73
|
+
// Send properties to the client, like an access_token from a provider.
|
|
74
|
+
session.accessToken = <string>token.accessToken;
|
|
75
|
+
return session;
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
/*async jwt({ token, account, user }) {
|
|
79
|
+
// Persist the OAuth access_token to the token right after signin
|
|
80
|
+
console.log("token", token);
|
|
81
|
+
console.log("account", account);
|
|
82
|
+
console.log("user", user);
|
|
83
|
+
|
|
84
|
+
// Initial sign in
|
|
85
|
+
if (account && user) {
|
|
86
|
+
// Add access_token, refresh_token and expirations to the token right after signin
|
|
87
|
+
token.accessToken = account.accessToken;
|
|
88
|
+
token.refreshToken = account.refreshToken;
|
|
89
|
+
token.accessTokenExpired =
|
|
90
|
+
Date.now() + (account.expires_in - 15) * 1000;
|
|
91
|
+
token.refreshTokenExpired =
|
|
92
|
+
Date.now() + (account.refresh_expires_in - 15) * 1000;
|
|
93
|
+
token.user = user;
|
|
94
|
+
return token;
|
|
117
95
|
}
|
|
118
96
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
97
|
+
// Return previous token if the access token has not expired yet
|
|
98
|
+
if (Date.now() < token.accessTokenExpired) return token;
|
|
99
|
+
|
|
100
|
+
// Access token has expired, try to update it
|
|
101
|
+
return refreshAccessToken(token);
|
|
102
|
+
|
|
103
|
+
// if (account) {
|
|
104
|
+
// // Save the access token and refresh token in the JWT on the initial login
|
|
105
|
+
// token.accessToken = account.access_token;
|
|
106
|
+
// return {
|
|
107
|
+
// access_token: account.access_token,
|
|
108
|
+
// expires_at: Math.floor(
|
|
109
|
+
// Date.now() / 1000 + account.expires_in
|
|
110
|
+
// ),
|
|
111
|
+
// refresh_token: account.refresh_token,
|
|
112
|
+
// };
|
|
113
|
+
// } else if (Date.now() < token.expires_at * 1000) {
|
|
114
|
+
// // If the access token has not expired yet, return it
|
|
115
|
+
// return token;
|
|
116
|
+
// } else {
|
|
117
|
+
// // If the access token has expired, try to refresh it
|
|
118
|
+
// try {
|
|
119
|
+
// // ${process.env.OAUTH2_CONFIGURL}/.well-known/openid-configuration
|
|
120
|
+
// // We need the `token_endpoint`.
|
|
121
|
+
// const response = await fetch(
|
|
122
|
+
// `${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/token`,
|
|
123
|
+
// {
|
|
124
|
+
// headers: {
|
|
125
|
+
// "Content-Type":
|
|
126
|
+
// "application/x-www-form-urlencoded;charset=UTF-8",
|
|
127
|
+
// },
|
|
128
|
+
// body: new URLSearchParams({
|
|
129
|
+
// client_id: process.env.OAUTH2_CLIENTID ?? "",
|
|
130
|
+
// client_secret:
|
|
131
|
+
// process.env.OAUTH2_CLIENTSECRET ?? "",
|
|
132
|
+
// grant_type: "refresh_token",
|
|
133
|
+
// refresh_token: <string>token.refresh_token,
|
|
134
|
+
// }),
|
|
135
|
+
// method: "POST",
|
|
136
|
+
// }
|
|
137
|
+
// );
|
|
138
|
+
|
|
139
|
+
// const tokens: any = await response.json();
|
|
140
|
+
|
|
141
|
+
// if (!response.ok) throw tokens;
|
|
142
|
+
|
|
143
|
+
// return {
|
|
144
|
+
// ...token, // Keep the previous token properties
|
|
145
|
+
// access_token: tokens.access_token,
|
|
146
|
+
// expires_at: Math.floor(
|
|
147
|
+
// Date.now() / 1000 + tokens.expires_in
|
|
148
|
+
// ),
|
|
149
|
+
// // Fall back to old refresh token, but note that
|
|
150
|
+
// // many providers may only allow using a refresh token once.
|
|
151
|
+
// refresh_token:
|
|
152
|
+
// tokens.refresh_token ?? token.refresh_token,
|
|
153
|
+
// };
|
|
154
|
+
// } catch (error) {
|
|
155
|
+
// console.error("Error refreshing access token", error);
|
|
156
|
+
// // The error property will be used client-side to handle the refresh token error
|
|
157
|
+
// return {
|
|
158
|
+
// ...token,
|
|
159
|
+
// error: "RefreshAccessTokenError" as const,
|
|
160
|
+
// };
|
|
161
|
+
// }
|
|
162
|
+
// }
|
|
163
|
+
return token;
|
|
164
|
+
},
|
|
165
|
+
async session({ session, token, user }) {
|
|
166
|
+
if (token) {
|
|
167
|
+
session.error = <string>token.error;
|
|
168
|
+
session.accessToken = <string>token.accessToken;
|
|
131
169
|
}
|
|
170
|
+
return session;
|
|
171
|
+
}, */
|
|
172
|
+
},
|
|
173
|
+
});
|
|
132
174
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
175
|
+
/* const refreshAccessToken = async (token: JWT) => {
|
|
176
|
+
try {
|
|
177
|
+
if (Date.now() > token.refreshTokenExpired) throw Error;
|
|
178
|
+
const details = {
|
|
179
|
+
client_id: process.env.OAUTH2_CLIENTID,
|
|
180
|
+
client_secret: process.env.OAUTH2_CLIENTSECRET,
|
|
181
|
+
grant_type: ["refresh_token"],
|
|
182
|
+
refresh_token: token.refreshToken,
|
|
183
|
+
};
|
|
184
|
+
const formBody: string[] = [];
|
|
185
|
+
Object.entries(details).forEach(([key, value]: [string, any]) => {
|
|
186
|
+
const encodedKey = encodeURIComponent(key);
|
|
187
|
+
const encodedValue = encodeURIComponent(value);
|
|
188
|
+
formBody.push(encodedKey + "=" + encodedValue);
|
|
189
|
+
});
|
|
190
|
+
const formData = formBody.join("&");
|
|
191
|
+
const url = `${process.env.OAUTH2_CONFIGURL}/protocol/openid-connect/token`;
|
|
192
|
+
const response = await fetch(url, {
|
|
193
|
+
method: "POST",
|
|
194
|
+
headers: {
|
|
195
|
+
"Content-Type":
|
|
196
|
+
"application/x-www-form-urlencoded;charset=UTF-8",
|
|
197
|
+
},
|
|
198
|
+
body: formData,
|
|
199
|
+
});
|
|
200
|
+
const refreshedTokens = await response.json();
|
|
201
|
+
if (!response.ok) throw refreshedTokens;
|
|
202
|
+
return {
|
|
203
|
+
...token,
|
|
204
|
+
accessToken: refreshedTokens.access_token,
|
|
205
|
+
accessTokenExpired:
|
|
206
|
+
Date.now() + (refreshedTokens.expires_in - 15) * 1000,
|
|
207
|
+
refreshToken: refreshedTokens.refresh_token ?? token.refreshToken,
|
|
208
|
+
refreshTokenExpired:
|
|
209
|
+
Date.now() + (refreshedTokens.refresh_expires_in - 15) * 1000,
|
|
210
|
+
};
|
|
211
|
+
} catch (error) {
|
|
212
|
+
console.log('receive', error)
|
|
138
213
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
214
|
+
return {
|
|
215
|
+
...token,
|
|
216
|
+
error: "RefreshAccessTokenError",
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
}; */
|
|
220
|
+
|
|
221
|
+
// import NextAuth from "next-auth"
|
|
222
|
+
// import KeycloakProvider from 'next-auth/providers/keycloak'
|
|
223
|
+
// export const authOptions = {
|
|
224
|
+
// // Configure one or more authentication providers
|
|
225
|
+
// providers: [
|
|
226
|
+
// KeycloakProvider({
|
|
227
|
+
// clientId: process.env.OAUTH2_CLIENTID,
|
|
228
|
+
// clientSecret: process.env.OAUTH2_CLIENTSECRET,
|
|
229
|
+
// issuer: process.env.OAUTH2_CONFIGURL,
|
|
230
|
+
// }),
|
|
231
|
+
// ],
|
|
232
|
+
// }
|
|
233
|
+
// export default NextAuth(authOptions)
|