enable or disable services
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
This commit is contained in:
@@ -1,19 +1,22 @@
|
||||
<script lang="ts">
|
||||
import { serverPassword, serverUrl } from "$src/lib/stores/server";
|
||||
import { cn } from "$src/lib/utils";
|
||||
import { Equal, EqualNot, Search } from "@lucide/svelte";
|
||||
import { Equal, EqualNot, Search, Settings } from "@lucide/svelte";
|
||||
import axios from "axios";
|
||||
import { navigate } from "sv-router/generated";
|
||||
import { toast } from "svelte-sonner";
|
||||
|
||||
const {
|
||||
initialQuery = "",
|
||||
initialFilter = "all",
|
||||
initialExactMatch = false,
|
||||
initialDatawells = true,
|
||||
initialGithubRecon = true,
|
||||
}: {
|
||||
initialQuery?: string;
|
||||
initialFilter?: string;
|
||||
initialExactMatch?: boolean;
|
||||
initialDatawells?: boolean;
|
||||
initialGithubRecon?: boolean;
|
||||
} = $props();
|
||||
|
||||
let filters = [
|
||||
@@ -30,12 +33,14 @@
|
||||
let activeFilter = $state<string>(initialFilter);
|
||||
let query = $state<string>(initialQuery);
|
||||
let exactMatch = $state<boolean>(initialExactMatch);
|
||||
let datawells = $state<boolean>(initialDatawells);
|
||||
let githubRecon = $state<boolean>(initialGithubRecon);
|
||||
|
||||
function NewSearch() {
|
||||
axios
|
||||
.post(
|
||||
`${$serverUrl}/search`,
|
||||
{ Text: query, Column: activeFilter, ExactMatch: exactMatch },
|
||||
{ Text: query, Column: activeFilter, ExactMatch: exactMatch, Datawells: datawells, GithubRecon: githubRecon },
|
||||
{
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
@@ -58,20 +63,43 @@
|
||||
</script>
|
||||
|
||||
<div class="flex gap-5 flex-col">
|
||||
<div
|
||||
class="flex gap-3 justify-start items-center w-full overflow-y-hidden overflow-x-auto"
|
||||
>
|
||||
{#each filters as filter}
|
||||
<button
|
||||
class={cn(
|
||||
"btn btn-md capitalize",
|
||||
activeFilter === filter
|
||||
? "btn-primary"
|
||||
: "btn-ghost btn-neutral text-base-content/80 hover:text-neutral-content",
|
||||
)}
|
||||
onclick={() => (activeFilter = filter)}>{filter.replace("_", " ")}</button
|
||||
<div class="w-full flex justify-between gap-5">
|
||||
<div
|
||||
class="flex gap-3 justify-start items-center w-full overflow-y-hidden overflow-x-auto"
|
||||
>
|
||||
{#each filters as filter}
|
||||
<button
|
||||
class={cn(
|
||||
"btn btn-md capitalize",
|
||||
activeFilter === filter
|
||||
? "btn-primary"
|
||||
: "btn-ghost btn-neutral text-base-content/80 hover:text-neutral-content",
|
||||
)}
|
||||
onclick={() => (activeFilter = filter)}
|
||||
>{filter.replace("_", " ")}</button
|
||||
>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
<details class="dropdown dropdown-end">
|
||||
<summary class="btn btn-square m-1"><Settings size={16} /></summary>
|
||||
<ul
|
||||
class="menu dropdown-content bg-base-200 rounded-box z-1 w-52 p-2 shadow-sm"
|
||||
>
|
||||
{/each}
|
||||
<li>
|
||||
<label class="label">
|
||||
<input type="checkbox" bind:checked={datawells} class="checkbox" />
|
||||
Datawells lookup
|
||||
</label>
|
||||
</li>
|
||||
<li>
|
||||
<label class="label">
|
||||
<input type="checkbox" bind:checked={githubRecon} class="checkbox" />
|
||||
Github Recon
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
<form
|
||||
|
||||
@@ -2,6 +2,10 @@ type Query = {
|
||||
Text: string;
|
||||
Column: string;
|
||||
ExactMatch: boolean;
|
||||
|
||||
// Services
|
||||
Datawells: boolean;
|
||||
GithubRecon: boolean;
|
||||
};
|
||||
|
||||
type LeakResult = {
|
||||
|
||||
@@ -108,6 +108,8 @@
|
||||
initialQuery={result.Query.Text}
|
||||
initialFilter={result.Query.Column}
|
||||
initialExactMatch={result.Query.ExactMatch}
|
||||
initialDatawells={result.Query.Datawells}
|
||||
initialGithubRecon={result.Query.GithubRecon}
|
||||
/>
|
||||
</header>
|
||||
|
||||
@@ -118,116 +120,120 @@
|
||||
<Stats {result} />
|
||||
</div>
|
||||
|
||||
<div class="collapse collapse-arrow bg-base-100 border">
|
||||
<input type="radio" name="my-accordion-2" checked={true} />
|
||||
<div
|
||||
class="collapse-title font-semibold text-xl flex justify-between items-center"
|
||||
>
|
||||
<div class="flex items-center gap-2">
|
||||
<Database size={18} class="text-base-content/60" />
|
||||
Data wells lookup
|
||||
</div>
|
||||
{#if result.LeakResult.Error !== ""}
|
||||
<CircleX size={16} class="text-error" />
|
||||
{:else if result.LeakResult.Duration === 0}
|
||||
<span class="loading loading-dots loading-xs"></span>
|
||||
{:else if result.LeakResult.Rows.length > 0}
|
||||
<CircleCheck size={16} class="text-success" />
|
||||
{:else}
|
||||
<CircleMinus size={16} class="text-base-content/60" />
|
||||
{/if}
|
||||
</div>
|
||||
<div class="collapse-content">
|
||||
{#if result.LeakResult.Error !== ""}
|
||||
<div role="alert" class="alert alert-soft alert-error">
|
||||
<CircleAlert size={20} />
|
||||
<span>Error! {result.LeakResult.Error}</span>
|
||||
{#if result.LeakResult.Error !== "not enabled" }
|
||||
<div class="collapse collapse-arrow bg-base-100 border">
|
||||
<input type="radio" name="my-accordion-2" checked={true} />
|
||||
<div
|
||||
class="collapse-title font-semibold text-xl flex justify-between items-center"
|
||||
>
|
||||
<div class="flex items-center gap-2">
|
||||
<Database size={18} class="text-base-content/60" />
|
||||
Data wells lookup
|
||||
</div>
|
||||
{:else if result.LeakResult.Duration === 0}
|
||||
<ul class="list rounded-box">
|
||||
{#each Array(5) as _}
|
||||
<div class="list-row text-left">
|
||||
<div>
|
||||
<div
|
||||
class="skeleton size-10 rounded-box items-center justify-center flex"
|
||||
></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="skeleton h-5 mb-1 w-52"></div>
|
||||
<div
|
||||
class="text-xs skeleton h-4 w-34 uppercase font-semibold opacity-60"
|
||||
></div>
|
||||
</div>
|
||||
<div class="btn btn-square btn-ghost">
|
||||
<ChevronDown size={12} />
|
||||
</div>
|
||||
</div>
|
||||
{/each}
|
||||
</ul>
|
||||
{:else}
|
||||
<p class="text-base-content/60">
|
||||
{result.LeakResult.Rows.length} results in {convertNanoSeconds(
|
||||
result.LeakResult.Duration,
|
||||
)}
|
||||
</p>
|
||||
{#if result.LeakResult.LimitHit}
|
||||
<div role="alert" class="alert alert-soft my-4">
|
||||
<CircleAlert size={20} />
|
||||
<div>
|
||||
<span class="font-semibold">Limit hit!</span> Consider refining
|
||||
your search query for more specific results.
|
||||
</div>
|
||||
</div>
|
||||
{#if result.LeakResult.Error !== ""}
|
||||
<CircleX size={16} class="text-error" />
|
||||
{:else if result.LeakResult.Duration === 0}
|
||||
<span class="loading loading-dots loading-xs"></span>
|
||||
{:else if result.LeakResult.Rows.length > 0}
|
||||
<CircleCheck size={16} class="text-success" />
|
||||
{:else}
|
||||
<CircleMinus size={16} class="text-base-content/60" />
|
||||
{/if}
|
||||
</div>
|
||||
<div class="collapse-content">
|
||||
{#if result.LeakResult.Error !== ""}
|
||||
<div role="alert" class="alert alert-soft alert-error">
|
||||
<CircleAlert size={20} />
|
||||
<span>Error! {result.LeakResult.Error}</span>
|
||||
</div>
|
||||
{:else if result.LeakResult.Duration === 0}
|
||||
<ul class="list rounded-box">
|
||||
{#each Array(5) as _}
|
||||
<div class="list-row text-left">
|
||||
<div>
|
||||
<div
|
||||
class="skeleton size-10 rounded-box items-center justify-center flex"
|
||||
></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="skeleton h-5 mb-1 w-52"></div>
|
||||
<div
|
||||
class="text-xs skeleton h-4 w-34 uppercase font-semibold opacity-60"
|
||||
></div>
|
||||
</div>
|
||||
<div class="btn btn-square btn-ghost">
|
||||
<ChevronDown size={12} />
|
||||
</div>
|
||||
</div>
|
||||
{/each}
|
||||
</ul>
|
||||
{:else}
|
||||
<p class="text-base-content/60">
|
||||
{result.LeakResult.Rows.length} results in {convertNanoSeconds(
|
||||
result.LeakResult.Duration,
|
||||
)}
|
||||
</p>
|
||||
{#if result.LeakResult.LimitHit}
|
||||
<div role="alert" class="alert alert-soft my-4">
|
||||
<CircleAlert size={20} />
|
||||
<div>
|
||||
<span class="font-semibold">Limit hit!</span> Consider refining
|
||||
your search query for more specific results.
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<Rows {result} />
|
||||
{/if}
|
||||
<Rows {result} />
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse collapse-arrow bg-base-100 border">
|
||||
<input type="radio" name="my-accordion-2" />
|
||||
<div
|
||||
class="collapse-title font-semibold text-xl flex justify-between items-center"
|
||||
>
|
||||
<div class="flex items-center gap-2">
|
||||
<Github size={18} class="text-base-content/60" />
|
||||
Github Recon
|
||||
</div>
|
||||
{#if result.GithubResult.Error !== ""}
|
||||
<CircleX size={16} class="text-error" />
|
||||
{:else if result.GithubResult.Duration === 0}
|
||||
<span class="loading loading-dots loading-xs"></span>
|
||||
{:else if !result.GithubResult.EmailResult?.Commits && !result.GithubResult.EmailResult?.Spoofing && !result.GithubResult.UsernameResult?.User}
|
||||
<CircleMinus size={16} class="text-base-content/60" />
|
||||
{:else if result.GithubResult.UsernameResult || result.GithubResult.EmailResult}
|
||||
<CircleCheck size={16} class="text-success" />
|
||||
{/if}
|
||||
</div>
|
||||
<div class="collapse-content">
|
||||
{#if result.GithubResult.Error !== ""}
|
||||
<div role="alert" class="alert alert-soft alert-error">
|
||||
<CircleAlert size={20} />
|
||||
<span>Error! {result.GithubResult.Error}</span>
|
||||
{/if}
|
||||
{#if result.GithubResult.Error !== "not enabled" }
|
||||
<div class="collapse collapse-arrow bg-base-100 border">
|
||||
<input type="radio" name="my-accordion-2" />
|
||||
<div
|
||||
class="collapse-title font-semibold text-xl flex justify-between items-center"
|
||||
>
|
||||
<div class="flex items-center gap-2">
|
||||
<Github size={18} class="text-base-content/60" />
|
||||
Github Recon
|
||||
</div>
|
||||
{:else if result.GithubResult.Duration === 0}
|
||||
<div role="alert" class="alert alert-soft">
|
||||
<span class="loading loading-dots loading-sm"></span>
|
||||
<span>Loading...</span>
|
||||
</div>
|
||||
{:else if !result.GithubResult.EmailResult?.Commits && !result.GithubResult.EmailResult?.Spoofing && !result.GithubResult.UsernameResult?.User}
|
||||
<div role="alert" class="alert alert-soft">
|
||||
<CircleMinus size={20} />
|
||||
<span>No result</span>
|
||||
</div>
|
||||
{:else}
|
||||
<p class="text-base-content/60 mb-4">
|
||||
Found a result in {convertNanoSeconds(
|
||||
result.GithubResult.Duration,
|
||||
)}
|
||||
</p>
|
||||
<GithubResult githubResult={result.GithubResult} />
|
||||
{/if}
|
||||
{#if result.GithubResult.Error !== ""}
|
||||
<CircleX size={16} class="text-error" />
|
||||
{:else if result.GithubResult.Duration === 0}
|
||||
<span class="loading loading-dots loading-xs"></span>
|
||||
{:else if !result.GithubResult.EmailResult?.Commits && !result.GithubResult.EmailResult?.Spoofing && !result.GithubResult.UsernameResult?.User}
|
||||
<CircleMinus size={16} class="text-base-content/60" />
|
||||
{:else if result.GithubResult.UsernameResult || result.GithubResult.EmailResult}
|
||||
<CircleCheck size={16} class="text-success" />
|
||||
{/if}
|
||||
</div>
|
||||
<div class="collapse-content">
|
||||
{#if result.GithubResult.Error !== ""}
|
||||
<div role="alert" class="alert alert-soft alert-error">
|
||||
<CircleAlert size={20} />
|
||||
<span>Error! {result.GithubResult.Error}</span>
|
||||
</div>
|
||||
{:else if result.GithubResult.Duration === 0}
|
||||
<div role="alert" class="alert alert-soft">
|
||||
<span class="loading loading-dots loading-sm"></span>
|
||||
<span>Loading...</span>
|
||||
</div>
|
||||
{:else if !result.GithubResult.EmailResult?.Commits && !result.GithubResult.EmailResult?.Spoofing && !result.GithubResult.UsernameResult?.User}
|
||||
<div role="alert" class="alert alert-soft">
|
||||
<CircleMinus size={20} />
|
||||
<span>No result</span>
|
||||
</div>
|
||||
{:else}
|
||||
<p class="text-base-content/60 mb-4">
|
||||
Found a result in {convertNanoSeconds(
|
||||
result.GithubResult.Duration,
|
||||
)}
|
||||
</p>
|
||||
<GithubResult githubResult={result.GithubResult} />
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user