Add Pushover support and avatar uploads directory setup
Introduces Pushover as a notification channel with validation and form handling in the group edit view. Also updates the bootstrap script to create and set permissions for the avatar uploads directory.
This commit is contained in:
@@ -468,6 +468,7 @@ class NotificationGroupController extends Controller
|
|||||||
'discord' => 'Discord',
|
'discord' => 'Discord',
|
||||||
'slack' => 'Slack',
|
'slack' => 'Slack',
|
||||||
'mattermost' => 'Mattermost',
|
'mattermost' => 'Mattermost',
|
||||||
|
'pushover' => 'Pushover',
|
||||||
'webhook' => 'Webhook'
|
'webhook' => 'Webhook'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -673,6 +673,23 @@ function testChannel(channelType, existingConfig = null) {
|
|||||||
errorMessage = 'Please enter a Webhook URL';
|
errorMessage = 'Please enter a Webhook URL';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'pushover':
|
||||||
|
const pushoverApiToken = document.getElementById('pushover_api_token').value.trim();
|
||||||
|
const pushoverUserKey = document.getElementById('pushover_user_key').value.trim();
|
||||||
|
if (!pushoverApiToken) {
|
||||||
|
isValid = false;
|
||||||
|
errorMessage = 'Please enter a Pushover API token';
|
||||||
|
} else if (!/^[a-zA-Z0-9]{30}$/.test(pushoverApiToken)) {
|
||||||
|
isValid = false;
|
||||||
|
errorMessage = 'Please enter a valid Pushover API token (30 alphanumeric characters)';
|
||||||
|
} else if (!pushoverUserKey) {
|
||||||
|
isValid = false;
|
||||||
|
errorMessage = 'Please enter a Pushover user key';
|
||||||
|
} else if (!/^[a-zA-Z0-9]{30}$/.test(pushoverUserKey)) {
|
||||||
|
isValid = false;
|
||||||
|
errorMessage = 'Please enter a valid Pushover user key (30 alphanumeric characters)';
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isValid) {
|
if (!isValid) {
|
||||||
@@ -725,6 +742,16 @@ function testChannel(channelType, existingConfig = null) {
|
|||||||
case 'webhook':
|
case 'webhook':
|
||||||
formData.append('webhook_url', existingConfig.webhook_url);
|
formData.append('webhook_url', existingConfig.webhook_url);
|
||||||
break;
|
break;
|
||||||
|
case 'pushover':
|
||||||
|
formData.append('pushover_api_token', existingConfig.api_token);
|
||||||
|
formData.append('pushover_user_key', existingConfig.user_key);
|
||||||
|
if (existingConfig.device) {
|
||||||
|
formData.append('pushover_device', existingConfig.device);
|
||||||
|
}
|
||||||
|
if (existingConfig.sound) {
|
||||||
|
formData.append('pushover_sound', existingConfig.sound);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Use form values for new channels
|
// Use form values for new channels
|
||||||
@@ -748,6 +775,18 @@ function testChannel(channelType, existingConfig = null) {
|
|||||||
case 'webhook':
|
case 'webhook':
|
||||||
formData.append('webhook_url', document.getElementById('generic_webhook_url').value);
|
formData.append('webhook_url', document.getElementById('generic_webhook_url').value);
|
||||||
break;
|
break;
|
||||||
|
case 'pushover':
|
||||||
|
formData.append('pushover_api_token', document.getElementById('pushover_api_token').value);
|
||||||
|
formData.append('pushover_user_key', document.getElementById('pushover_user_key').value);
|
||||||
|
const pushoverDevice = document.getElementById('pushover_device');
|
||||||
|
if (pushoverDevice && pushoverDevice.value) {
|
||||||
|
formData.append('pushover_device', pushoverDevice.value);
|
||||||
|
}
|
||||||
|
const pushoverSound = document.getElementById('pushover_sound');
|
||||||
|
if (pushoverSound && pushoverSound.value) {
|
||||||
|
formData.append('pushover_sound', pushoverSound.value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,6 +114,18 @@ for d in logs storage cache tmp runtime; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Create and set permissions for avatar uploads directory
|
||||||
|
UPLOADS_DIR="$APP_DIR/public/assets/uploads/avatars"
|
||||||
|
if [ ! -d "$UPLOADS_DIR" ]; then
|
||||||
|
echo " - Creating avatar uploads directory"
|
||||||
|
mkdir -p "$UPLOADS_DIR" || true
|
||||||
|
fi
|
||||||
|
if [ -d "$APP_DIR/public/assets/uploads" ]; then
|
||||||
|
echo " - Making uploads directory writable by ${WWW_UID}:${WWW_GID}"
|
||||||
|
chown -R ${WWW_UID}:${WWW_GID} "$APP_DIR/public/assets/uploads" || true
|
||||||
|
chmod -R 775 "$APP_DIR/public/assets/uploads" || true
|
||||||
|
fi
|
||||||
|
|
||||||
# Allow installer to create .installed at project root
|
# Allow installer to create .installed at project root
|
||||||
chmod 775 "$APP_DIR"
|
chmod 775 "$APP_DIR"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user