diff --git a/extensions/package-vulnerability-scanner/main.py b/extensions/package-vulnerability-scanner/main.py index 33fd5394..902dfa17 100644 --- a/extensions/package-vulnerability-scanner/main.py +++ b/extensions/package-vulnerability-scanner/main.py @@ -7,7 +7,9 @@ client = connect.Client() @app.get("/api/content") -async def search_content(query: str = None): +async def search_content(show_all: bool = False): + if show_all: + return client.content.find() return client.me.content.find() @app.get("/api/packages/{guid}") diff --git a/extensions/package-vulnerability-scanner/manifest.json b/extensions/package-vulnerability-scanner/manifest.json index a0315124..72e0b976 100644 --- a/extensions/package-vulnerability-scanner/manifest.json +++ b/extensions/package-vulnerability-scanner/manifest.json @@ -46,6 +46,6 @@ "requiredFeatures": [ "API Publishing" ], - "version": "2.0.2" + "version": "3.0.2" } } diff --git a/extensions/package-vulnerability-scanner/src/components/ContentList.vue b/extensions/package-vulnerability-scanner/src/components/ContentList.vue index b43d13fa..f223c357 100644 --- a/extensions/package-vulnerability-scanner/src/components/ContentList.vue +++ b/extensions/package-vulnerability-scanner/src/components/ContentList.vue @@ -1,9 +1,11 @@ @@ -189,9 +207,25 @@ const userHeader = computed(() => {
-

- {{ userHeader }} -

+
+

+ {{ userHeader }} +

+ + +

Found {{ scannerStore.content.length }} content items with diff --git a/extensions/package-vulnerability-scanner/src/stores/content.ts b/extensions/package-vulnerability-scanner/src/stores/content.ts index 427ac240..de8aee2a 100644 --- a/extensions/package-vulnerability-scanner/src/stores/content.ts +++ b/extensions/package-vulnerability-scanner/src/stores/content.ts @@ -20,20 +20,22 @@ export const useContentStore = defineStore("content", () => { const contentList = ref([]); const isLoading = ref(false); const error = ref(null); + const showAllContent = ref(false); - // Track if content has been loaded + // Track if content has been loaded for the current mode const isContentLoaded = ref(false); // Fetch all available content items - async function fetchContentList() { - // Skip if content is already loaded - if (isContentLoaded.value && contentList.value.length > 0) return; + async function fetchContentList(forceRefresh: boolean = false) { + // Skip if content is already loaded for this mode (unless forcing refresh) + if (!forceRefresh && isContentLoaded.value && contentList.value.length > 0) return; isLoading.value = true; error.value = null; try { - const response = await fetch("api/content"); + const url = showAllContent.value ? "api/content?show_all=true" : "api/content"; + const response = await fetch(url); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); @@ -57,6 +59,7 @@ export const useContentStore = defineStore("content", () => { isLoading, error, isContentLoaded, + showAllContent, // Actions fetchContentList, diff --git a/extensions/package-vulnerability-scanner/src/stores/packages.ts b/extensions/package-vulnerability-scanner/src/stores/packages.ts index f89b80cd..43e61cfb 100644 --- a/extensions/package-vulnerability-scanner/src/stores/packages.ts +++ b/extensions/package-vulnerability-scanner/src/stores/packages.ts @@ -79,6 +79,10 @@ export const usePackagesStore = defineStore("packages", () => { }; } + function clearAllPackages() { + contentItems.value = {}; + } + return { // State contentItems, @@ -88,5 +92,6 @@ export const usePackagesStore = defineStore("packages", () => { // Actions fetchPackagesForContent, setPackagesForContent, + clearAllPackages, }; }); diff --git a/extensions/package-vulnerability-scanner/src/stores/user.ts b/extensions/package-vulnerability-scanner/src/stores/user.ts index a9d199b5..864a0798 100644 --- a/extensions/package-vulnerability-scanner/src/stores/user.ts +++ b/extensions/package-vulnerability-scanner/src/stores/user.ts @@ -1,4 +1,4 @@ -import { ref } from "vue"; +import { ref, computed } from "vue"; import { defineStore } from "pinia"; export interface User { @@ -18,6 +18,8 @@ export interface User { export const useUserStore = defineStore("user", () => { const user = ref(); + const isAdmin = computed(() => user.value?.user_role === "administrator"); + async function fetchCurrentUser() { const response = await fetch("api/user"); const data = await response.json(); @@ -27,6 +29,7 @@ export const useUserStore = defineStore("user", () => { return { user, + isAdmin, fetchCurrentUser, };