License check improvement (#380)
* refactor: improve mssp feature check * remove comment --------- Co-authored-by: Davide Di Modica <webmaster.ddm@gmail.com>
taylor_socfortress committed
Dec 18, 2024 at 09:22 UTC
256cd31a5bddce4faca0dbf5510053bcdf3e4d09
2 files changed
+44
-46
backend/app/customers/routes/customers.py
+1
-1
@@ -152,7 +152,7 @@ async def create_customer(
152
logger.info(f"Creating new customer: {customer}")
153
new_customer = Customers(**customer.dict())
154
session.add(new_customer)
155
- await session.commit() # Use await to perform the commit operation asynchronously
155
+ await session.commit()
156
return CustomerResponse(
157
customer=customer,
158
success=True,
frontend/src/components/customers/CustomerCreationButton.vue
+43
-45
@@ -1,20 +1,18 @@
1
<template>
2
- <LicenseFeatureCheck
3
- :feature="licenseKey"
4
- :disabled="licenseDisabled"
5
- feedback="tooltip"
6
- @response="
7
- (() => {
8
- licenseChecked = true
9
- licenseResponse = $event
10
- })()
11
- "
12
- >
2
+ <div>
3
+ <LicenseFeatureCheck v-if="!licenseDisabled" feature="MSSP 5" @response="isMSSP5Enabled = $event" />
4
+ <LicenseFeatureCheck v-if="!licenseDisabled" feature="MSSP 10" @response="isMSSP10Enabled = $event" />
5
+ <LicenseFeatureCheck
6
+ v-if="!licenseDisabled"
7
+ feature="MSSP Unlimited"
8
+ @response="isMSSPUnlimitedEnabled = $event"
9
+ />
10
+
11
<n-button
12
:size="size || 'small'"
13
type="primary"
16
- :loading="!licenseChecked && !licenseDisabled"
17
- :disabled="!licenseChecked || !licenseResponse || disabled"
14
+ :loading="licenseLoading && !licenseDisabled"
15
+ :disabled="!licenseEnabled || disabled"
16
@click="showAddCustomer = true"
17
>
18
<template #icon>
@@ -22,22 +20,26 @@
20
</template>
21
<div class="flex items-center gap-2">
22
<span>Add Customer</span>
25
- <Icon v-if="!licenseResponse && licenseChecked" :name="LockIcon" :size="14" />
23
+ <Icon v-if="!licenseEnabled && !licenseLoading" :name="LockIcon" :size="14" />
24
</div>
25
</n-button>
28
- </LicenseFeatureCheck>
26
30
- <n-drawer
31
- v-model:show="showAddCustomer"
32
- :width="500"
33
- style="max-width: 90vw"
34
- :trap-focus="false"
35
- display-directive="show"
36
- >
37
- <n-drawer-content title="Add Customer" closable :native-scrollbar="false">
38
- <CustomerForm :reset-on-submit="true" @mounted="customerFormCTX = $event" @submitted="emit('submitted')" />
39
- </n-drawer-content>
40
- </n-drawer>
27
+ <n-drawer
28
+ v-model:show="showAddCustomer"
29
+ :width="500"
30
+ style="max-width: 90vw"
31
+ :trap-focus="false"
32
+ display-directive="show"
33
+ >
34
+ <n-drawer-content title="Add Customer" closable :native-scrollbar="false">
35
+ <CustomerForm
36
+ :reset-on-submit="true"
37
+ @mounted="customerFormCTX = $event"
38
+ @submitted="emit('submitted')"
39
+ />
40
+ </n-drawer-content>
41
+ </n-drawer>
42
+ </div>
43
</template>
44
45
<script setup lang="ts">
@@ -65,22 +67,27 @@ const LockIcon = "carbon:locked"
67
const AddUserIcon = "carbon:user-follow"
68
const customerFormCTX = ref<{ reset: () => void } | null>(null)
69
const showAddCustomer = ref(false)
68
-
69
-const licenseChecked = ref(!customersCount)
70
-const licenseResponse = ref(!customersCount)
70
+const isMSSP5Enabled = ref<null | boolean>(null)
71
+const isMSSP10Enabled = ref<null | boolean>(null)
72
+const isMSSPUnlimitedEnabled = ref<null | boolean>(null)
73
+const licenseLoading = computed<boolean>(
74
+ () => isMSSP5Enabled.value === null || isMSSP10Enabled.value === null || isMSSPUnlimitedEnabled.value === null
75
+)
76
const licenseDisabled = computed<boolean>(() => !customersCount)
72
-const licenseKey = computed<LicenseFeatures>(() => {
73
- let key: LicenseFeatures = "MSSP 5"
77
+const licenseEnabled = computed<boolean>(() => {
78
+ if (isMSSPUnlimitedEnabled.value) {
79
+ return true
80
+ }
81
75
- if (customersCount && customersCount >= 5) {
76
- key = "MSSP 10"
82
+ if (isMSSP10Enabled.value && customersCount !== undefined && customersCount < 10) {
83
+ return true
84
}
85
79
- if (customersCount && customersCount >= 10) {
80
- key = "MSSP Unlimited"
86
+ if (isMSSP5Enabled.value && customersCount !== undefined && customersCount < 5) {
87
+ return true
88
}
89
83
- return key
90
+ return false
91
})
92
93
watch(showAddCustomer, val => {
@@ -99,13 +106,4 @@ watch(
106
},
107
{ immediate: true }
108
)
102
-
103
-watch(
104
- licenseKey,
105
- () => {
106
- licenseResponse.value = !customersCount
107
- licenseChecked.value = !customersCount
108
- },
109
- { immediate: true }
110
-)
109
</script>