You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Fipamo/brain/api/content/settings.js

274 lines
7.8 KiB
JavaScript

import DateUtils from '../../tools/utilities/DateUtils';
import StringUtils from '../../tools/utilities/StringUtils';
import * as DataEvent from '../../tools/events/DataEvent';
import RightsManager,
{
TASK_CREATE,
TASK_UPDATE,
TASK_READ,
TASK_DELETE,
OBJECT_CLIENT_ADMIN,
OBJECT_CLIENT_USER,
OBJECT_PROJECT_CLIENT,
OBJECT_PROJECT_FOLIO,
OBJECT_BOOKMARK,
OBJECT_POST,
OBJECT_SETTINGS
}
from '../../tools/utilities/RightsManager';
const express = require('express');
const router = express.Router();
const multer = require('multer');
const fs = require('fs-extra');
const Models = require('../../models');
const dateUtils = new DateUtils();
const rightsManager = new RightsManager();
const uploadPath = "./content/user-images/" + dateUtils.getDate('year', new Date()) + "/" + dateUtils.getDate('month', new Date());
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const _ = require('lodash');
fs.ensureDir(uploadPath, function(err)
{
//console.log(err) // => null
// dir has now been created, including the directory it is to be placed in
})
var storage = multer.diskStorage(
{
destination: function(req, file, cb)
{
cb(null, uploadPath)
},
filename: function(req, file, cb)
{
var splice = file.originalname.split(':');
cb(null, splice[0]);
}
});
var avatar_upload = multer(
{
storage: storage
}).array('avatar_upload');
var background_upload = multer(
{
storage: storage
}).array('background_upload');
//** SYNC POSTS */
router.post("/sync", (req, res, next) =>
{
let payload = req.body;
Models.User.findById(req.session.user.id).then((user) =>
{
if (rightsManager.check(user.role, OBJECT_SETTINGS, TASK_UPDATE))
{
fs.readJson('config/site-settings.json').then(obj =>
{
if (user.hande != payload.handle || user.email != payload.email)
{
user.update(
{
handle: payload.handle,
email: payload.email
}).then(updated =>
{
console.log("UPDATED")
}).catch(err =>
{
console.log("ERR", err);
})
}
else
{
console.log("USER NOT UPDATED")
}
obj.url = payload.url;
obj.title = payload.title;
obj.description = payload.descriptions;
obj.private = payload.private;
obj.theme = payload.theme;
obj.background = payload.background; //TODO: make this url relative
//mail stuff
obj.email.active = payload.mailSettings.activeProtocol;
obj.email.smtp.domain = payload.mailSettings.smtp.domain;
obj.email.smtp.email = payload.mailSettings.smtp.email;
obj.email.smtp.password = payload.mailSettings.smtp.password;
obj.email.mailgun.domain = payload.mailSettings.mailgun.domain;
obj.email.mailgun['api-key'] = payload.mailSettings.mailgun.key;
fs.writeJson('config/site-settings.json', obj).then(() =>
{
res.json(
{
message: DataEvent.SETTINGS_UPDATED
});
}).catch(err =>
{
console.error(err)
})
}).catch(err =>
{
console.error(err)
})
}
else
{
res.json(
{
message: "Nah. You can't do that. Talk to the admin, sport."
});
}
});
})
router.get('/nav', function(req, res, next)
{
fs.readJson('config/site-settings.json').then(obj =>
{
fs.writeJson('config/site-settings.json', obj).then(() =>
{
res.json(obj.menu);
}).catch(err =>
{
console.error(err)
})
}).catch(err =>
{
console.error(err)
})
})
router.post("/nav-sync", (req, res, next) =>
{
let payload = req.body;
Models.User.findById(req.session.user.id).then((user) =>
{
if (rightsManager.check(user.role, OBJECT_SETTINGS, TASK_UPDATE))
{
fs.readJson('config/site-settings.json').then(obj =>
{
obj.menu = payload;
fs.writeJson('config/site-settings.json', obj).then(() =>
{
res.json(
{
message: DataEvent.SETTINGS_UPDATED
});
}).catch(err =>
{
console.error(err)
})
}).catch(err =>
{
console.error(err)
})
}
else
{
res.json(
{
message: "Nah. You can't do that. Talk to the admin, sport."
});
}
});
})
/***
UPLOAD AVATAR
*/
router.post('/add-avatar', function(req, res, next)
{
//console.log(req.body);
if (!req.session.user) return res.json(
{
message: "You need to be logged in, champ."
});
Models.User.findById(req.session.user.id).then((user) =>
{
if (rightsManager.check(user.role, OBJECT_POST, TASK_CREATE))
{
avatar_upload(req, res, function(err)
{
if (err)
{
res.json(
{
message: err
});
throw err;
}
else
{
var avatar = req.files[0].path;
user.update(
{
avatar: avatar.substr(7, avatar.length)
}).then(updated =>
{
req.session.user = updated;
}).catch(err =>
{
console.log("ERR", err);
})
return res.json(
{
message: DataEvent.AVATAR_UPLOADED,
url: avatar.substr(7, avatar.length)
});
}
});
}
else
{
res.json(
{
message: "Nah. You can't do that. Talk to the admin, sport."
});
}
});
});
/***
UPLOAD FEATURE BACKGROUND
*/
router.post('/add-feature-background', function(req, res, next)
{
//console.log(req.body);
if (!req.session.user) return res.json(
{
message: "You need to be logged in, champ."
});
Models.User.findById(req.session.user.id).then((user) =>
{
if (rightsManager.check(user.role, OBJECT_POST, TASK_CREATE))
{
background_upload(req, res, function(err)
{
if (err)
{
res.json(
{
message: err
});
throw err;
}
else
{
var bgImage = req.files[0].path;
return res.json(
{
message: DataEvent.SITE_BACKGROUND_UPLOADED,
url: bgImage.substr(7, bgImage.length)
});
}
});
}
else
{
res.json(
{
message: "Nah. You can't do that. Talk to the admin, sport."
});
}
});
});
module.exports = router;