/* Author : Enrique Blasco BLanquer Date: 27 de mayo de 2019 */ module.exports = Self => { Self.remoteMethodCtx('checkUuid', { description: 'Check UUID from user', accessType: 'WRITE', accepts: [{ arg: 'data', type: 'object', required: true, description: 'uuid,model', http: {source: 'body'} }], returns: [{ type: 'Object', root: true }], http: { path: `/checkUuid`, verb: 'POST' } }); Self.checkUuid = async(ctx, data) => { const myUserId = ctx.req.accessToken.userId; // 1 Check is a registered user with a uuid let deviceUser = await Self.findOne({where: {userFk: myUserId, sn: data.uuid}}); if (deviceUser != null) return {'state': true, 'mng': ''}; else { // 2 If it does not exist it can be for two reasons: // 2.1 It is the first time that the application enters so we have to register a new user associated with the user // 2.2 Has the user associated with a different uuid, so we deny access. let device = await Self.findOne({where: {userFk: myUserId}}); if (device != null) { // The device is already registered by another user, access is denied return {'state': false, 'mng': 'Ya estas regisgtrado en otro dispositivo, contacta con los dioses de informática.'}; } else { // Check that the device is free let aDevice = await Self.findOne({where: {sn: data.uuid}}); if (aDevice != null) return {'state': false, 'mng': 'El dispositivo esta siendo usado por otro usuario'}; else { // It's the first time you access the application, insert /* await Self.rawSql('INSERT INTO vn2008.device (sn, model) VALUES (?,?);', [data.uuid, data.model]);*/ await Self.create({ sn: data.uuid, model: data.model, userFk: myUserId }); return {'state': true, 'mng': 'Nuevo dispositivo registrado'}; } } } }; };