From ae0f1c67aaa708d0c2d250ccbcb5beaff25a1a2e Mon Sep 17 00:00:00 2001 From: Jonas L Date: Mon, 25 Mar 2019 00:00:00 +0000 Subject: [PATCH] Add columns for overlay permission --- src/database/device.ts | 25 ++++++++-- .../20190401-add-overlay-permission.ts | 46 +++++++++++++++++++ src/function/device/prepare-device-entry.ts | 4 +- 3 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 src/database/migration/migrations/20190401-add-overlay-permission.ts diff --git a/src/database/device.ts b/src/database/device.ts index 434c9b2..80e6021 100644 --- a/src/database/device.ts +++ b/src/database/device.ts @@ -69,9 +69,14 @@ export interface DeviceAttributesVersion6 { considerRebootManipulation: boolean } +export interface DeviceAttributesVersion7 { + currentOverlayPermission: RuntimePermissionStatus + highestOverlayPermission: RuntimePermissionStatus +} + export type DeviceAttributes = DeviceAttributesVersion1 & DeviceAttributesVersion2 & DeviceAttributesVersion3 & DeviceAttributesVersion4 & DeviceAttributesVersion5 & - DeviceAttributesVersion6 + DeviceAttributesVersion6 & DeviceAttributesVersion7 export type DeviceInstance = Sequelize.Instance & DeviceAttributes export type DeviceModel = Sequelize.Model @@ -175,13 +180,25 @@ export const attributesVersion6: SequelizeAttributes = } } +export const attributesVersion7: SequelizeAttributes = { + currentOverlayPermission: { + ...createEnumColumn(runtimePermissionStatusValues), + defaultValue: 'not granted' + }, + highestOverlayPermission: { + ...createEnumColumn(runtimePermissionStatusValues), + defaultValue: 'not granted' + } +} + export const attributes: SequelizeAttributes = { ...attributesVersion1, ...attributesVersion2, ...attributesVersion3, ...attributesVersion4, ...attributesVersion5, - ...attributesVersion6 + ...attributesVersion6, + ...attributesVersion7 } export const createDeviceModel = (sequelize: Sequelize.Sequelize): DeviceModel => sequelize.define('Device', attributes) @@ -190,13 +207,15 @@ export const hasDeviceManipulation = (device: DeviceAttributes) => { const manipulationOfUsageStats = device.currentUsageStatsPermission !== device.highestUsageStatsPermission const manipulationOfNotificationAccess = device.currentNotificationAccessPermission !== device.highestNotificationAccessPermission const manipulationOfAppVersion = device.currentAppVersion !== device.highestAppVersion + const manipulationOfOverlayPermission = device.currentOverlayPermission !== device.highestOverlayPermission const hasActiveManipulationWarning = manipulationOfProtectionLevel || manipulationOfUsageStats || manipulationOfNotificationAccess || manipulationOfAppVersion || device.triedDisablingDeviceAdmin || - device.didReboot + device.didReboot || + manipulationOfOverlayPermission const hasAnyManipulation = hasActiveManipulationWarning || device.hadManipulation diff --git a/src/database/migration/migrations/20190401-add-overlay-permission.ts b/src/database/migration/migrations/20190401-add-overlay-permission.ts new file mode 100644 index 0000000..be9d973 --- /dev/null +++ b/src/database/migration/migrations/20190401-add-overlay-permission.ts @@ -0,0 +1,46 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 Jonas Lochmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { QueryInterface, Sequelize } from 'sequelize' +import { attributesVersion7 } from '../../device' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: 'EXCLUSIVE' + }, async (transaction) => { + await queryInterface.addColumn('Devices', 'currentOverlayPermission', { + ...attributesVersion7.currentOverlayPermission + }, { + transaction + }) + + await queryInterface.addColumn('Devices', 'highestOverlayPermission', { + ...attributesVersion7.highestOverlayPermission + }, { + transaction + }) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: 'EXCLUSIVE' + }, async (transaction) => { + await queryInterface.removeColumn('Devices', 'currentOverlayPermission', { transaction }) + await queryInterface.removeColumn('Devices', 'highestOverlayPermission', { transaction }) + }) +} diff --git a/src/function/device/prepare-device-entry.ts b/src/function/device/prepare-device-entry.ts index 16dcbd6..43305f2 100644 --- a/src/function/device/prepare-device-entry.ts +++ b/src/function/device/prepare-device-entry.ts @@ -55,5 +55,7 @@ export const prepareDeviceEntry = ({ familyId, userId, deviceAuthToken, deviceId showDeviceConnected: false, defaultUserId: '', defaultUserTimeout: 0, - considerRebootManipulation: false + considerRebootManipulation: false, + currentOverlayPermission: 'not granted', + highestOverlayPermission: 'not granted' })