feat: create system user accounts
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
+36
-23
@@ -131,10 +131,10 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
*
|
||||
* @returns Promise with service object list keyed by provider and service identifier
|
||||
*/
|
||||
async function list(targets?: ServiceIdentifier[] | CollectionIdentifier[]): Promise<Record<string, ServiceObject>> {
|
||||
async function list(targets?: ServiceIdentifier[] | CollectionIdentifier[], user?: string): Promise<Record<string, ServiceObject>> {
|
||||
transceiving.value = true
|
||||
try {
|
||||
const response = await serviceService.list({ targets })
|
||||
const response = await serviceService.list({ targets }, user)
|
||||
|
||||
// Flatten nested structure: provider-id: { service-id: object } -> "provider-id:service-id": object
|
||||
const services: Record<string, ServiceObject> = {}
|
||||
@@ -145,8 +145,10 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
})
|
||||
})
|
||||
|
||||
// Merge retrieved services into state
|
||||
_services.value = { ..._services.value, ...services }
|
||||
// Merge retrieved services into state (acting-user context stays out of the shared cache)
|
||||
if (!user) {
|
||||
_services.value = { ..._services.value, ...services }
|
||||
}
|
||||
|
||||
console.debug('[Mail Manager][Store] - Successfully retrieved', Object.keys(services).length, 'services')
|
||||
return services
|
||||
@@ -166,14 +168,16 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
*
|
||||
* @returns Promise with service object
|
||||
*/
|
||||
async function fetch(provider: string, identifier: string | number): Promise<ServiceObject> {
|
||||
async function fetch(provider: string, identifier: string | number, user?: string): Promise<ServiceObject> {
|
||||
transceiving.value = true
|
||||
try {
|
||||
const service = await serviceService.fetch({ provider, identifier })
|
||||
const service = await serviceService.fetch({ provider, identifier }, user)
|
||||
|
||||
// Merge fetched service into state
|
||||
// Merge fetched service into state (acting-user context stays out of the shared cache)
|
||||
const key = identifierKey(service.provider, service.identifier)
|
||||
_services.value[key] = service
|
||||
if (!user) {
|
||||
_services.value[key] = service
|
||||
}
|
||||
|
||||
console.debug('[Mail Manager][Store] - Successfully fetched service:', key)
|
||||
return service
|
||||
@@ -192,10 +196,10 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
*
|
||||
* @returns Promise with service availability status
|
||||
*/
|
||||
async function extant(targets: ServiceIdentifier[]) {
|
||||
async function extant(targets: ServiceIdentifier[], user?: string) {
|
||||
transceiving.value = true
|
||||
try {
|
||||
const response = await serviceService.extant({ targets })
|
||||
const response = await serviceService.extant({ targets }, user)
|
||||
|
||||
console.debug('[Mail Manager][Store] - Successfully checked', targets?.length ?? 0, 'services')
|
||||
return response
|
||||
@@ -215,14 +219,16 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
*
|
||||
* @returns Promise with created service object
|
||||
*/
|
||||
async function create(provider: string, data: Partial<ServiceInterface>): Promise<ServiceObject> {
|
||||
async function create(provider: string, data: Partial<ServiceInterface>, user?: string): Promise<ServiceObject> {
|
||||
transceiving.value = true
|
||||
try {
|
||||
const service = await serviceService.create({ provider, data })
|
||||
const service = await serviceService.create({ provider, data }, user)
|
||||
|
||||
// Merge created service into state
|
||||
// Merge created service into state (acting-user context stays out of the shared cache)
|
||||
const key = identifierKey(service.provider, service.identifier)
|
||||
_services.value[key] = service
|
||||
if (!user) {
|
||||
_services.value[key] = service
|
||||
}
|
||||
|
||||
console.debug('[Mail Manager][Store] - Successfully created service:', key)
|
||||
return service
|
||||
@@ -244,7 +250,7 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
*
|
||||
* @returns Promise with updated service object
|
||||
*/
|
||||
async function update(provider: string, identifier: string | number, delta: boolean, data: ServiceObject | Partial<ServiceInterface>): Promise<ServiceObject> {
|
||||
async function update(provider: string, identifier: string | number, delta: boolean, data: ServiceObject | Partial<ServiceInterface>, user?: string): Promise<ServiceObject> {
|
||||
transceiving.value = true
|
||||
try {
|
||||
// convert ServiceObject to JSON if needed
|
||||
@@ -255,11 +261,13 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
payload = data
|
||||
}
|
||||
|
||||
const service = await serviceService.update({ provider, identifier, delta, data: payload })
|
||||
const service = await serviceService.update({ provider, identifier, delta, data: payload }, user)
|
||||
|
||||
// Merge updated service into state
|
||||
// Merge updated service into state (acting-user context stays out of the shared cache)
|
||||
const key = identifierKey(service.provider, service.identifier)
|
||||
_services.value[key] = service
|
||||
if (!user) {
|
||||
_services.value[key] = service
|
||||
}
|
||||
|
||||
console.debug('[Mail Manager][Store] - Successfully updated service:', key)
|
||||
return service
|
||||
@@ -279,14 +287,16 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
*
|
||||
* @returns Promise with deletion result
|
||||
*/
|
||||
async function remove(provider: string, identifier: string | number): Promise<any> {
|
||||
async function remove(provider: string, identifier: string | number, user?: string): Promise<any> {
|
||||
transceiving.value = true
|
||||
try {
|
||||
await serviceService.delete({ provider, identifier })
|
||||
await serviceService.delete({ provider, identifier }, user)
|
||||
|
||||
// Remove deleted service from state
|
||||
const key = identifierKey(provider, identifier)
|
||||
delete _services.value[key]
|
||||
if (!user) {
|
||||
delete _services.value[key]
|
||||
}
|
||||
|
||||
console.debug('[Mail Manager][Store] - Successfully deleted service:', key)
|
||||
} catch (error: any) {
|
||||
@@ -314,6 +324,7 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
location: string | undefined,
|
||||
provider: string | undefined,
|
||||
onService?: (service: ServiceObject) => void,
|
||||
user?: string,
|
||||
): Promise<{ total: number }> {
|
||||
transceiving.value = true
|
||||
|
||||
@@ -322,7 +333,8 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
{ identity, secret, location, provider },
|
||||
(service: ServiceObject) => {
|
||||
onService?.(service)
|
||||
}
|
||||
},
|
||||
user
|
||||
)
|
||||
|
||||
console.debug('[Mail Manager][Store] - Successfully discovered', result.total, 'services')
|
||||
@@ -350,6 +362,7 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
identifier?: string | number | null,
|
||||
location?: ServiceLocation | Location | null,
|
||||
identity?: ServiceIdentity | Identity | null,
|
||||
user?: string,
|
||||
): Promise<any> {
|
||||
transceiving.value = true
|
||||
try {
|
||||
@@ -372,7 +385,7 @@ export const useServicesStore = defineStore('mailServicesStore', () => {
|
||||
identity = identity.toJson()
|
||||
}
|
||||
|
||||
const response = await serviceService.test({ provider, identifier, location, identity })
|
||||
const response = await serviceService.test({ provider, identifier, location, identity }, user)
|
||||
|
||||
console.debug('[Mail Manager][Store] - Successfully tested service:', provider, identifier || location)
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user