index.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. const { Keystone } = require('@keystonejs/keystone');
  2. const { PasswordAuthStrategy } = require('@keystonejs/auth-password');
  3. const { Text, Checkbox, Password } = require('@keystonejs/fields');
  4. const { GraphQLApp } = require('@keystonejs/app-graphql');
  5. const { AdminUIApp } = require('@keystonejs/app-admin-ui');
  6. const { StaticApp } = require('@keystonejs/app-static');
  7. //const { expressSession } = require('express-session');
  8. //const { FileSessionStore } = require('session-file-store')(expressSession);
  9. const fs = require('fs');
  10. // Lists
  11. const CashregistersSchema = require('./schema/cashregisters.js');
  12. const CashregisterdocsSchema = require('./schema/cashregisterdocs.js');
  13. const CompaniesSchema = require('./schema/companies.js');
  14. const CurrencySchema = require('./schema/currency.js');
  15. const DeliveryitemsSchema = require('./schema/deliveryitems.js');
  16. const DeliverymaterialpricesSchema = require('./schema/deliverymaterialprices.js');
  17. const DocflowSchema = require('./schema/docflow.js');
  18. const DocnumbersSchema = require('./schema/docnumbers.js')
  19. const DocpaymentSchema = require('./schema/docpayment.js');
  20. const DocumentsSchema = require('./schema/documents.js');
  21. const Eshop_removedSchema = require('./schema/eshop_removed.js');
  22. const Feature_groups_featuresSchema = require('./schema/feature_groups_features.js');
  23. const Feature_groupsSchema = require('./schema/feature_groups.js');
  24. const FeaturesSchema = require('./schema/features.js');
  25. const FeaturesvalSchema = require('./schema/featuresval.js');
  26. const FifopartSchema = require('./schema/fifopart.js');
  27. const FifoposSchema = require('./schema/fifopos.js');
  28. const ItemsSchema = require('./schema/items.js');
  29. const KindsSchema = require('./schema/kinds.js')
  30. const LocationsSchema = require('./schema/locations.js');
  31. const LogsSchema = require('./schema/logs.js');
  32. const MaterialsSchema = require('./schema/materials.js');
  33. const Monitor_logsSchema = require('./schema/monitor_logs.js');
  34. const OperatorgroupprivilegesSchema = require('./schema/operatorgroupprivileges.js');
  35. const OperatorgroupsSchema = require('./schema/operatorgroups.js');
  36. const Operators_cashregistersSchema = require('./schema/operators_cashregisters.js');
  37. const Operators_settingsSchema = require('./schema/operators_settings.js');
  38. const Operators_shopsSchema = require('./schema/operators_shops.js');
  39. const OperatorsSchema = require('./schema/operators.js');
  40. const PicturesSchema = require('./schema/pictures.js');
  41. const PositionsSchema = require('./schema/positions.js');
  42. const PrinttemplatesSchema = require('./schema/printtemplates.js');
  43. const Product_minmax_featuresSchema = require('./schema/product_minmax_features.js');
  44. const ProductfeaturesSchema = require('./schema/productfeatures.js');
  45. const Products_minmaxSchema = require('./schema/products_minmax.js');
  46. const ProductsgroupSchema = require('./schema/productsgroup.js');
  47. const ProductsSchema = require('./schema/products.js');
  48. const SettlementsSchema = require('./schema/settlements.js');
  49. const ShopsSchema = require('./schema/shops.js');
  50. const Stocktaking_itemsSchema = require('./schema/stocktaking_items.js');
  51. const StocktakingSchema = require('./schema/stocktaking.js');
  52. const SupaddressSchema = require('./schema/supaddress.js');
  53. const SuppliersSchema = require('./schema/suppliers.js');
  54. const SysparamsSchema = require('./schema/sysparams.js');
  55. const SysprivilegesSchema = require('./schema/sysprivileges.js');
  56. const TagtemplateobjectsSchema = require('./schema/tagtemplateobjects.js');
  57. const TagtemplatesSchema = require('./schema/tagtemplates.js');
  58. const TransferdocreceivedSchema = require('./schema/transferdocreceived.js');
  59. const UninumbersSchema = require('./schema/uninumbers.js');
  60. const UomSchema = require('./schema/uom.js');
  61. const UpgradelogSchema = require('./schema/upgradelog.js');
  62. const VatSchema = require('./schema/vat.js');
  63. //const Logger = require('@keystonejs/logger').logger('test');
  64. // ??? const initialiseData = require('./initial-data');
  65. const { KnexAdapter: Adapter } = require('@keystonejs/adapter-knex');
  66. const PROJECT_NAME = 'SchuStock';
  67. const adapterConfig = { knexOptions: {
  68. connection: 'postgresql://kdev_postgres:utnQ67pt74bVw6aB@postgres:5432/kdev_postgres',
  69. //connection: 'postgresql://kdev_postgres:utnQ67pt74bVw6aB@54.37.131.206:5432/kdev_postgres',
  70. }
  71. };
  72. /*
  73. const { v4: uuid } = require('uuid');
  74. const { CloudinaryAdapter } = require('@keystonejs/file-adapters');
  75. const { Wysiwyg } = require('@keystonejs/fields-wysiwyg-tinymce')
  76. */
  77. const keystone = new Keystone({
  78. adapter: new Adapter(adapterConfig),
  79. //onConnect: process.env.CREATE_TABLES !== 'true' && initialiseData,
  80. /// ???? onConnect: initialiseData,
  81. //secureCookies: false,
  82. /*
  83. cookie: {
  84. secure: process.env.NODE_ENV === 'production', // Default to true in production
  85. //secure: true, // Default to true in production
  86. maxAge: 1000 * 60 * 60 * 24 * 30, // 30 days
  87. sameSite: false,
  88. },
  89. */
  90. cookieSecret: 'dupa23',
  91. name: 'SchuStock',
  92. brand: 'Jubiler Schubert',
  93. // port: 3000,
  94. // host: '0.0.0.0',
  95. //sessionStore: new FileSessionStore({ }),
  96. });
  97. //keystone.set('signin logo', ['https://jubilerschubert.pl/wp-content/uploads/schubert_logo.svg', 180, 42]);
  98. //keystone.set('host', '0.0.0.0');
  99. // Access control functions
  100. const userIsAdmin = ({ authentication: { item: user } }) => Boolean(user && user.isAdmin);
  101. const userOwnsItem = ({ authentication: { item: user } }) => {
  102. if (!user) {
  103. return false;
  104. }
  105. // Instead of a boolean, you can return a GraphQL query:
  106. // https://www.keystonejs.com/api/access-control#graphqlwhere
  107. return { id: user.id };
  108. };
  109. const userIsAdminOrOwner = auth => {
  110. const isAdmin = access.userIsAdmin(auth);
  111. const isOwner = access.userOwnsItem(auth);
  112. return isAdmin ? isAdmin : isOwner;
  113. };
  114. const access = { userIsAdmin, userOwnsItem, userIsAdminOrOwner };
  115. keystone.createList('User', {
  116. fields: {
  117. name: { type: Text },
  118. email: {
  119. type: Text,
  120. isUnique: true,
  121. },
  122. isAdmin: {
  123. type: Checkbox,
  124. // Field-level access controls
  125. // Here, we set more restrictive field access so a non-admin cannot make themselves admin.
  126. access: {
  127. update: access.userIsAdmin,
  128. },
  129. },
  130. password: {
  131. type: Password,
  132. },
  133. },
  134. // List-level access controls
  135. /*
  136. access: {
  137. read: access.userIsAdminOrOwner,
  138. update: access.userIsAdminOrOwner,
  139. create: access.userIsAdmin,
  140. delete: access.userIsAdmin,
  141. auth: true,
  142. },
  143. */
  144. });
  145. const authStrategy = keystone.createAuthStrategy({
  146. type: PasswordAuthStrategy,
  147. list: 'User',
  148. });
  149. keystone.createList('cashregisters', CashregistersSchema);
  150. keystone.createList('cashregisterdocs', CashregisterdocsSchema);
  151. keystone.createList('companies', CompaniesSchema);
  152. keystone.createList('currency', CurrencySchema);
  153. keystone.createList('deliveryitems', DeliveryitemsSchema);
  154. keystone.createList('deliverymaterialprices', DeliverymaterialpricesSchema);
  155. keystone.createList('docflow', DocflowSchema);
  156. keystone.createList('docnumbers', DocnumbersSchema);
  157. keystone.createList('docpayment', DocpaymentSchema);
  158. keystone.createList('documents', DocumentsSchema);
  159. keystone.createList('eshop_removed', Eshop_removedSchema);
  160. keystone.createList('feature_groups_features', Feature_groups_featuresSchema);
  161. keystone.createList('feature_groups', Feature_groupsSchema);
  162. keystone.createList('features', FeaturesSchema);
  163. keystone.createList('featuresval', FeaturesvalSchema);
  164. keystone.createList('fifopart', FifopartSchema);
  165. keystone.createList('fifopos', FifoposSchema);
  166. keystone.createList('items', ItemsSchema); // todo: spr
  167. keystone.createList('kinds', KindsSchema);
  168. keystone.createList('locations', LocationsSchema);
  169. keystone.createList('logs', LogsSchema);
  170. keystone.createList('materials', MaterialsSchema);
  171. keystone.createList('monitor_logs', Monitor_logsSchema);
  172. keystone.createList('operatorgroupprivileges', OperatorgroupprivilegesSchema);
  173. keystone.createList('operatorgroups', OperatorgroupsSchema);
  174. keystone.createList('operators_cashregisters', Operators_cashregistersSchema);
  175. keystone.createList('operators_settings', Operators_settingsSchema);
  176. keystone.createList('operators_shops', Operators_shopsSchema);
  177. keystone.createList('operators', OperatorsSchema);
  178. keystone.createList('pictures', PicturesSchema);
  179. keystone.createList('positions', PositionsSchema);
  180. keystone.createList('printtemplates', PrinttemplatesSchema);
  181. keystone.createList('product_minmax_features', Product_minmax_featuresSchema);
  182. keystone.createList('productfeatures', ProductfeaturesSchema);
  183. keystone.createList('products_minmax', Products_minmaxSchema);
  184. keystone.createList('products', ProductsSchema);
  185. keystone.createList('productsgroup', ProductsgroupSchema);
  186. keystone.createList('settlements', SettlementsSchema);
  187. keystone.createList('shops', ShopsSchema);
  188. keystone.createList('stocktaking_items', Stocktaking_itemsSchema);
  189. keystone.createList('stocktaking', StocktakingSchema);
  190. keystone.createList('supaddress', SupaddressSchema);
  191. keystone.createList('suppliers', SuppliersSchema);
  192. keystone.createList('sysparams', SysparamsSchema);
  193. keystone.createList('sysprivileges', SysprivilegesSchema);
  194. keystone.createList('tagtemplateobjects', TagtemplateobjectsSchema);
  195. keystone.createList('tagtemplates', TagtemplatesSchema);
  196. keystone.createList('transferdocreceived', TransferdocreceivedSchema);
  197. keystone.createList('uninumbers', UninumbersSchema);
  198. keystone.createList('uom', UomSchema);
  199. keystone.createList('upgradelog', UpgradelogSchema);
  200. keystone.createList('vat', VatSchema);
  201. //console.log(keystone._providers);
  202. /*
  203. const {
  204. resolveAllKeys,
  205. arrayToObject,
  206. mapKeys,
  207. objMerge,
  208. flatten,
  209. unique,
  210. filterValues,
  211. compose,
  212. } = require('@keystonejs/utils');
  213. //console.log(keystone._providers);
  214. //console.log(keystone._providers.map(p => console.log(p.lists)));
  215. //const queries = unique(flatten(this._providers.map(p => p.lists.map(x => console.log(x.getGqlQueries())))));
  216. //const queries = unique(flatten(this._providers.map(p => p.lists.map(x => console.log())));
  217. //console.log(keystone._providers.map(p => console.log(p.lists)));//.map(x => x.getGqlQueries())));
  218. //console.log(keystone._providers[0].getQueries('public'));
  219. //const mutations = unique(flatten(keystone._providers.map(p => p.getMutations('public'))));
  220. //console.log(flatten(keystone._providers.map(p => p.getTypes('public'))));
  221. //queries.length > 0 && `type Query { ${queries.join('\n')} }`,
  222. //mutations.length > 0 && `type Mutation { ${mutations.join('\n')} }`,
  223. //console.log(keystone._providers);
  224. //console.log(keystone.getTypeDefs('public'));
  225. /*
  226. if (typeof process.env.DUMP_SCHEMA === 'string') {
  227. keystone.dumpSchema(process.env.DUMP_SCHEMA, 'public');
  228. console.log(`Schema dumped to: ${path.resolve(process.env.DUMP_SCHEMA)}`);
  229. process.exit(0);
  230. }
  231. function function2() {
  232. console.log(keystone);
  233. }
  234. setTimeout(function2, 100);
  235. */
  236. module.exports = {
  237. keystone,
  238. apps: [
  239. new GraphQLApp(),
  240. new StaticApp({ path: '/', src: 'dist/public' }),
  241. new AdminUIApp(),
  242. /*
  243. new AdminUIApp({
  244. name: 'SchuStocc',
  245. enableDefaultRoute: true,
  246. authStrategy,
  247. }),
  248. */
  249. ],
  250. /*configureExpress: app => {
  251. app.set('trust proxy', true);
  252. }*/
  253. };