mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
+15
-4
@@ -52,7 +52,7 @@ export default {
|
||||
created () {
|
||||
// this.$store.dispatch('auth/initialize')
|
||||
bus.$on('notification', this.showNotification)
|
||||
bus.$on('logged', this.checkAlarms)
|
||||
bus.$on('loggedIn', this.checkAlarms)
|
||||
},
|
||||
mounted () {
|
||||
this.checkAlarms()
|
||||
@@ -66,7 +66,9 @@ export default {
|
||||
notificationColor: 'success',
|
||||
notificationTimeout: 2000,
|
||||
alarmNotified: [],
|
||||
alarmChecker: null
|
||||
alarmChecker: null,
|
||||
lastAlarmDate: '',
|
||||
alarmSleepTime: 10000
|
||||
}),
|
||||
methods: {
|
||||
showNotification (options) {
|
||||
@@ -79,10 +81,19 @@ export default {
|
||||
checkAlarms () {
|
||||
if (this.isAuthenticated) {
|
||||
this.alarmChecker = window.setInterval(() => {
|
||||
alarms.getAll({}).then(resp => {
|
||||
const params = {}
|
||||
if (this.lastAlarmDate instanceof Date) {
|
||||
params.min_date = this.lastAlarmDate
|
||||
}
|
||||
alarms.getAll(params).then(resp => {
|
||||
let count = 0
|
||||
for (const alarm of resp.data) {
|
||||
if (alarm.status === 1 && !this.alarmNotified.includes(alarm.id)) {
|
||||
if (this.lastAlarmDate instanceof Date && new Date(alarm.created) > this.lastAlarmDate) {
|
||||
this.lastAlarmDate = new Date(alarm.created)
|
||||
} else if (!(this.lastAlarmDate instanceof Date)) {
|
||||
this.lastAlarmDate = new Date(alarm.created)
|
||||
}
|
||||
count++
|
||||
this.alarmNotified.push(alarm.id)
|
||||
}
|
||||
@@ -91,7 +102,7 @@ export default {
|
||||
bus.$emit('notification', { msg: this.$gettext('You have one or more opened alarms'), type: 'error' })
|
||||
}
|
||||
})
|
||||
}, 10000)
|
||||
}, this.alarmSleepTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,6 +82,7 @@ import { bus } from '@/main'
|
||||
import alarms from '@/api/alarms'
|
||||
import debounce from 'debounce'
|
||||
import MenuItems from '@/components/tools/MenuItems'
|
||||
import constants from '@/constants.json'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@@ -121,7 +122,7 @@ export default {
|
||||
}
|
||||
this.loading = true
|
||||
alarms.getAll(params).then(resp => {
|
||||
this.alarms = resp.data.results
|
||||
this.alarms = resp.data
|
||||
this.totalAlarms = resp.data.count
|
||||
this.loading = false
|
||||
})
|
||||
@@ -135,13 +136,13 @@ export default {
|
||||
})
|
||||
},
|
||||
async closeAlarm (alarm) {
|
||||
alarms.switchStatus(alarm.id, { status: 2 }).then(() => {
|
||||
alarms.switchStatus(alarm.id, { status: constants.ALARM_CLOSED }).then(() => {
|
||||
bus.$emit('notification', { msg: this.$gettext('Alarm closed') })
|
||||
this.fetchAlarms()
|
||||
})
|
||||
},
|
||||
async openAlarm (alarm) {
|
||||
alarms.switchStatus(alarm.id, { status: 1 }).then(() => {
|
||||
alarms.switchStatus(alarm.id, { status: constants.ALARM_OPENED }).then(() => {
|
||||
bus.$emit('notification', { msg: this.$gettext('Alarm re-opened') })
|
||||
this.fetchAlarms()
|
||||
})
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"ALARM_OPENED":1, "ALARM_CLOSED":2}
|
||||
@@ -87,7 +87,7 @@ export default {
|
||||
Cookies.set('token', resp.data.access, { sameSite: 'strict' })
|
||||
Cookies.set('refreshToken', resp.data.refresh, { sameSite: 'strict' })
|
||||
this.$store.dispatch('auth/initialize').then(() => {
|
||||
bus.$emit('logged')
|
||||
bus.$emit('loggedIn')
|
||||
this.$router.push({ name: 'DomainList' })
|
||||
})
|
||||
}).catch(err => {
|
||||
|
||||
@@ -326,13 +326,29 @@ class UserAccountViewSet(GetThrottleViewsetMixin, viewsets.ViewSet):
|
||||
return response.Response(serializer.validated_data)
|
||||
|
||||
|
||||
class AlarmFilterSet(dj_filters.FilterSet):
|
||||
"""Custom FilterSet for Alarms."""
|
||||
|
||||
min_date = dj_filters.DateTimeFilter(method="filter_date")
|
||||
|
||||
class Meta:
|
||||
model = models.Alarm
|
||||
fields = ["created"]
|
||||
|
||||
def filter_date(self, queryset, name, value):
|
||||
return queryset.filter(created__gt=value)
|
||||
|
||||
|
||||
class AlarmViewSet(GetThrottleViewsetMixin,
|
||||
mixins.ListModelMixin,
|
||||
mixins.RetrieveModelMixin,
|
||||
viewsets.GenericViewSet):
|
||||
"""Viewset for Alarm."""
|
||||
|
||||
filter_backends = (filters.OrderingFilter, filters.SearchFilter, )
|
||||
filter_backends = (filters.OrderingFilter,
|
||||
filters.SearchFilter,
|
||||
dj_filters.DjangoFilterBackend)
|
||||
filterset_class = AlarmFilterSet
|
||||
ordering_fields = ["created", "status", "title"]
|
||||
pagination_class = pagination.PageNumberPagination
|
||||
permission_classes = (
|
||||
@@ -349,9 +365,8 @@ class AlarmViewSet(GetThrottleViewsetMixin,
|
||||
|
||||
@action(methods=["delete"], detail=True)
|
||||
def delete(self, request, **kwargs):
|
||||
"""Custom delete method that accepts body arguments."""
|
||||
"""Allow admins to delete alarms."""
|
||||
alarm = self.get_object()
|
||||
domain = models.Domain.objects.get(pk=alarm.domain.pk)
|
||||
alarm.delete()
|
||||
return response.Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
@@ -361,7 +376,6 @@ class AlarmViewSet(GetThrottleViewsetMixin,
|
||||
alarm = self.get_object()
|
||||
serializer = serializers.AlarmSwitchStatusSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
domain = models.Domain.objects.get(pk=alarm.domain.pk)
|
||||
if serializer.data["status"] == constants.ALARM_CLOSED:
|
||||
alarm.close()
|
||||
else:
|
||||
|
||||
@@ -21,23 +21,18 @@ class ManageDKIMKeys(BaseCommand):
|
||||
"""Create a new DKIM key."""
|
||||
storage_dir = param_tools.get_global_parameter("dkim_keys_storage_dir")
|
||||
pkey_path = os.path.join(storage_dir, "{}.pem".format(domain.name))
|
||||
alarm_qset = models.alarm.Alarm.objects.filter(
|
||||
domain=domain.pk,
|
||||
internal_name=DKIM_WRITE_ERROR)
|
||||
alarm_qset = domain.alarms.filter(internal_name=DKIM_WRITE_ERROR)
|
||||
if not os.access(storage_dir, os.W_OK):
|
||||
if not alarm_qset:
|
||||
alarm = models.alarm.Alarm.objects.create(
|
||||
domain=domain,
|
||||
if not alarm_qset.exists():
|
||||
domain.alarms.create(
|
||||
title=_("DKIM path non-writable"),
|
||||
internal_name=DKIM_WRITE_ERROR
|
||||
)
|
||||
alarm.save()
|
||||
internal_name=DKIM_WRITE_ERROR)
|
||||
else:
|
||||
alarm = alarm_qset.first()
|
||||
if alarm.status != ALARM_OPENED:
|
||||
alarm.reopen()
|
||||
return
|
||||
elif alarm_qset:
|
||||
elif alarm_qset.exists():
|
||||
alarm_qset.first().close()
|
||||
key_size = (
|
||||
domain.dkim_key_length if domain.dkim_key_length
|
||||
|
||||
Reference in New Issue
Block a user