Compare commits

...
3 Commits
Author SHA1 Message Date
Jonas Lochmann acdec990ea Add support for manipulationFlags 2022-07-11 02:00:00 +02:00
Jonas Lochmann 45f8a25b8b Update dependencies 2022-07-04 02:00:00 +02:00
Jonas Lochmann 930cbd7de1 Adjust intstructions to disable notifications 2022-06-20 02:00:00 +02:00
29 changed files with 324 additions and 45 deletions
@@ -411,6 +411,9 @@
}, },
"isQOrLaterNow": { "isQOrLaterNow": {
"type": "boolean" "type": "boolean"
},
"addedManipulationFlags": {
"type": "number"
} }
}, },
"additionalProperties": false, "additionalProperties": false,
@@ -487,6 +487,9 @@
}, },
"ignoreHadManipulationFlags": { "ignoreHadManipulationFlags": {
"type": "number" "type": "number"
},
"ignoreManipulationFlags": {
"type": "number"
} }
}, },
"additionalProperties": false, "additionalProperties": false,
+4
View File
@@ -182,6 +182,9 @@
}, },
"qOrLater": { "qOrLater": {
"type": "boolean" "type": "boolean"
},
"mFlags": {
"type": "number"
} }
}, },
"additionalProperties": false, "additionalProperties": false,
@@ -206,6 +209,7 @@
"hadManipulation", "hadManipulation",
"hadManipulationFlags", "hadManipulationFlags",
"isUserKeptSignedIn", "isUserKeptSignedIn",
"mFlags",
"model", "model",
"name", "name",
"networkTime", "networkTime",
@@ -0,0 +1,15 @@
# Untitled number in SerializedAppLogicAction Schema
```txt
https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/addedManipulationFlags
```
| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :---------------------------------------------------------------------------------------------------- |
| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedAppLogicAction.schema.json\*](SerializedAppLogicAction.schema.json "open original schema") |
## addedManipulationFlags Type
`number`
@@ -27,6 +27,7 @@ https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDevic
| [appVersion](#appversion) | `number` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-appversion.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/appVersion") | | [appVersion](#appversion) | `number` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-appversion.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/appVersion") |
| [didReboot](#didreboot) | `boolean` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-didreboot.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/didReboot") | | [didReboot](#didreboot) | `boolean` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-didreboot.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/didReboot") |
| [isQOrLaterNow](#isqorlaternow) | `boolean` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-isqorlaternow.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/isQOrLaterNow") | | [isQOrLaterNow](#isqorlaternow) | `boolean` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-isqorlaternow.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/isQOrLaterNow") |
| [addedManipulationFlags](#addedmanipulationflags) | `number` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-addedmanipulationflags.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/addedManipulationFlags") |
## type ## type
@@ -238,3 +239,21 @@ https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDevic
### isQOrLaterNow Type ### isQOrLaterNow Type
`boolean` `boolean`
## addedManipulationFlags
`addedManipulationFlags`
* is optional
* Type: `number`
* cannot be null
* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-addedmanipulationflags.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/addedManipulationFlags")
### addedManipulationFlags Type
`number`
+19
View File
@@ -811,6 +811,7 @@ Reference this group by using
| [appVersion](#appversion) | `number` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-appversion.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/appVersion") | | [appVersion](#appversion) | `number` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-appversion.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/appVersion") |
| [didReboot](#didreboot) | `boolean` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-didreboot.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/didReboot") | | [didReboot](#didreboot) | `boolean` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-didreboot.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/didReboot") |
| [isQOrLaterNow](#isqorlaternow) | `boolean` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-isqorlaternow.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/isQOrLaterNow") | | [isQOrLaterNow](#isqorlaternow) | `boolean` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-isqorlaternow.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/isQOrLaterNow") |
| [addedManipulationFlags](#addedmanipulationflags) | `number` | Optional | cannot be null | [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-addedmanipulationflags.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/addedManipulationFlags") |
### type ### type
@@ -1022,3 +1023,21 @@ Reference this group by using
#### isQOrLaterNow Type #### isQOrLaterNow Type
`boolean` `boolean`
### addedManipulationFlags
`addedManipulationFlags`
* is optional
* Type: `number`
* cannot be null
* defined in: [SerializedAppLogicAction](serializedapplogicaction-definitions-serializedupdatedevicestatusaction-properties-addedmanipulationflags.md "https://timelimit.io/SerializedAppLogicAction#/definitions/SerializedUpdateDeviceStatusAction/properties/addedManipulationFlags")
#### addedManipulationFlags Type
`number`
@@ -0,0 +1,15 @@
# Untitled number in SerializedParentAction Schema
```txt
https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/ignoreManipulationFlags
```
| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :------------------------------------------------------------------------------------------------ |
| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") |
## ignoreManipulationFlags Type
`number`
@@ -30,6 +30,7 @@ https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipul
| [overlay](#overlay) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-overlay.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/overlay") | | [overlay](#overlay) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-overlay.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/overlay") |
| [accessibilityService](#accessibilityservice) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-accessibilityservice.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/accessibilityService") | | [accessibilityService](#accessibilityservice) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-accessibilityservice.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/accessibilityService") |
| [ignoreHadManipulationFlags](#ignorehadmanipulationflags) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-ignorehadmanipulationflags.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/ignoreHadManipulationFlags") | | [ignoreHadManipulationFlags](#ignorehadmanipulationflags) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-ignorehadmanipulationflags.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/ignoreHadManipulationFlags") |
| [ignoreManipulationFlags](#ignoremanipulationflags) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-ignoremanipulationflags.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/ignoreManipulationFlags") |
## type ## type
@@ -254,3 +255,21 @@ https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipul
### ignoreHadManipulationFlags Type ### ignoreHadManipulationFlags Type
`number` `number`
## ignoreManipulationFlags
`ignoreManipulationFlags`
* is optional
* Type: `number`
* cannot be null
* defined in: [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-ignoremanipulationflags.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/ignoreManipulationFlags")
### ignoreManipulationFlags Type
`number`
+19
View File
@@ -1172,6 +1172,7 @@ Reference this group by using
| [overlay](#overlay) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-overlay.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/overlay") | | [overlay](#overlay) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-overlay.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/overlay") |
| [accessibilityService](#accessibilityservice) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-accessibilityservice.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/accessibilityService") | | [accessibilityService](#accessibilityservice) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-accessibilityservice.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/accessibilityService") |
| [ignoreHadManipulationFlags](#ignorehadmanipulationflags) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-ignorehadmanipulationflags.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/ignoreHadManipulationFlags") | | [ignoreHadManipulationFlags](#ignorehadmanipulationflags) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-ignorehadmanipulationflags.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/ignoreHadManipulationFlags") |
| [ignoreManipulationFlags](#ignoremanipulationflags) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-ignoremanipulationflags.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/ignoreManipulationFlags") |
### type ### type
@@ -1397,6 +1398,24 @@ Reference this group by using
`number` `number`
### ignoreManipulationFlags
`ignoreManipulationFlags`
* is optional
* Type: `number`
* cannot be null
* defined in: [SerializedParentAction](serializedparentaction-definitions-serializedignoremanipulationaction-properties-ignoremanipulationflags.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedIgnoreManipulationAction/properties/ignoreManipulationFlags")
#### ignoreManipulationFlags Type
`number`
## Definitions group SerializedIncrementCategoryExtraTimeAction ## Definitions group SerializedIncrementCategoryExtraTimeAction
Reference this group by using Reference this group by using
@@ -0,0 +1,15 @@
# Untitled number in ServerDataStatus Schema
```txt
https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/mFlags
```
| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In |
| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :------------------------------------------------------------------------------------ |
| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") |
## mFlags Type
`number`
@@ -48,6 +48,7 @@ https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData
| [wasAsEnabled](#wasasenabled) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-wasasenabled.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/wasAsEnabled") | | [wasAsEnabled](#wasasenabled) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-wasasenabled.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/wasAsEnabled") |
| [activityLevelBlocking](#activitylevelblocking) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-activitylevelblocking.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/activityLevelBlocking") | | [activityLevelBlocking](#activitylevelblocking) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-activitylevelblocking.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/activityLevelBlocking") |
| [qOrLater](#qorlater) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-qorlater.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/qOrLater") | | [qOrLater](#qorlater) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-qorlater.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/qOrLater") |
| [mFlags](#mflags) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-mflags.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/mFlags") |
## deviceId ## deviceId
@@ -680,3 +681,21 @@ https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData
### qOrLater Type ### qOrLater Type
`boolean` `boolean`
## mFlags
`mFlags`
* is required
* Type: `number`
* cannot be null
* defined in: [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-mflags.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/mFlags")
### mFlags Type
`number`
+19
View File
@@ -338,6 +338,7 @@ Reference this group by using
| [wasAsEnabled](#wasasenabled) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-wasasenabled.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/wasAsEnabled") | | [wasAsEnabled](#wasasenabled) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-wasasenabled.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/wasAsEnabled") |
| [activityLevelBlocking](#activitylevelblocking) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-activitylevelblocking.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/activityLevelBlocking") | | [activityLevelBlocking](#activitylevelblocking) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-activitylevelblocking.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/activityLevelBlocking") |
| [qOrLater](#qorlater) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-qorlater.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/qOrLater") | | [qOrLater](#qorlater) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-qorlater.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/qOrLater") |
| [mFlags](#mflags) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-mflags.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/mFlags") |
### deviceId ### deviceId
@@ -971,6 +972,24 @@ Reference this group by using
`boolean` `boolean`
### mFlags
`mFlags`
* is required
* Type: `number`
* cannot be null
* defined in: [ServerDataStatus](serverdatastatus-definitions-serverdevicedata-properties-mflags.md "https://timelimit.io/ServerDataStatus#/definitions/ServerDeviceData/properties/mFlags")
#### mFlags Type
`number`
## Definitions group ProtectionLevel ## Definitions group ProtectionLevel
Reference this group by using Reference this group by using
+2 -2
View File
@@ -168,8 +168,8 @@
<tr> <tr>
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;"> <td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
<div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:left;color:#000000;"> <div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:left;color:#000000;">
<p> Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben. Sie können die Nachrichten in der TimeLimit-App abbestellen, oder indem Sie auf diese Nachricht antworten, dass Sie diese Benachrichtigungen nicht mehr erhalten möchten. Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten. </p> <p> Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben. Sie können die Nachrichten in der TimeLimit-App abbestellen. Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten. </p>
<p> You got this mail because you enable mail notifications for this in TimeLimit. You can disable getting these messages in the TimeLimit App or by replying to this message that you don't want to get these notifications anymore. If you have got any questions, then you can reply to this message. </p> <p> You got this mail because you enable mail notifications for this in TimeLimit. You can disable getting these messages in the TimeLimit App. If you have got any questions, then you can reply to this message. </p>
<p> &copy; <%= mailimprint %> </p> <p> &copy; <%= mailimprint %> </p>
</div> </div>
</td> </td>
+2 -4
View File
@@ -36,14 +36,12 @@
<mj-text> <mj-text>
<p> <p>
Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben. Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben.
Sie können die Nachrichten in der TimeLimit-App abbestellen, oder indem Sie können die Nachrichten in der TimeLimit-App abbestellen.
Sie auf diese Nachricht antworten, dass Sie diese Benachrichtigungen nicht mehr erhalten möchten.
Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten. Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten.
</p> </p>
<p> <p>
You got this mail because you enable mail notifications for this in TimeLimit. You got this mail because you enable mail notifications for this in TimeLimit.
You can disable getting these messages in the TimeLimit App or by You can disable getting these messages in the TimeLimit App.
replying to this message that you don't want to get these notifications anymore.
If you have got any questions, then you can reply to this message. If you have got any questions, then you can reply to this message.
</p> </p>
<p> <p>
+2 -4
View File
@@ -14,13 +14,11 @@ until you confirm (ignore and/ or fix) the manipulation in the TimeLimit App.
---------------------- ----------------------
Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben. Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben.
Sie können die Nachrichten in der TimeLimit-App abbestellen, oder indem Sie können die Nachrichten in der TimeLimit-App abbestellen.
Sie auf diese Nachricht antworten, dass Sie diese Benachrichtigungen nicht mehr erhalten möchten.
Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten. Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten.
You got this mail because you enable mail notifications for this in TimeLimit. You got this mail because you enable mail notifications for this in TimeLimit.
You can disable getting these messages in the TimeLimit App or by You can disable getting these messages in the TimeLimit App.
replying to this message that you don't want to get these notifications anymore.
If you have got any questions, then you can reply to this message. If you have got any questions, then you can reply to this message.
<C> <%- mailimprint %> <C> <%- mailimprint %>
+2 -2
View File
@@ -168,8 +168,8 @@
<tr> <tr>
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;"> <td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
<div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:left;color:#000000;"> <div style="font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:13px;line-height:1;text-align:left;color:#000000;">
<p> Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben. Sie können die Nachrichten in der TimeLimit-App abbestellen, oder indem Sie auf diese Nachricht antworten, dass Sie diese Benachrichtigungen nicht mehr erhalten möchten. Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten. </p> <p> Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben. Sie können die Nachrichten in der TimeLimit-App abbestellen. Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten. </p>
<p> You got this mail because you enable mail notifications for this in TimeLimit. You can disable getting these messages in the TimeLimit App or by replying to this message that you don't want to get these notifications anymore. If you have got any questions, then you can reply to this message. </p> <p> You got this mail because you enable mail notifications for this in TimeLimit. You can disable getting these messages in the TimeLimit App. If you have got any questions, then you can reply to this message. </p>
<p> &copy; <%= mailimprint %> </p> <p> &copy; <%= mailimprint %> </p>
</div> </div>
</td> </td>
+2 -4
View File
@@ -37,14 +37,12 @@
<mj-text> <mj-text>
<p> <p>
Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben. Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben.
Sie können die Nachrichten in der TimeLimit-App abbestellen, oder indem Sie können die Nachrichten in der TimeLimit-App abbestellen.
Sie auf diese Nachricht antworten, dass Sie diese Benachrichtigungen nicht mehr erhalten möchten.
Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten. Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten.
</p> </p>
<p> <p>
You got this mail because you enable mail notifications for this in TimeLimit. You got this mail because you enable mail notifications for this in TimeLimit.
You can disable getting these messages in the TimeLimit App or by You can disable getting these messages in the TimeLimit App.
replying to this message that you don't want to get these notifications anymore.
If you have got any questions, then you can reply to this message. If you have got any questions, then you can reply to this message.
</p> </p>
<p> <p>
+2 -4
View File
@@ -14,13 +14,11 @@ removal can be detected, so that you will not always get this notifications.
---------------------- ----------------------
Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben. Sie erhalten diese Nachricht, weil Sie E-Mail-Benachrichtigungen in TimeLimit aktiviert haben.
Sie können die Nachrichten in der TimeLimit-App abbestellen, oder indem Sie können die Nachrichten in der TimeLimit-App abbestellen.
Sie auf diese Nachricht antworten, dass Sie diese Benachrichtigungen nicht mehr erhalten möchten.
Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten. Falls Sie Fragen haben können Sie einfach auf diese E-Mail antworten.
You got this mail because you enable mail notifications for this in TimeLimit. You got this mail because you enable mail notifications for this in TimeLimit.
You can disable getting these messages in the TimeLimit App or by You can disable getting these messages in the TimeLimit App.
replying to this message that you don't want to get these notifications anymore.
If you have got any questions, then you can reply to this message. If you have got any questions, then you can reply to this message.
<C> <%- mailimprint %> <C> <%- mailimprint %>
+6 -6
View File
@@ -3378,9 +3378,9 @@
} }
}, },
"node_modules/moment": { "node_modules/moment": {
"version": "2.29.3", "version": "2.29.4",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
"engines": { "engines": {
"node": "*" "node": "*"
} }
@@ -7817,9 +7817,9 @@
} }
}, },
"moment": { "moment": {
"version": "2.29.3", "version": "2.29.4",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
}, },
"moment-timezone": { "moment-timezone": {
"version": "0.5.34", "version": "0.5.34",
+16 -4
View File
@@ -1,6 +1,6 @@
/* /*
* server component for the TimeLimit App * server component for the TimeLimit App
* Copyright (C) 2019 - 2020 Jonas Lochmann * Copyright (C) 2019 - 2022 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
@@ -33,11 +33,13 @@ export class IgnoreManipulationAction extends ParentAction {
readonly ignoreDidReboot: boolean readonly ignoreDidReboot: boolean
readonly ignoreHadManipulation: boolean readonly ignoreHadManipulation: boolean
readonly ignoreHadManipulationFlags: number readonly ignoreHadManipulationFlags: number
readonly ignoreManipulationFlags: number
constructor ({ constructor ({
deviceId, ignoreDeviceAdminManipulation, ignoreDeviceAdminManipulationAttempt, deviceId, ignoreDeviceAdminManipulation, ignoreDeviceAdminManipulationAttempt,
ignoreAppDowngrade, ignoreNotificationAccessManipulation, ignoreUsageStatsAccessManipulation, ignoreAppDowngrade, ignoreNotificationAccessManipulation, ignoreUsageStatsAccessManipulation,
ignoreOverlayPermissionManipulation, ignoreAccessibilityServiceManipulation, ignoreDidReboot, ignoreHadManipulation, ignoreHadManipulationFlags ignoreOverlayPermissionManipulation, ignoreAccessibilityServiceManipulation, ignoreDidReboot,
ignoreHadManipulation, ignoreHadManipulationFlags, ignoreManipulationFlags
}: { }: {
deviceId: string deviceId: string
ignoreDeviceAdminManipulation: boolean ignoreDeviceAdminManipulation: boolean
@@ -50,6 +52,7 @@ export class IgnoreManipulationAction extends ParentAction {
ignoreDidReboot: boolean ignoreDidReboot: boolean
ignoreHadManipulation: boolean ignoreHadManipulation: boolean
ignoreHadManipulationFlags: number ignoreHadManipulationFlags: number
ignoreManipulationFlags: number
}) { }) {
super() super()
@@ -63,6 +66,8 @@ export class IgnoreManipulationAction extends ParentAction {
throwOutOfRange({ actionType, field: 'ignoreHadManipulationFlags', value: ignoreHadManipulationFlags }) throwOutOfRange({ actionType, field: 'ignoreHadManipulationFlags', value: ignoreHadManipulationFlags })
} }
assertSafeInteger({ actionType, field: 'ignoreManipulationFlags', value: ignoreManipulationFlags })
this.deviceId = deviceId this.deviceId = deviceId
this.ignoreDeviceAdminManipulation = ignoreDeviceAdminManipulation this.ignoreDeviceAdminManipulation = ignoreDeviceAdminManipulation
this.ignoreDeviceAdminManipulationAttempt = ignoreDeviceAdminManipulationAttempt this.ignoreDeviceAdminManipulationAttempt = ignoreDeviceAdminManipulationAttempt
@@ -74,9 +79,14 @@ export class IgnoreManipulationAction extends ParentAction {
this.ignoreDidReboot = ignoreDidReboot this.ignoreDidReboot = ignoreDidReboot
this.ignoreHadManipulation = ignoreHadManipulation this.ignoreHadManipulation = ignoreHadManipulation
this.ignoreHadManipulationFlags = ignoreHadManipulationFlags this.ignoreHadManipulationFlags = ignoreHadManipulationFlags
this.ignoreManipulationFlags = ignoreManipulationFlags
} }
static parse = ({ deviceId, admin, adminA, downgrade, notification, usageStats, overlay, accessibilityService, reboot, hadManipulation, ignoreHadManipulationFlags }: SerializedIgnoreManipulationAction) => ( static parse = ({
deviceId, admin, adminA, downgrade, notification, usageStats, overlay,
accessibilityService, reboot, hadManipulation, ignoreHadManipulationFlags,
ignoreManipulationFlags
}: SerializedIgnoreManipulationAction) => (
new IgnoreManipulationAction({ new IgnoreManipulationAction({
deviceId, deviceId,
ignoreDeviceAdminManipulation: admin, ignoreDeviceAdminManipulation: admin,
@@ -88,7 +98,8 @@ export class IgnoreManipulationAction extends ParentAction {
ignoreAccessibilityServiceManipulation: !!accessibilityService, ignoreAccessibilityServiceManipulation: !!accessibilityService,
ignoreDidReboot: !!reboot, ignoreDidReboot: !!reboot,
ignoreHadManipulation: hadManipulation, ignoreHadManipulation: hadManipulation,
ignoreHadManipulationFlags: ignoreHadManipulationFlags || 0 ignoreHadManipulationFlags: ignoreHadManipulationFlags || 0,
ignoreManipulationFlags: ignoreManipulationFlags || 0
}) })
) )
} }
@@ -107,4 +118,5 @@ export interface SerializedIgnoreManipulationAction {
overlay?: boolean overlay?: boolean
accessibilityService?: boolean accessibilityService?: boolean
ignoreHadManipulationFlags?: number ignoreHadManipulationFlags?: number
ignoreManipulationFlags?: number
} }
+22 -4
View File
@@ -1,6 +1,6 @@
/* /*
* server component for the TimeLimit App * server component for the TimeLimit App
* Copyright (C) 2019 - 2020 Jonas Lochmann * Copyright (C) 2019 - 2022 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
@@ -32,6 +32,7 @@ export class UpdateDeviceStatusAction extends AppLogicAction {
readonly newAppVersion?: number readonly newAppVersion?: number
readonly didReboot: boolean readonly didReboot: boolean
readonly isQOrLaterNow: boolean readonly isQOrLaterNow: boolean
readonly addedManipulationFlags: number
constructor ({ constructor ({
newProtetionLevel, newProtetionLevel,
@@ -41,7 +42,8 @@ export class UpdateDeviceStatusAction extends AppLogicAction {
newAccessibilityServiceEnabled, newAccessibilityServiceEnabled,
newAppVersion, newAppVersion,
didReboot, didReboot,
isQOrLaterNow isQOrLaterNow,
addedManipulationFlags
}: { }: {
newProtetionLevel?: ProtectionLevel newProtetionLevel?: ProtectionLevel
newUsageStatsPermissionStatus?: RuntimePermissionStatus newUsageStatsPermissionStatus?: RuntimePermissionStatus
@@ -51,6 +53,7 @@ export class UpdateDeviceStatusAction extends AppLogicAction {
newAppVersion?: number newAppVersion?: number
didReboot: boolean didReboot: boolean
isQOrLaterNow: boolean isQOrLaterNow: boolean
addedManipulationFlags: number
}) { }) {
super() super()
@@ -62,6 +65,8 @@ export class UpdateDeviceStatusAction extends AppLogicAction {
} }
} }
assertSafeInteger({ actionType, field: 'addedManipulationFlags', value: addedManipulationFlags })
this.newProtetionLevel = newProtetionLevel this.newProtetionLevel = newProtetionLevel
this.newUsageStatsPermissionStatus = newUsageStatsPermissionStatus this.newUsageStatsPermissionStatus = newUsageStatsPermissionStatus
this.newNotificationAccessPermission = newNotificationAccessPermission this.newNotificationAccessPermission = newNotificationAccessPermission
@@ -70,9 +75,20 @@ export class UpdateDeviceStatusAction extends AppLogicAction {
this.newAppVersion = newAppVersion this.newAppVersion = newAppVersion
this.didReboot = didReboot this.didReboot = didReboot
this.isQOrLaterNow = isQOrLaterNow this.isQOrLaterNow = isQOrLaterNow
this.addedManipulationFlags = addedManipulationFlags
} }
static parse = ({ protectionLevel, usageStats, notificationAccess, overlayPermission, accessibilityServiceEnabled, appVersion, didReboot, isQOrLaterNow }: SerializedUpdateDeviceStatusAction) => ( static parse = ({
protectionLevel,
usageStats,
notificationAccess,
overlayPermission,
accessibilityServiceEnabled,
appVersion,
didReboot,
isQOrLaterNow,
addedManipulationFlags
}: SerializedUpdateDeviceStatusAction) => (
new UpdateDeviceStatusAction({ new UpdateDeviceStatusAction({
newProtetionLevel: protectionLevel, newProtetionLevel: protectionLevel,
newUsageStatsPermissionStatus: usageStats, newUsageStatsPermissionStatus: usageStats,
@@ -81,7 +97,8 @@ export class UpdateDeviceStatusAction extends AppLogicAction {
newAccessibilityServiceEnabled: accessibilityServiceEnabled, newAccessibilityServiceEnabled: accessibilityServiceEnabled,
newAppVersion: appVersion, newAppVersion: appVersion,
didReboot: !!didReboot, didReboot: !!didReboot,
isQOrLaterNow: !!isQOrLaterNow isQOrLaterNow: !!isQOrLaterNow,
addedManipulationFlags: addedManipulationFlags || 0
}) })
) )
} }
@@ -96,4 +113,5 @@ export interface SerializedUpdateDeviceStatusAction {
appVersion?: number appVersion?: number
didReboot?: boolean didReboot?: boolean
isQOrLaterNow?: boolean isQOrLaterNow?: boolean
addedManipulationFlags?: number
} }
+10
View File
@@ -442,6 +442,9 @@ const definitions = {
}, },
"ignoreHadManipulationFlags": { "ignoreHadManipulationFlags": {
"type": "number" "type": "number"
},
"ignoreManipulationFlags": {
"type": "number"
} }
}, },
"additionalProperties": false, "additionalProperties": false,
@@ -1750,6 +1753,9 @@ const definitions = {
}, },
"isQOrLaterNow": { "isQOrLaterNow": {
"type": "boolean" "type": "boolean"
},
"addedManipulationFlags": {
"type": "number"
} }
}, },
"additionalProperties": false, "additionalProperties": false,
@@ -1907,6 +1913,9 @@ const definitions = {
}, },
"qOrLater": { "qOrLater": {
"type": "boolean" "type": "boolean"
},
"mFlags": {
"type": "number"
} }
}, },
"additionalProperties": false, "additionalProperties": false,
@@ -1931,6 +1940,7 @@ const definitions = {
"hadManipulation", "hadManipulation",
"hadManipulationFlags", "hadManipulationFlags",
"isUserKeptSignedIn", "isUserKeptSignedIn",
"mFlags",
"model", "model",
"name", "name",
"networkTime", "networkTime",
+28 -4
View File
@@ -1,6 +1,6 @@
/* /*
* server component for the TimeLimit App * server component for the TimeLimit App
* Copyright (C) 2019 - 2020 Jonas Lochmann * Copyright (C) 2019 - 2022 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
@@ -32,6 +32,11 @@ export const DeviceHadManipulationFlags = {
ALL: 1 | 2 | 4 | 8 | 16 | 32 ALL: 1 | 2 | 4 | 8 | 16 | 32
} }
export const DeviceManipulationFlags = {
USED_FGS_KILLER: 1,
ALL: 1
}
export interface DeviceAttributesVersion1 { export interface DeviceAttributesVersion1 {
familyId: string familyId: string
deviceId: string deviceId: string
@@ -102,10 +107,15 @@ export interface DeviceAttributesVersion11 {
hadManipulationFlags: number hadManipulationFlags: number
} }
export interface DeviceAttributesVersion12 {
manipulationFlags: number
}
export type DeviceAttributes = DeviceAttributesVersion1 & DeviceAttributesVersion2 & export type DeviceAttributes = DeviceAttributesVersion1 & DeviceAttributesVersion2 &
DeviceAttributesVersion3 & DeviceAttributesVersion4 & DeviceAttributesVersion5 & DeviceAttributesVersion3 & DeviceAttributesVersion4 & DeviceAttributesVersion5 &
DeviceAttributesVersion6 & DeviceAttributesVersion7 & DeviceAttributesVersion8 & DeviceAttributesVersion6 & DeviceAttributesVersion7 & DeviceAttributesVersion8 &
DeviceAttributesVersion9 & DeviceAttributesVersion10 & DeviceAttributesVersion11 DeviceAttributesVersion9 & DeviceAttributesVersion10 & DeviceAttributesVersion11 &
DeviceAttributesVersion12
export type DeviceModel = Sequelize.Model<DeviceAttributes> & DeviceAttributes export type DeviceModel = Sequelize.Model<DeviceAttributes> & DeviceAttributes
export type DeviceModelStatic = typeof Sequelize.Model & { export type DeviceModelStatic = typeof Sequelize.Model & {
@@ -259,6 +269,18 @@ export const attributesVersion11: SequelizeAttributes<DeviceAttributesVersion11>
} }
} }
export const attributesVersion12: SequelizeAttributes<DeviceAttributesVersion12> = {
manipulationFlags: {
type: Sequelize.INTEGER,
allowNull: false,
defaultValue: 0,
validate: {
min: 0,
max: DeviceManipulationFlags.ALL
}
}
}
export const attributes: SequelizeAttributes<DeviceAttributes> = { export const attributes: SequelizeAttributes<DeviceAttributes> = {
...attributesVersion1, ...attributesVersion1,
...attributesVersion2, ...attributesVersion2,
@@ -270,7 +292,8 @@ export const attributes: SequelizeAttributes<DeviceAttributes> = {
...attributesVersion8, ...attributesVersion8,
...attributesVersion9, ...attributesVersion9,
...attributesVersion10, ...attributesVersion10,
...attributesVersion11 ...attributesVersion11,
...attributesVersion12
} }
export const createDeviceModel = (sequelize: Sequelize.Sequelize): DeviceModelStatic => sequelize.define('Device', attributes) as DeviceModelStatic export const createDeviceModel = (sequelize: Sequelize.Sequelize): DeviceModelStatic => sequelize.define('Device', attributes) as DeviceModelStatic
@@ -291,7 +314,8 @@ export const hasDeviceManipulation = (device: DeviceAttributes) => {
manipulationOfOverlayPermission || manipulationOfOverlayPermission ||
manipulationOfAsPermission manipulationOfAsPermission
const hasAnyManipulation = hasActiveManipulationWarning || device.hadManipulation const hasAnyManipulation = hasActiveManipulationWarning || device.hadManipulation ||
device.manipulationFlags !== 0
return hasAnyManipulation return hasAnyManipulation
} }
@@ -0,0 +1,39 @@
/*
* server component for the TimeLimit App
* Copyright (C) 2019 - 2022 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 <https://www.gnu.org/licenses/>.
*/
import { QueryInterface, Sequelize, Transaction } from 'sequelize'
import { attributesVersion12 as deviceAttributes } from '../../device'
export async function up (queryInterface: QueryInterface, sequelize: Sequelize) {
await sequelize.transaction({
type: Transaction.TYPES.EXCLUSIVE
}, async (transaction) => {
await queryInterface.addColumn('Devices', 'manipulationFlags', {
...deviceAttributes.manipulationFlags
}, {
transaction
})
})
}
export async function down (queryInterface: QueryInterface, sequelize: Sequelize) {
await sequelize.transaction({
type: Transaction.TYPES.EXCLUSIVE
}, async (transaction) => {
await queryInterface.removeColumn('Devices', 'manipulationFlags', { transaction })
})
}
+3 -2
View File
@@ -1,6 +1,6 @@
/* /*
* server component for the TimeLimit App * server component for the TimeLimit App
* Copyright (C) 2019 Jonas Lochmann * Copyright (C) 2019 - 2022 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
@@ -63,5 +63,6 @@ export const prepareDeviceEntry = ({ familyId, userId, deviceAuthToken, deviceId
asEnabled: false, asEnabled: false,
wasAsEnabled: false, wasAsEnabled: false,
activityLevelBlocking: false, activityLevelBlocking: false,
isQorLater: false isQorLater: false,
manipulationFlags: 0
}) })
@@ -1,6 +1,6 @@
/* /*
* server component for the TimeLimit App * server component for the TimeLimit App
* Copyright (C) 2019 - 2020 Jonas Lochmann * Copyright (C) 2019 - 2022 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
@@ -16,7 +16,7 @@
*/ */
import { UpdateDeviceStatusAction } from '../../../../action' import { UpdateDeviceStatusAction } from '../../../../action'
import { DeviceHadManipulationFlags, hasDeviceManipulation } from '../../../../database/device' import { DeviceHadManipulationFlags, DeviceManipulationFlags, hasDeviceManipulation } from '../../../../database/device'
import { newPermissionStatusValues } from '../../../../model/newpermissionstatus' import { newPermissionStatusValues } from '../../../../model/newpermissionstatus'
import { protetionLevels } from '../../../../model/protectionlevel' import { protetionLevels } from '../../../../model/protectionlevel'
import { runtimePermissionStatusValues } from '../../../../model/runtimepermissionstatus' import { runtimePermissionStatusValues } from '../../../../model/runtimepermissionstatus'
@@ -155,6 +155,14 @@ export async function dispatchUpdateDeviceStatus ({ deviceId, action, cache }: {
} }
} }
{
const effectiveManipulationFlags = action.addedManipulationFlags & DeviceManipulationFlags.ALL
if (effectiveManipulationFlags !== 0) {
deviceEntry.manipulationFlags = deviceEntry.manipulationFlags | effectiveManipulationFlags
}
}
await deviceEntry.save({ transaction: cache.transaction }) await deviceEntry.save({ transaction: cache.transaction })
if (hasDeviceManipulation(deviceEntry)) { if (hasDeviceManipulation(deviceEntry)) {
@@ -1,6 +1,6 @@
/* /*
* server component for the TimeLimit App * server component for the TimeLimit App
* Copyright (C) 2019 - 2020 Jonas Lochmann * Copyright (C) 2019 - 2022 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
@@ -81,6 +81,10 @@ export async function dispatchIgnoreManipulation ({ action, cache }: {
} }
} }
if (action.ignoreManipulationFlags !== 0) {
deviceEntry.manipulationFlags = deviceEntry.manipulationFlags & (~action.ignoreManipulationFlags)
}
await deviceEntry.save({ transaction: cache.transaction }) await deviceEntry.save({ transaction: cache.transaction })
cache.invalidiateDeviceList = true cache.invalidiateDeviceList = true
} }
@@ -1,6 +1,6 @@
/* /*
* server component for the TimeLimit App * server component for the TimeLimit App
* Copyright (C) 2019 - 2020 Jonas Lochmann * Copyright (C) 2019 - 2022 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as * it under the terms of the GNU Affero General Public License as
@@ -64,7 +64,8 @@ export async function getDeviceList ({ database, transaction, familyEntry }: {
asEnabled: item.asEnabled, asEnabled: item.asEnabled,
wasAsEnabled: item.wasAsEnabled, wasAsEnabled: item.wasAsEnabled,
activityLevelBlocking: item.activityLevelBlocking, activityLevelBlocking: item.activityLevelBlocking,
qOrLater: item.isQorLater qOrLater: item.isQorLater,
mFlags: item.manipulationFlags
})) }))
} }
} }
+1
View File
@@ -96,6 +96,7 @@ export interface ServerDeviceData {
wasAsEnabled: boolean wasAsEnabled: boolean
activityLevelBlocking: boolean activityLevelBlocking: boolean
qOrLater: boolean qOrLater: boolean
mFlags: number // manipulation flags
} }
export interface ServerUpdatedCategoryBaseData { export interface ServerUpdatedCategoryBaseData {