@websy/websy-designs 0.0.129 → 1.0.2

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.
@@ -39,7 +39,19 @@ const sql = {
39
39
  createdate timestamp without time zone DEFAULT now(),
40
40
  editdate timestamp without time zone DEFAULT now()
41
41
  );
42
- `
42
+ `,
43
+ sessions: `
44
+ CREATE TABLE "sessions" (
45
+ "sid" varchar NOT NULL COLLATE "default",
46
+ "sess" json NOT NULL,
47
+ "expire" timestamp(6) NOT NULL
48
+ )
49
+ WITH (OIDS=FALSE);
50
+
51
+ ALTER TABLE "sessions" ADD CONSTRAINT "sessions_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;
52
+
53
+ CREATE INDEX "IDX_sessions_expire" ON "sessions" ("expire");
54
+ `
43
55
  }
44
56
 
45
57
  class PGHelper {
@@ -203,7 +215,9 @@ class PGHelper {
203
215
  }
204
216
  checkTables () {
205
217
  this.createContentTable().then(() => {
206
- this.createTranslationTable()
218
+ this.createTranslationTable().then(() => {
219
+ this.createSessionTable()
220
+ })
207
221
  })
208
222
  }
209
223
  createContentTable () {
@@ -223,6 +237,28 @@ class PGHelper {
223
237
  })
224
238
  })
225
239
  }
240
+ createSessionTable () {
241
+ return new Promise((resolve, reject) => {
242
+ if (process.env.SESSION_TABLE) {
243
+ resolve()
244
+ }
245
+ else {
246
+ this.execute(`
247
+ SELECT COUNT(*) AS tableexists FROM information_schema.tables
248
+ WHERE table_name = 'sessions'
249
+ `).then(result => {
250
+ if (result.rows && result.rows[0] && +result.rows[0].tableexists === 0) {
251
+ this.execute(sql.sessions).then(() => {
252
+ resolve()
253
+ })
254
+ }
255
+ else {
256
+ resolve()
257
+ }
258
+ })
259
+ }
260
+ })
261
+ }
226
262
  createTranslationTable () {
227
263
  return new Promise((resolve, reject) => {
228
264
  this.execute(`
@@ -239,7 +275,7 @@ class PGHelper {
239
275
  }
240
276
  })
241
277
  })
242
- }
278
+ }
243
279
  execute (query) {
244
280
  console.log(query)
245
281
  return new Promise((resolve, reject) => {
@@ -14,7 +14,7 @@ function APIRoutes (dbHelper) {
14
14
  dbHelper.execute(sql).then(response => res.json(response), err => res.json(err))
15
15
  })
16
16
  router.get('/:entity/:id', (req, res) => {
17
- let lang = null
17
+ let lang = process.env.DEFAULT_LANGUAGE
18
18
  if (req.session && req.session.language && req.query.notranslate !== 'true') {
19
19
  lang = req.session.language
20
20
  }
@@ -24,10 +24,11 @@ function APIRoutes (dbHelper) {
24
24
  }, err => res.json(err))
25
25
  })
26
26
  router.get('/:entity', (req, res) => {
27
- let lang = null
27
+ let lang = process.env.DEFAULT_LANGUAGE
28
28
  if (req.session && req.session.language && req.query.notranslate !== 'true') {
29
29
  lang = req.session.language
30
30
  }
31
+ console.log(`lang is ${lang}`)
31
32
  const sql = dbHelper.buildSelect(req.params.entity, req.query, req.query.columns, lang)
32
33
  dbHelper.execute(sql).then(response => {
33
34
  res.json(translate(response))
@@ -172,7 +172,17 @@ function ShopRoutes (dbHelper, engine, app) {
172
172
  dbHelper.execute(sql).then(result => {
173
173
  if (result.rows.length > 0) {
174
174
  let basket = result.rows[0]
175
- basket.items = JSON.parse(basket.items)
175
+ try {
176
+ basket.items = JSON.parse(JSONSafeRead(basket.items))
177
+ }
178
+ catch (error) {
179
+ if (basket.items) {
180
+ basket.items = JSON.parse(basket.items)
181
+ }
182
+ else {
183
+ basket.items = []
184
+ }
185
+ }
176
186
  try {
177
187
  basket.meta = JSON.parse(JSONSafeRead(basket.meta))
178
188
  }
@@ -230,10 +240,10 @@ function ShopRoutes (dbHelper, engine, app) {
230
240
  }
231
241
 
232
242
  function JSONSafeWrite (v) {
233
- return v.replace(/'/g, '\'\'').replace(/\\(?=[bfnrtv0'"])/g, '\\\\').replace(/\t/)
243
+ return v.replace(/'/g, '\'\'').replace(/\\(?=[bfnrtv0'"])/g, '\\\\').replace(/\t/g, '')
234
244
  }
235
245
  function JSONSafeRead (v) {
236
- return v.replace(/''/g, '\'').replace(/\\(?=[^bfnrtv0'"])/g, '\\\\')
246
+ return v.replace(/''/g, '\'').replace(/\\(?=[^bfnrtv0'"])/g, '\\\\').replace(/\t/g, '')
237
247
  }
238
248
 
239
249
  function readyCallback () {
@@ -96,7 +96,7 @@ module.exports = function (options) {
96
96
  DBSession = require('connect-pg-simple')(expressSession)
97
97
  store = new DBSession({
98
98
  pool: dbHelper.pool, // Connection pool, need to make dynamic to accommodate mySql
99
- tableName: 'sessions' // Use another table-name than the default "session" one
99
+ tableName: process.env.SESSION_TABLE || 'sessions' // Use another table-name than the default "session" one
100
100
  })
101
101
  }
102
102
  }
@@ -107,7 +107,21 @@ module.exports = function (options) {
107
107
  cookie: cookieConfig,
108
108
  name: process.env.COOKIE_NAME,
109
109
  store: store
110
- })))
110
+ })))
111
+ if (process.env.TRANSLATE === true || process.env.TRANSLATE === 'true') {
112
+ app.use((req, res, next) => {
113
+ console.log(req.session)
114
+ if (req.query.lang && req.session) {
115
+ req.session.language = req.query.lang
116
+ req.session.save(() => {
117
+ next()
118
+ })
119
+ }
120
+ else {
121
+ next()
122
+ }
123
+ })
124
+ }
111
125
  if (options.uses && Array.isArray(options.uses)) {
112
126
  try {
113
127
  options.uses.forEach(u => app.use(u))