Skip to content

Commit

Permalink
Merge branch 'development' of github.com:dojot/backstage into feature…
Browse files Browse the repository at this point in the history
…/keycloak-v2
  • Loading branch information
LuanEdCosta committed Sep 8, 2022
2 parents 4289753 + 7db5bcf commit bff0794
Show file tree
Hide file tree
Showing 11 changed files with 81 additions and 93 deletions.
20 changes: 9 additions & 11 deletions src/operations/device/mutation.deleteDevices.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
import LOG from "../../utils/Log.js";
import * as service from "../../services/service.device.js";
import * as favoriteDeviceService from "../../services/service.favoriteDevice.js";
import * as securityService from "../../services/service.security.js";
import LOG from '../../utils/Log.js';
import * as service from '../../services/service.device.js';
import * as favoriteDeviceService from '../../services/service.favoriteDevice.js';
import * as securityService from '../../services/service.security.js';

const deleteDevices = async (_, { deviceIds, userName, tenant }, { token }) => {
try {
const disassociateCertificatesPromise = deviceIds.map(async (deviceId) => {
const { data: certificateData } = await securityService
.getAllCertificates(
.getAllCertificates({
token,
undefined,
undefined,
deviceId,
);
id: deviceId,
});
const { certificates } = certificateData;
const disassociateLinkedCertificates = certificates.map(async (certificate) => {
await securityService.disassociateCertificate(token, certificate.fingerprint);
Expand All @@ -25,11 +23,11 @@ const deleteDevices = async (_, { deviceIds, userName, tenant }, { token }) => {
});
await Promise.all(disassociateCertificatesPromise);
await Promise.all(deleteDevicesPromise);
return "ok";
return 'ok';
} catch (error) {
LOG.error(error.stack || error);
throw error;
}
};

export default deleteDevices;
export default deleteDevices;
3 changes: 1 addition & 2 deletions src/operations/device/query.getDeviceById.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@ const getDeviceById = async (_, { deviceId }, { token }) => {
const { data: deviceData } = await deviceService.getDeviceById(token, deviceId);

const { data: certificateData } = await securityService.getAllCertificates(
token, undefined, undefined, deviceId,
{ token, id: deviceId },
);


const device = {
id: deviceData.id,
label: deviceData.label,
Expand Down
97 changes: 35 additions & 62 deletions src/operations/device/query.getDevices.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,55 +3,42 @@ import * as securityService from '../../services/service.security.js';
import * as favoriteDeviceService from '../../services/service.favoriteDevice.js';
import LOG from '../../utils/Log.js';

const getDevices = async (root, params, { token }) => {
const getDevices = async (root, { page, filter, sortBy }, { token }) => {
try {
const requestParameters = {};
const promises = [];

if (params.page) {
if (params.page.size) {
requestParameters.page_size = params.page.size;
} else {
requestParameters.page_size = 20;
}
if (params.page.number) {
requestParameters.page_num = params.page.number;
} else {
requestParameters.page_num = 1;
}
}
const urlParams = new URLSearchParams({
sortBy: sortBy || 'desc:created',
});

if (params.filter) {
if (params.filter.label) {
requestParameters.label = params.filter.label;
}
if (page) {
urlParams.append('page_size', page.size || 20);
urlParams.append('page_num', page.number || 1);
}

requestParameters.sortBy = params.sortBy || 'label';

let requestString = '';
const keys = Object.keys(requestParameters);
const last = keys[keys.length - 1];
keys.forEach((element) => {
if (element === last) {
requestString += `${element}=${requestParameters[element]}`;
} else {
requestString += `${element}=${requestParameters[element]}&`;
}
});
if (filter) {
urlParams.append('label', filter.label);
}

const { data: fetchedData } = await service.getDevicesWithFilter(
token,
requestString,
urlParams.toString(),
);

const devices = [];
const devicesIds = [];
const certificatePromises = fetchedData.devices.map(device => securityService
.getAllCertificates({ token, id: device.id }).then((response) => {
const { certificates } = response.data;

fetchedData.devices.forEach((device) => {
const attributes = [];
const fingerprint = certificates[0]
? certificates[0].fingerprint
: undefined;

return fingerprint;
}));

devicesIds.push(device.id);
const fingerprints = await Promise.all(certificatePromises);

const devices = [];
fetchedData.devices.forEach((device, index) => {
const attributes = [];

if (device.attrs) {
Object.keys(device.attrs).forEach((key) => {
Expand All @@ -69,35 +56,21 @@ const getDevices = async (root, params, { token }) => {
});
}

promises.push(
securityService
.getAllCertificates(token, undefined, undefined, device.id)
.then((response) => {
const {
data: { certificates },
} = response;
const fingerprint = certificates[0]
? certificates[0].fingerprint
: undefined;
devices.push({
id: device.id,
label: device.label,
created: device.created,
updated: device.updated ? device.updated : '',
attrs: attributes,
certificate: { fingerprint },
});
}),
);
devices.push({
id: device.id,
label: device.label,
created: device.created,
updated: device.updated ? device.updated : '',
attrs: attributes,
certificate: { fingerprint: fingerprints[index] },
});
});

await Promise.all(promises);

const deviceIds = devices.map(device => device.id);
const favoriteDevices = await favoriteDeviceService
.getFavoriteDevicesForDevicesPage(devicesIds);
.getFavoriteDevicesForDevicesPage(deviceIds);

const favoriteDevicesObj = {};

favoriteDevices.forEach((favorite) => {
favoriteDevicesObj[favorite.device_id] = true;
});
Expand Down
4 changes: 2 additions & 2 deletions src/operations/security/TypeDefs.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ const TypeDefs = [`
}
type Query {
#Returns the list of certificates in paginated form.
getCertificateList(page: PageInput, filter: FilterCertificateInput): Certs
getCertificateList(page: PageInput, filter: FilterCertificateInput, sortBy: String): Certs
getCertificateById(page: PageInput, filter: FilterCertificateInput, id: String!): Certs
getCertificateByFingerprint(fingerprint: String!): Certificates
getCertificationAuthorities(page: PageInput, filter: FilterCertificationAuthoritiesInput): CertificationAuthorityList
getCertificationAuthorities(page: PageInput, filter: FilterCertificationAuthoritiesInput, sortBy: String): CertificationAuthorityList
}
type Mutation {
createCertificateOneClick(commonName: String): CertKeys
Expand Down
5 changes: 4 additions & 1 deletion src/operations/security/query.getCertificateById.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ import * as service from '../../services/service.security.js';

export const getCertificateById = async (_, { page, filter, id }, { token }) => {
try {
const ret = await service.getAllCertificates(token, page, filter, id);
const ret = await service.getAllCertificates({
token, page, filter, id,
});

const { data: { paging, certificates } } = ret;

const pagination = {
Expand Down
8 changes: 6 additions & 2 deletions src/operations/security/query.getCertificateList.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import LOG from '../../utils/Log.js';
import * as service from '../../services/service.security.js';
const getCertificateList = async (_, { page, filter }, { token }) => {

const getCertificateList = async (_, { page, filter, sortBy }, { token }) => {
try {
const ret = await service.getAllCertificates(token, page, filter);
const ret = await service.getAllCertificates({
token, page, filter, sortBy: sortBy || 'desc:createdAt',
});

const { data: { paging, certificates } } = ret;

const pagination = {
Expand Down
7 changes: 5 additions & 2 deletions src/operations/security/query.getCertificationAuthorities.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import LOG from '../../utils/Log.js';
import * as service from '../../services/service.security.js';

const getCertificationAuthorities = async (_, { page, filter }, { token }) => {
const getCertificationAuthorities = async (_, { page, filter, sortBy }, { token }) => {
try {
const { data } = await service.getCertificationAuthorities(token, page, filter);
const { data } = await service.getCertificationAuthorities({
token, page, filter, sortBy: sortBy || 'desc:createdAt',
});

const certificationAuthorities = data['trusted-cas'];

const pagination = {
Expand Down
2 changes: 1 addition & 1 deletion src/operations/template/TypeDefs.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ const TypeDefs = [`
#The value is true if the template has image firmware.
templatesHasImageFirmware(templatesId: [Int]!): [MapStringToString]
#Returns a list of templates
getTemplates(page: PageInput, filter: FilterTemplateInput): TemplatesListPage
getTemplates(page: PageInput, filter: FilterTemplateInput, sortBy: String): TemplatesListPage
}
type Mutation {
Expand Down
14 changes: 8 additions & 6 deletions src/operations/template/query.getTemplates.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
import * as service from '../../services/service.template.js';

const getTemplates = async (_, { page, filter }, { token }) => {
const requestParameters = {};
const getTemplates = async (_, { page, filter, sortBy }, { token }) => {
const urlParams = new URLSearchParams({
sortBy: sortBy || 'desc:created',
});

if (page) {
requestParameters.page_size = page.size || 20;
requestParameters.page_num = page.number || 1;
urlParams.append('page_size', page.size || 20);
urlParams.append('page_num', page.number || 1);
}

if (filter) {
requestParameters.label = filter.label;
urlParams.append('label', filter.label);
}

const { data: fetchedData } = await service.getTemplateWithParams(
token,
new URLSearchParams(requestParameters).toString(),
urlParams.toString(),
);


Expand Down
2 changes: 1 addition & 1 deletion src/services/service.device.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ export const getInfluxLastUpdateForDevice = async (token, deviceId, attrs) => {
const attrDataArray = await Promise.all(promises);

return attrDataArray.map((attrData, index) => {
const { ts, value } = attrData;
const { ts, value } = attrData || {};
const attr = attrs[index];
return {
value,
Expand Down
12 changes: 9 additions & 3 deletions src/services/service.security.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ const getHeader = token => ({
headers: { 'content-type': 'application/json', Authorization: `Bearer ${token}` },
});

export const getAllCertificates = (token, page, filter, id) => {
export const getAllCertificates = ({
token, page, filter, id, sortBy,
}) => {
const queryParams = {};
if (page && page.size) queryParams.limit = page.size;
if (page && page.number) queryParams.page = page.number;
if (filter && filter.fingerprint) queryParams.fingerprint = filter.fingerprint;
if (id || id === null) queryParams.keyVal = `belongsTo.device=${id}`;
if (sortBy) queryParams.sortBy = sortBy;
const queryParamsString = new URLSearchParams(queryParams).toString();
return axios.get(`${baseURL}/x509/v1/certificates?${queryParamsString}`, getHeader(token));
};
Expand All @@ -37,13 +40,16 @@ export const disassociateCertificate = async (token, fingerprint) => axios.delet

export const createCertificationAuthority = async (token, { caPem, allowAutoRegistration }) => axios.post(`${baseURL}/x509/v1/trusted-cas`, { caPem, allowAutoRegistration }, getHeader(token));

export const getCertificationAuthorities = async (token, page, filter) => {
export const getCertificationAuthorities = async ({
token, page, filter, sortBy,
}) => {
const queryParams = {};
if (page && page.size) queryParams.limit = page.size;
if (page && page.number) queryParams.page = page.number;
if (filter && filter.caFingerprint) queryParams.caFingerprint = filter.caFingerprint;
if (sortBy) queryParams.sortBy = sortBy;
const queryParamsString = new URLSearchParams(queryParams).toString();
return axios.get(`${baseURL}/x509/v1/trusted-cas?${queryParamsString}`, getHeader(token));
};

export const deleteCertificationAuthority = async (token, fingerprint) => axios.delete(`${baseURL}/x509/v1/trusted-cas/${fingerprint}`, getHeader(token));;
export const deleteCertificationAuthority = async (token, fingerprint) => axios.delete(`${baseURL}/x509/v1/trusted-cas/${fingerprint}`, getHeader(token));

0 comments on commit bff0794

Please sign in to comment.