@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 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 });
@@ -1 +1 @@
1
- {"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"framework.js","sourceRoot":"","sources":["../src/framework.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simitgroup/simpleapp-generator",
3
- "version": "1.0.25",
3
+ "version": "1.0.27",
4
4
  "description": "frontend nuxtjs and backend nests code generator using jsonschema",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
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
 
@@ -28,7 +28,7 @@ tailwindcss: {
28
28
  globalAppMiddleware: true
29
29
  },
30
30
  security: {
31
- csrf: true,
31
+ //csrf: true, // been force to off csrf cash it crash with nuxt-auth
32
32
  },
33
33
  ssr: true,
34
34
 
@@ -1,144 +1,233 @@
1
- /**
2
- * This file was automatically generated by simpleapp generator during initialization.
3
- * DO NOT MODIFY IT BY HAND.
4
- * last change 2023-09-09
5
- * author: Ks Tan
6
- */
7
-
8
-
9
- import axios from 'axios';
10
- import { getServerSession } from '#auth'
11
- import type { Session } from 'next-auth';
12
-
13
- export default defineEventHandler(async (event) => {
14
- let session:any=null
15
- // console.log('---------hihi---------')
16
-
17
- try {
18
- session = await getServerSession(event)
19
-
20
- } catch (error) {
21
- return sendRedirect(event, '/login', 401)
22
- }
23
- // console.log(session)
24
- return new Promise<any>(async (resolve, reject) => {
25
- if(!session) {
26
- //if(!session || !session.accessToken) {
27
- reject({ statusMessage: 'Unauthorized', statusCode: 401 });
28
- throw createError({ statusMessage: 'Unauthorized', statusCode: 401 })
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
- data: forwardData,
86
- params: forwardData,
87
- }
88
-
89
- // if(key === 'system') {
90
- // axiosConfig.headers["X-Global"] = true;
91
- // delete axiosConfig.headers["X-Org"];
92
- // }
93
-
94
- // if(otherLink.includes('avatar')) {
95
- // axiosConfig.responseType = 'arraybuffer';
96
- // // axiosConfig.headers['Acceptable'] = 'text/html,image/avif,image/webp,image/apng';
97
- // }
98
-
99
- axios(axiosConfig).then((res) => {
100
- if (res.headers['content-type'] === 'image/png') {
101
- // Set the response headers for the image
102
- frontEndRes.setHeader('Content-Type', 'image/png');
103
- frontEndRes.setHeader('Content-Disposition', 'inline');
104
-
105
- // Send the image data as the response body
106
- frontEndRes.end(Buffer.from(res.data, 'binary'));
107
- } else {
108
- // For non-image responses, set the Content-Type header and send the response body
109
- // setHeader(event, 'Content-type', <string>res.headers['Content-Type']);
110
-
111
- frontEndRes.statusCode = res.status;
112
- if(res.statusText) {
113
- frontEndRes.statusMessage = res.statusText;
114
- }
115
-
116
- resolve(res.data);
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
- }).catch((error) => {
120
- // console.log("==============================================================")
121
- // console.log('@@@@@@@@@@@@@ API error', error)
122
- // console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
123
- // console.log('######### response', error.response)
124
- // console.log('#####################################')
125
- // console.log(axiosConfig);
126
- // console.log('#####################################')
127
-
128
- if (error.response?.status && error.response.status == '401') {
129
- return reject({ statusMessage: 'Unauthorized', statusCode: 401 });
130
- // throw createError({ statusMessage: 'Unauthorized', statusCode: 401 })
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
- // reject(error.data)
134
- reject({ statusMessage: error.response.statusText, statusCode: error.response.status });
135
- // resolve({ status: 'ok' })
136
- // throw createError({ statusMessage: 'Bad Requests', statusCode: 404 })
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
- // resolve({
140
- // status: 'ok'
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)