Skip to content
Merged
13 changes: 13 additions & 0 deletions src/app.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,19 @@
<link rel="icon" href="%sveltekit.assets%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="%sveltekit.assets%/config.js"></script>
<script>
;(function () {
try {
var stored = localStorage.getItem('preferredtheme')
var isDark =
stored === 'dark' ||
(stored !== 'light' &&
window.matchMedia('(prefers-color-scheme: dark)')
.matches)
if (isDark) document.documentElement.classList.add('dark')
} catch (e) {}
})()
</script>
%sveltekit.head%
</head>
<body>
Expand Down
6 changes: 3 additions & 3 deletions src/content/blog/postguard-may-update.svx
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ image: "/blog/may_update.png"
We've been hard at work turning PostGuard from a research project into a usable service for everyone. Let me walk you through all the exciting changes from the past few months.

## Infrastructure Move
We used to be hosted at the Radboud University and at Procolix. We have modernized everything into containers and moved to the Yivi Kubernetes cluster on Scaleway. We also renewed our deal with Procolix, who generously provides us with the fileshare server. We are very grateful for that! We've also finished moving all the domains and the email server.
We used to be hosted at the Radboud University and at Procolix. We have modernized everything into containers and moved to the Yivi Kubernetes cluster on Scaleway. We also renewed our deal with Procolix, who generously provides us with the fileshare server. We are very grateful for that. We've also finished moving all the domains and the email server.

## Soft launch of PostGuard for Business
We officially launched PostGuard for Business! We currently have two proof-of-concept partners with the Dutch government to programmatically send encrypted emails to citizens.
We officially launched PostGuard for Business. We currently have two proof-of-concept partners with the Dutch government to programmatically send encrypted emails to citizens.

To support these partners, we’ve made the Business portal fully bilingual (Dutch and English) and ensured it hits WCAG 2.2 AA accessibility standards. Whether you're using a screen reader or just prefer a specific language, PostGuard for Business is ready for you. If you want to try it out, just head on over to https://business.postguard.eu/ and press register.

Expand Down Expand Up @@ -49,7 +49,7 @@ var sealed = pg.Encrypt(new EncryptInput
```

## Brand new add-ins for Thunderbird and Outlook
We released the alpha version of our Thunderbird and Outlook add-ins. There is still some work to do, but sending email through Thunderbird or Outlook for Mac, Windows, or online is now possible. Our goal is to make it the smoothest way to send encrypted email. Check it out at https://postguard.eu/addons!
We released the alpha version of our Thunderbird and Outlook add-ins. There is still some work to do, but sending email through Thunderbird or Outlook for Mac, Windows, or online is now possible. Our goal is to make it the smoothest way to send encrypted email. Check it out at https://postguard.eu/addons.

![PostGuard cover](/blog/outlook_plugin_may.png)

Expand Down
25 changes: 25 additions & 0 deletions src/lib/components/filesharing/SendButton.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,18 @@
}
}

function onCancelUpload(): void {
if (!browser) return
// Mark before aborting so the catch in startEncryption() takes the
// self-aborted path and resets to FileSelection rather than showing
// the generic Error panel.
encryptState.selfAborted = true
encryptState.abort.abort()
// AbortController is single-use — provide a fresh one so a subsequent
// send attempt can be cancelled too.
encryptState.abort = new AbortController()
}

function updateProgress(pct: number) {
const totalSize = encryptState.files.reduce((a, f) => a + f.size, 0)
if (totalSize === 0) return
Expand Down Expand Up @@ -365,6 +377,14 @@
</p>
{/if}
</div>
<button
type="button"
class="crypt-btn crypt-btn-secondary cancel-upload-btn"
onclick={onCancelUpload}
disabled={encryptState.selfAborted}
>
{$_('filesharing.cancel')}
</button>
{:else}
<!-- Normal button -->
<button
Expand Down Expand Up @@ -638,6 +658,11 @@
stroke: var(--pg-text);
}

.cancel-upload-btn {
align-self: flex-start;
margin-top: 0.25rem;
}

.retry-status {
margin: 0;
padding: 0 1rem 0.75rem 1rem;
Expand Down
6 changes: 6 additions & 0 deletions src/lib/postguard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ export const pg = new PostGuard({
cryptifyUrl: FILEHOST_URL,
...(CHUNK_SIZE !== undefined && { uploadChunkSize: CHUNK_SIZE }),
retry: {
// Defaults (5 attempts, 500ms initial) exhaust the retry budget in
// ~7.5s — shorter than a typical cryptify restart, so a brief outage
// surfaces as a hard failure to the user. Stretch the budget so the
// total wait covers a realistic restart window (~90s).
maxAttempts: 8,
initialDelayMs: 1000,
onRetry: (event) => retryStatus.set(event),
},
})
1 change: 1 addition & 0 deletions src/routes/(marketing)/blog/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
class="rss-link"
href={resolve('/(marketing)/blog/rss.xml')}
aria-label="RSS feed"
data-sveltekit-reload
>
<svg
xmlns="http://www.w3.org/2000/svg"
Expand Down
Loading