mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-09-05 09:17:39 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
740ccca1f6 | ||
|
|
f3b79cb71f | ||
|
|
f95ea0b9e9 | ||
|
|
647a9ce5b4 | ||
|
|
3f3ca668f5 | ||
|
|
2fd6d1a37a |
@@ -1,9 +1,6 @@
|
|||||||
# Use an official Node runtime as the base image
|
# Use an official Node runtime as the base image
|
||||||
FROM node:22.14.0
|
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
|
# Set the working directory inside the container
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|||||||
@@ -2,210 +2,246 @@
|
|||||||
*
|
*
|
||||||
* @param {Parse} Parse
|
* @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();
|
||||||
|
} catch (e) {
|
||||||
|
// Otherwise, create it
|
||||||
|
await schema.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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();
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
exports.up = async Parse => {
|
exports.up = async Parse => {
|
||||||
const schema = new Parse.Schema('contracts_Signature');
|
await ensureSchema(Parse, 'contracts_Signature', schema => {
|
||||||
schema.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: {},
|
delete: {},
|
||||||
addField: {},
|
addField: {},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await schema.update();
|
|
||||||
const docSchema = new Parse.Schema('contracts_Document');
|
await ensureSchema(Parse, 'contracts_Document', schema => {
|
||||||
docSchema.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { requiresAuthentication: true },
|
find: { requiresAuthentication: true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: {},
|
delete: {},
|
||||||
addField: { requiresAuthentication: true },
|
addField: { requiresAuthentication: true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await docSchema.update();
|
|
||||||
const templateSchema = new Parse.Schema('contracts_Template');
|
await ensureSchema(Parse, 'contracts_Template', schema => {
|
||||||
templateSchema.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: {},
|
find: {},
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: {},
|
delete: {},
|
||||||
addField: { requiresAuthentication: true },
|
addField: { requiresAuthentication: true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await templateSchema.update();
|
|
||||||
const dataFiles = new Parse.Schema('partners_DataFiles');
|
await ensureSchema(Parse, 'partners_DataFiles', schema => {
|
||||||
dataFiles.setCLP({
|
schema.setCLP({
|
||||||
get: {},
|
get: {},
|
||||||
find: {},
|
find: {},
|
||||||
count: {},
|
count: {},
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: {},
|
update: {},
|
||||||
delete: {},
|
delete: {},
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await dataFiles.update();
|
|
||||||
const pTenant = new Parse.Schema('partners_Tenant');
|
await ensureSchema(Parse, 'partners_Tenant', schema => {
|
||||||
pTenant.setCLP({
|
schema.setCLP({
|
||||||
get: {},
|
get: {},
|
||||||
find: {},
|
find: {},
|
||||||
count: {},
|
count: {},
|
||||||
create: {},
|
create: {},
|
||||||
update: {},
|
update: {},
|
||||||
delete: {},
|
delete: {},
|
||||||
addField: {},
|
addField: {},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await pTenant.update();
|
|
||||||
const TenantCredits = new Parse.Schema('partners_TenantCredits');
|
await ensureSchema(Parse, 'partners_TenantCredits', schema => {
|
||||||
TenantCredits.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: {},
|
delete: {},
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await TenantCredits.update();
|
|
||||||
const _user = new Parse.Schema('_User');
|
await ensureSchema(Parse, '_User', schema => {
|
||||||
_user.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: {},
|
delete: {},
|
||||||
addField: {},
|
addField: {},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await _user.update();
|
|
||||||
const Migrationdb = new Parse.Schema('Migrationdb');
|
await ensureSchema(Parse, 'Migrationdb', schema => {
|
||||||
Migrationdb.setCLP({
|
schema.setCLP({
|
||||||
get: {},
|
get: {},
|
||||||
find: {},
|
find: {},
|
||||||
count: {},
|
count: {},
|
||||||
create: {},
|
create: {},
|
||||||
update: {},
|
update: {},
|
||||||
delete: {},
|
delete: {},
|
||||||
addField: {},
|
addField: {},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await Migrationdb.update();
|
|
||||||
const contactbook = new Parse.Schema('contracts_Contactbook');
|
await ensureSchema(Parse, 'contracts_Contactbook', schema => {
|
||||||
contactbook.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: {},
|
delete: {},
|
||||||
addField: {},
|
addField: {},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
return contactbook.update();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param {Parse} Parse
|
|
||||||
*/
|
|
||||||
exports.down = async Parse => {
|
exports.down = async Parse => {
|
||||||
const schema = new Parse.Schema('contracts_Signature');
|
|
||||||
schema.setCLP({
|
await patchSchema(Parse, 'contracts_Signature', schema => {
|
||||||
get: { '*': true },
|
schema.setCLP({
|
||||||
find: { '*': true },
|
get: { '*': true },
|
||||||
count: { '*': true },
|
find: { '*': true },
|
||||||
create: { '*': true },
|
count: { '*': true },
|
||||||
update: { '*': true },
|
create: { '*': true },
|
||||||
delete: { '*': true },
|
update: { '*': true },
|
||||||
addField: { '*': true },
|
delete: { '*': true },
|
||||||
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await schema.update();
|
|
||||||
const docSchema = new Parse.Schema('contracts_Document');
|
await patchSchema(Parse, 'contracts_Document', schema => {
|
||||||
docSchema.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: { '*': true },
|
delete: { '*': true },
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await docSchema.update();
|
|
||||||
const templateSchema = new Parse.Schema('contracts_Template');
|
await patchSchema(Parse, 'contracts_Template', schema => {
|
||||||
templateSchema.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: { '*': true },
|
delete: { '*': true },
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await templateSchema.update();
|
|
||||||
const dataFiles = new Parse.Schema('partners_DataFiles');
|
await patchSchema(Parse, 'partners_DataFiles', schema => {
|
||||||
dataFiles.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: { '*': true },
|
delete: { '*': true },
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await dataFiles.update();
|
|
||||||
const pTenant = new Parse.Schema('partners_Tenant');
|
await patchSchema(Parse, 'partners_Tenant', schema => {
|
||||||
pTenant.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: { '*': true },
|
delete: { '*': true },
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await pTenant.update();
|
|
||||||
const TenantCredits = new Parse.Schema('partners_TenantCredits');
|
await patchSchema(Parse, 'partners_TenantCredits', schema => {
|
||||||
TenantCredits.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: { '*': true },
|
delete: { '*': true },
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await TenantCredits.update();
|
|
||||||
const _user = new Parse.Schema('_User');
|
await patchSchema(Parse, '_User', schema => {
|
||||||
_user.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: { '*': true },
|
delete: { '*': true },
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await _user.update();
|
|
||||||
const Migrationdb = new Parse.Schema('Migrationdb');
|
await patchSchema(Parse, 'Migrationdb', schema => {
|
||||||
Migrationdb.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: { '*': true },
|
delete: { '*': true },
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
await Migrationdb.update();
|
|
||||||
const contactbook = new Parse.Schema('contracts_Contactbook');
|
await patchSchema(Parse, 'contracts_Contactbook', schema => {
|
||||||
contactbook.setCLP({
|
schema.setCLP({
|
||||||
get: { '*': true },
|
get: { '*': true },
|
||||||
find: { '*': true },
|
find: { '*': true },
|
||||||
count: { '*': true },
|
count: { '*': true },
|
||||||
create: { '*': true },
|
create: { '*': true },
|
||||||
update: { '*': true },
|
update: { '*': true },
|
||||||
delete: { '*': true },
|
delete: { '*': true },
|
||||||
addField: { '*': true },
|
addField: { '*': true },
|
||||||
|
});
|
||||||
});
|
});
|
||||||
return contactbook.update();
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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 });
|
||||||
|
};
|
||||||
@@ -160,7 +160,7 @@ app.use(express.json({ limit: '50mb' }));
|
|||||||
app.use(express.urlencoded({ limit: '50mb', extended: true }));
|
app.use(express.urlencoded({ limit: '50mb', extended: true }));
|
||||||
app.use(function (req, res, next) {
|
app.use(function (req, res, next) {
|
||||||
req.headers['x-real-ip'] = getUserIP(req);
|
req.headers['x-real-ip'] = getUserIP(req);
|
||||||
const publicUrl = req?.protocol + '://' + req?.get('host');
|
const publicUrl = 'https://' + req?.get('host');
|
||||||
req.headers['public_url'] = publicUrl; // process.env.PUBLIC_URL
|
req.headers['public_url'] = publicUrl; // process.env.PUBLIC_URL
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
@@ -231,6 +231,7 @@ if (!process.env.TESTING) {
|
|||||||
console.log('opensign-server running on port ' + port + '.');
|
console.log('opensign-server running on port ' + port + '.');
|
||||||
const isWindows = process.platform === 'win32';
|
const isWindows = process.platform === 'win32';
|
||||||
// console.log('isWindows', isWindows);
|
// console.log('isWindows', isWindows);
|
||||||
|
createContactIndex();
|
||||||
|
|
||||||
const migrate = isWindows
|
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`
|
? `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}`);
|
console.error(`Error: ${stderr}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
createContactIndex();
|
|
||||||
console.log(`Command output: ${stdout}`);
|
console.log(`Command output: ${stdout}`);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user