feat: add unsubscribe functionality for push notifications and update key/cert file paths
All checks were successful
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 2m39s

This commit is contained in:
2026-04-20 15:41:28 -04:00
parent b529ddaa02
commit ee16b49020
4 changed files with 63 additions and 4 deletions

26
frontend/vue-app/cert.pem Normal file
View File

@@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEUzCCArugAwIBAgIRALRJa2ilQ8v+EFymYZzq1QwwDQYJKoZIhvcNAQELBQAw
gYUxHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTEtMCsGA1UECwwkREVT
S1RPUC1BVTkwRzZKXFJ5YW5AREVTS1RPUC1BVTkwRzZKMTQwMgYDVQQDDCtta2Nl
cnQgREVTS1RPUC1BVTkwRzZKXFJ5YW5AREVTS1RPUC1BVTkwRzZKMB4XDTI2MDQy
MDE3NDgxMloXDTI4MDcyMDE3NDgxMlowWDEnMCUGA1UEChMebWtjZXJ0IGRldmVs
b3BtZW50IGNlcnRpZmljYXRlMS0wKwYDVQQLDCRERVNLVE9QLUFVOTBHNkpcUnlh
bkBERVNLVE9QLUFVOTBHNkowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQDSijE/wk+T6UtHD14HGMJmuHxAxkPh8NQvt6lLwdz5MlhK4U6UhOtpWSFlbWtb
ba7EmlMITSSQz1+iIklLe5M0fCFjkRd+yzl87vr2p9WipwFTgt9geYr4xnvWdrZs
MGWhOVeAyohqURSbALCJ3YzTGylG/z/HUmFM/c11owZUs6GwgB+7/dtdn00I828p
bDFgod5R662dkN3V1SgRIEqyX0h9NvliQt61HmxJLYGQa/gbp2QWPYEiH6na1qnh
2haEfw3oSX1r/cQb1NtRFUSuSYl8H6X2b58JlksfJzsFuwUzEcm9zDSKnjdiyj3a
m78U7iucH9ZFQoGq9uYN+ccdAgMBAAGjajBoMA4GA1UdDwEB/wQEAwIFoDATBgNV
HSUEDDAKBggrBgEFBQcDATAfBgNVHSMEGDAWgBTHXLAyWx5zwtrc7Q87br5QC813
CTAgBgNVHREEGTAXgglsb2NhbGhvc3SHBH8AAAGHBMCoAWYwDQYJKoZIhvcNAQEL
BQADggGBAIbnwtzqhJykQNs5VWqjZk064gpM1aVg2ADXN5zo556WVccHVkOIkRtf
PVMjFDytZvjdtQMcMbaSLbB+TXCtToACe55TQh6b6ekM+KQPs1DIbjNJA8AP3w1y
oocgl37Cxhk8GJDYFjwD6ahGmWmo4Fcv5EVL2XMFVVZsUiKZixpyNPJUkqReesuV
HJgII++9Ho7+P7dxmD+MutF9qV3flpoSSz7Mboz8RQbsHgxwWaNwAuULRt5v9TWc
yJL9UA8xXIOanfRjkrydybjGg4m8t+In7ELcetQ0N+ONr4u+Ym/Ip9YqqUFVBZuX
sFIn39k9NDoDZbnIyET7H1qGWinTPCNKXfbTCp9DQ/QlbNJPLoadK2nMQ2Qf7D2P
eQO1W151co4LE5ckUE5lZChqCvykPL5JwUsGp0ZX633kzqQC4pCZFi02EhdfpQC+
ZWRRoi3WwAY7pEZcLeAOd1ys1U684OsoC2YV8O22B9QT2MfGdkE+zpVHu+dyEk9f
Tu6d0+4QkA==
-----END CERTIFICATE-----

28
frontend/vue-app/key.pem Normal file
View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDSijE/wk+T6UtH
D14HGMJmuHxAxkPh8NQvt6lLwdz5MlhK4U6UhOtpWSFlbWtbba7EmlMITSSQz1+i
IklLe5M0fCFjkRd+yzl87vr2p9WipwFTgt9geYr4xnvWdrZsMGWhOVeAyohqURSb
ALCJ3YzTGylG/z/HUmFM/c11owZUs6GwgB+7/dtdn00I828pbDFgod5R662dkN3V
1SgRIEqyX0h9NvliQt61HmxJLYGQa/gbp2QWPYEiH6na1qnh2haEfw3oSX1r/cQb
1NtRFUSuSYl8H6X2b58JlksfJzsFuwUzEcm9zDSKnjdiyj3am78U7iucH9ZFQoGq
9uYN+ccdAgMBAAECggEBAIeU7ro8i7qY1h1gzBCN5UL5MysTgsuRp1NDVwauRXtE
7I7sIQqLvn4NI/CJUkWCkLWTHD2QUCfhI5jps4GkhtuZxHa2DQdeIBtQWtVUp8Mj
ATuiX+9k1hX22/D0ae2qDQiSQMNzqf2tUTOwcf+WaQXZy+8omQ3nAznth85lucH4
8MwMQKqnFdwGId5HrD+zMskf66tGsTLynHJI+rGEz/k+OJMzpONycFNB7evH6Ktx
1zonWpaj/P8sD/81l36FjM3PvDImG5T/OjEy18xe01dYTtrruqnhH/XZzFT5IMQm
Jek4b9rjet9YHQo1Ylpnok37MP5RigBiUf5WD3F5joECgYEA4HT1dhQSUfTxd960
BZKrWr/bXCbFz1arkyIwYV6IIiBnGLp5gvB/RoYrqfytH3Q6YR825WLKNHZggr/c
TgVTfhlTRGjD6oOoVjvQl3fIdiOXuPB1bVRgMV/llUf5YFv9Z7hbUZWxuszDDjg5
pggG2PKL5K6B1WOQ8HTNNQHQ1ZkCgYEA8CCOAbagAKrea5HLFG3fkI3h31f+/vML
JVr6Rf2xEVBM2pB3MjjYzULB7zlGJijw3SevVPTS5fhjLSa8ZhNUbGKN6085ZsdF
M7zzQCQvLu0I+oaBZqy2ip1tPuLRCYgYJw4Slv/IPLogL9+BHBs2m7Wm4ATrLrP0
qiA0VRGjKCUCgYAkiWVbbzD8Pk8AIDRVo+ZYw1pFydnxQj5zmOEfOHAYfgXKNLCK
6/ML29NHvGXB9P17ycT52fboS0yye+C0opFQuXagcB1UE1JXly0BOvJaqLiN1jaH
MXDnGKEah7jEQrUhKRVUVnWz3pjxu51GtY/HyNOUygNAZRC204yD0GPaIQKBgAuZ
pwKSLfyaRJBxxJvCCxDSqdy+RYVPfHRbhsemz80EUhIk9H0qnd6coP3LiIYDaE9m
wWObSCzv6Oqfem579JIf2LdLZnx+l+s974pjtRvRO6POp6WsJk1f+Y0WK/8H4hLQ
7Tj6NlQosbFeXMBc2DCBgARGeI4TB3jIgX6ykW05AoGAWIelo59lbSDgVvW9WRKm
T8bTKVfhAtNLbF0AtXGiwcWj7fu4ARAcIp1HIunNJHJ8nBwX3b2dSVk+1r1cEtZ1
ci37D+2dsKZpVB10J4bXPeeCOZxAwFXXe1Prl1ectR6E3V9uT+8Xwuoc4cbHtHLG
CursqqBnIAFhvhxjj85QGv4=
-----END PRIVATE KEY-----

View File

@@ -12,10 +12,14 @@ import {
hasPendingReturnUrl,
clearPendingReturnUrl,
} from '../../stores/auth'
import { getCachedImageUrl, getCachedImageBlob } from '@/common/imageCache'
import { getCachedImageBlob } from '@/common/imageCache'
import '@/assets/styles.css'
import ModalDialog from './ModalDialog.vue'
import { subscribeToPushWithResult, isPushOptedOut } from '@/services/pushSubscription'
import {
subscribeToPushWithResult,
unsubscribeFromPush,
isPushOptedOut,
} from '@/services/pushSubscription'
const router = useRouter()
const show = ref(false)
@@ -157,6 +161,7 @@ function handlePinInput(event: Event) {
}
const handleLogout = () => {
unsubscribeFromPush()
logoutParent()
router.push('/child')
}

View File

@@ -12,8 +12,8 @@ export default defineConfig(({ mode }) => {
server: {
host: '0.0.0.0',
https: {
key: fs.readFileSync('./192.168.1.102+1-key.pem'),
cert: fs.readFileSync('./192.168.1.102+1.pem'),
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem'),
},
proxy: {
'/api': {