diff --git a/apps/OpenSignServer/Dockerhubfile b/apps/OpenSignServer/Dockerhubfile index b39cf3db68..45a2aea7ad 100644 --- a/apps/OpenSignServer/Dockerhubfile +++ b/apps/OpenSignServer/Dockerhubfile @@ -1,9 +1,6 @@ # Use an official Node runtime as the base image FROM node:22.14.0 -# install java -RUN wget https://downloads.opensign.me/jdk-23_linux-x64_bin.deb \ - && dpkg -i jdk-23_linux-x64_bin.deb # Set the working directory inside the container WORKDIR /usr/src/app diff --git a/apps/OpenSignServer/databases/migrations/20250424104819-change_permission.cjs b/apps/OpenSignServer/databases/migrations/20250424104819-change_permission.cjs index 19f655268a..efa9a79531 100644 --- a/apps/OpenSignServer/databases/migrations/20250424104819-change_permission.cjs +++ b/apps/OpenSignServer/databases/migrations/20250424104819-change_permission.cjs @@ -2,210 +2,251 @@ * * @param {Parse} Parse */ + +// Helper to create or update a schema +async function ensureSchema(Parse, className, setupFn) { + const schema = new Parse.Schema(className); + setupFn(schema); + try { + // If class exists, update it + await schema.update(); + console.log(`✅ Updated schema for ${className}`); + } catch (e) { + // Otherwise, create it + await schema.save(); + console.log(`✅ Created schema for ${className}`); + } +} + +// Helper to revert CLP (safe if class doesn’t exist) +async function patchSchema(Parse, className, setupFn) { + const schema = new Parse.Schema(className); + setupFn(schema); + try { + await schema.update(); + console.log(`🔄 Reverted schema for ${className}`); + } catch (e) { + console.warn(`⚠️ Skipping ${className} in down (not found)`); + } +} + exports.up = async Parse => { - const schema = new Parse.Schema('contracts_Signature'); - schema.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: {}, - addField: {}, - }); - await schema.update(); - const docSchema = new Parse.Schema('contracts_Document'); - docSchema.setCLP({ - get: { '*': true }, - find: { requiresAuthentication: true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: {}, - addField: { requiresAuthentication: true }, - }); - await docSchema.update(); - const templateSchema = new Parse.Schema('contracts_Template'); - templateSchema.setCLP({ - get: { '*': true }, - find: {}, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: {}, - addField: { requiresAuthentication: true }, - }); - await templateSchema.update(); - const dataFiles = new Parse.Schema('partners_DataFiles'); - dataFiles.setCLP({ - get: {}, - find: {}, - count: {}, - create: { '*': true }, - update: {}, - delete: {}, - addField: { '*': true }, - }); - await dataFiles.update(); - const pTenant = new Parse.Schema('partners_Tenant'); - pTenant.setCLP({ - get: {}, - find: {}, - count: {}, - create: {}, - update: {}, - delete: {}, - addField: {}, - }); - await pTenant.update(); - const TenantCredits = new Parse.Schema('partners_TenantCredits'); - TenantCredits.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: {}, - addField: { '*': true }, - }); - await TenantCredits.update(); - const _user = new Parse.Schema('_User'); - _user.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: {}, - addField: {}, - }); - await _user.update(); - const Migrationdb = new Parse.Schema('Migrationdb'); - Migrationdb.setCLP({ - get: {}, - find: {}, - count: {}, - create: {}, - update: {}, - delete: {}, - addField: {}, - }); - await Migrationdb.update(); - const contactbook = new Parse.Schema('contracts_Contactbook'); - contactbook.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: {}, - addField: {}, - }); - return contactbook.update(); + await ensureSchema(Parse, 'contracts_Signature', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: {}, + addField: {}, + }); + }); + + await ensureSchema(Parse, 'contracts_Document', schema => { + schema.setCLP({ + get: { '*': true }, + find: { requiresAuthentication: true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: {}, + addField: { requiresAuthentication: true }, + }); + }); + + await ensureSchema(Parse, 'contracts_Template', schema => { + schema.setCLP({ + get: { '*': true }, + find: {}, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: {}, + addField: { requiresAuthentication: true }, + }); + }); + + await ensureSchema(Parse, 'partners_DataFiles', schema => { + schema.setCLP({ + get: {}, + find: {}, + count: {}, + create: { '*': true }, + update: {}, + delete: {}, + addField: { '*': true }, + }); + }); + + await ensureSchema(Parse, 'partners_Tenant', schema => { + schema.setCLP({ + get: {}, + find: {}, + count: {}, + create: {}, + update: {}, + delete: {}, + addField: {}, + }); + }); + + await ensureSchema(Parse, 'partners_TenantCredits', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: {}, + addField: { '*': true }, + }); + }); + + await ensureSchema(Parse, '_User', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: {}, + addField: {}, + }); + }); + + await ensureSchema(Parse, 'Migrationdb', schema => { + schema.setCLP({ + get: {}, + find: {}, + count: {}, + create: {}, + update: {}, + delete: {}, + addField: {}, + }); + }); + + await ensureSchema(Parse, 'contracts_Contactbook', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: {}, + addField: {}, + }); + }); }; -/** - * - * @param {Parse} Parse - */ exports.down = async Parse => { - const schema = new Parse.Schema('contracts_Signature'); - schema.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: { '*': true }, - addField: { '*': true }, - }); - await schema.update(); - const docSchema = new Parse.Schema('contracts_Document'); - docSchema.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: { '*': true }, - addField: { '*': true }, - }); - await docSchema.update(); - const templateSchema = new Parse.Schema('contracts_Template'); - templateSchema.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: { '*': true }, - addField: { '*': true }, - }); - await templateSchema.update(); - const dataFiles = new Parse.Schema('partners_DataFiles'); - dataFiles.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: { '*': true }, - addField: { '*': true }, - }); - await dataFiles.update(); - const pTenant = new Parse.Schema('partners_Tenant'); - pTenant.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: { '*': true }, - addField: { '*': true }, - }); - await pTenant.update(); - const TenantCredits = new Parse.Schema('partners_TenantCredits'); - TenantCredits.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: { '*': true }, - addField: { '*': true }, - }); - await TenantCredits.update(); - const _user = new Parse.Schema('_User'); - _user.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: { '*': true }, - addField: { '*': true }, - }); - await _user.update(); - const Migrationdb = new Parse.Schema('Migrationdb'); - Migrationdb.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: { '*': true }, - addField: { '*': true }, - }); - await Migrationdb.update(); - const contactbook = new Parse.Schema('contracts_Contactbook'); - contactbook.setCLP({ - get: { '*': true }, - find: { '*': true }, - count: { '*': true }, - create: { '*': true }, - update: { '*': true }, - delete: { '*': true }, - addField: { '*': true }, - }); - return contactbook.update(); + + await patchSchema(Parse, 'contracts_Signature', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + }); + }); + + await patchSchema(Parse, 'contracts_Document', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + }); + }); + + await patchSchema(Parse, 'contracts_Template', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + }); + }); + + await patchSchema(Parse, 'partners_DataFiles', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + }); + }); + + await patchSchema(Parse, 'partners_Tenant', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + }); + }); + + await patchSchema(Parse, 'partners_TenantCredits', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + }); + }); + + await patchSchema(Parse, '_User', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + }); + }); + + await patchSchema(Parse, 'Migrationdb', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + }); + }); + + await patchSchema(Parse, 'contracts_Contactbook', schema => { + schema.setCLP({ + get: { '*': true }, + find: { '*': true }, + count: { '*': true }, + create: { '*': true }, + update: { '*': true }, + delete: { '*': true }, + addField: { '*': true }, + }); + }); }; diff --git a/apps/OpenSignServer/databases/migrations/20250427105912-add_name_field_user_cls.cjs b/apps/OpenSignServer/databases/migrations/20250427105912-add_name_field_user_cls.cjs new file mode 100644 index 0000000000..6445890858 --- /dev/null +++ b/apps/OpenSignServer/databases/migrations/20250427105912-add_name_field_user_cls.cjs @@ -0,0 +1,19 @@ +/** + * + * @param {Parse} Parse + */ +exports.up = async Parse => { + const userschema = new Parse.Schema('_User'); + userschema.addString('name'); + return userschema.update(null, { useMasterKey: true }); + }; + + /** + * + * @param {Parse} Parse + */ + exports.down = async Parse => { + const userschema = new Parse.Schema('_User'); + userschema.deleteField('name'); + return userschema.update(null, { useMasterKey: true }); + }; \ No newline at end of file diff --git a/apps/OpenSignServer/index.js b/apps/OpenSignServer/index.js index 437ff922f0..472e74ec84 100644 --- a/apps/OpenSignServer/index.js +++ b/apps/OpenSignServer/index.js @@ -231,6 +231,7 @@ if (!process.env.TESTING) { console.log('opensign-server running on port ' + port + '.'); const isWindows = process.platform === 'win32'; // console.log('isWindows', isWindows); + createContactIndex(); const migrate = isWindows ? `set APPLICATION_ID=${process.env.APP_ID}&& set SERVER_URL=${cloudServerUrl}&& set MASTER_KEY=${process.env.MASTER_KEY}&& npx parse-dbtool migrate` @@ -245,7 +246,6 @@ if (!process.env.TESTING) { console.error(`Error: ${stderr}`); return; } - createContactIndex(); console.log(`Command output: ${stdout}`); }); });