Compare commits

...

4 Commits

Author SHA1 Message Date
Hendrik Eeckhaut
de9faea4c9 Added correct Chrome Web Store url 2026-01-23 11:48:19 +01:00
Hendrik Eeckhaut
877527aeca Fix: correctly set git hash in verfier's info 2026-01-23 11:48:19 +01:00
Hendrik Eeckhaut
52cc68937b perf(spotify-plugin): cache auth token to avoid repeated header filtering (#230) 2026-01-22 10:31:41 +01:00
Hendrik Eeckhaut
a04b3c671a Fix: git hash in deployed version (#229) 2026-01-21 11:27:22 +01:00
8 changed files with 45 additions and 24 deletions

View File

@@ -69,6 +69,8 @@ jobs:
push: ${{ env.should_publish == 'true' }}
tags: ${{ steps.meta-prover-server.outputs.tags }}
labels: ${{ steps.meta-prover-server.outputs.labels }}
build-args: |
GIT_HASH=${{ github.sha }}
build_and_publish_demo_frontend:
name: build and publish demo frontend image
@@ -105,3 +107,4 @@ jobs:
build-args: |
VITE_VERIFIER_HOST=demo-staging.tlsnotary.org
VITE_SSL=true
GIT_HASH=${{ github.sha }}

View File

@@ -4,6 +4,7 @@ FROM node:20-alpine AS builder
# Accept build arguments with defaults
ARG VITE_VERIFIER_HOST=localhost:7047
ARG VITE_SSL=false
ARG GIT_HASH=local
WORKDIR /app
@@ -17,6 +18,7 @@ COPY . .
# Build with environment variables
ENV VITE_VERIFIER_HOST=${VITE_VERIFIER_HOST}
ENV VITE_SSL=${VITE_SSL}
ENV GIT_HASH=${GIT_HASH}
RUN npm run build
# Runtime stage

View File

@@ -9,6 +9,7 @@ services:
- "7047:7047"
environment:
- RUST_LOG=info
- GIT_HASH=${GIT_HASH:-dev}
restart: unless-stopped
demo-static:
@@ -17,6 +18,7 @@ services:
args:
VITE_VERIFIER_HOST: ${VITE_VERIFIER_HOST:-localhost:7047}
VITE_SSL: ${VITE_SSL:-false}
GIT_HASH: ${GIT_HASH:-dev}
restart: unless-stopped
nginx:

View File

@@ -290,7 +290,7 @@ export function App() {
>
View source on GitHub
</a>
<span className="footer-version">v{__GIT_COMMIT_HASH__}</span>
<span className="footer-version">{__GIT_COMMIT_HASH__}</span>
</footer>
</div>
);

View File

@@ -71,7 +71,7 @@ export function StatusBar({
{!extensionOk && (
<div>
TLSNotary extension not detected.{' '}
<a href="chrome://extensions/" target="_blank" rel="noopener noreferrer">
<a href="https://chromewebstore.google.com/detail/tlsnotary/gnoglgpcamodhflknhmafmjdahcejcgg?authuser=2&hl=en" target="_blank" rel="noopener noreferrer">
Install extension
</a>
{' '}then <strong>refresh this page</strong>.

View File

@@ -33,12 +33,16 @@ async function onClick() {
setState('isRequestPending', true);
const [header] = useHeaders(headers => {
return headers.filter(header => header.url.includes(`https://${api}`));
});
// Use cached authorization token from state
const authToken = useState('authToken', null);
if (!authToken) {
setState('isRequestPending', false);
return;
}
const headers = {
authorization: header.requestHeaders.find(header => header.name === 'Authorization')?.value,
authorization: authToken,
Host: api,
'Accept-Encoding': 'identity',
Connection: 'close',
@@ -79,10 +83,23 @@ function minimizeUI() {
}
function main() {
const [header] = useHeaders(headers => headers.filter(h => h.url.includes(`https://${api}`)));
const isMinimized = useState('isMinimized', false);
const isRequestPending = useState('isRequestPending', false);
const authToken = useState('authToken', null);
// Only search for auth token if not already cached
if (!authToken) {
const token = useHeaders(h => h.filter(x => x.url.startsWith(`https://${api}`)))
.flatMap(h => h.requestHeaders)
.find((h: { name: string; value?: string }) => h.name === 'Authorization')
?.value;
if (token) {
setState('authToken', token);
console.log('Auth Token found:', token);
}
}
useEffect(() => {
openWindow(ui);
@@ -172,16 +189,16 @@ function main() {
marginBottom: '16px',
padding: '12px',
borderRadius: '6px',
backgroundColor: header ? '#d4edda' : '#f8d7da',
color: header ? '#155724' : '#721c24',
border: `1px solid ${header ? '#c3e6cb' : '#f5c6cb'}`,
backgroundColor: authToken ? '#d4edda' : '#f8d7da',
color: authToken ? '#155724' : '#721c24',
border: `1px solid ${authToken ? '#c3e6cb' : '#f5c6cb'}`,
fontWeight: '500',
},
}, [
header ? '✓ Api token detected' : '⚠ No API token detected'
authToken ? '✓ Api token detected' : '⚠ No API token detected'
]),
header ? (
authToken ? (
button({
style: {
width: '100%',
@@ -194,7 +211,7 @@ function main() {
fontSize: '15px',
transition: 'all 0.2s ease',
boxShadow: '0 2px 4px rgba(0,0,0,0.1)',
opacity: isRequestPending ? 0.5 : 1,
opacity: isRequestPending ? '0.5' : '1',
cursor: isRequestPending ? 'not-allowed' : 'pointer',
},
onclick: 'onClick',

View File

@@ -1,19 +1,12 @@
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { execSync } from 'child_process';
// Get git commit hash at build time
const getGitCommitHash = () => {
try {
return execSync('git rev-parse --short HEAD').toString().trim();
} catch {
return 'unknown';
}
};
// Get git commit hash from GIT_HASH env var (set by CI/Docker) or fallback to 'local'
const gitHash = process.env.GIT_HASH || 'local';
export default defineConfig({
define: {
__GIT_COMMIT_HASH__: JSON.stringify(getGitCommitHash()),
__GIT_COMMIT_HASH__: JSON.stringify(gitHash),
},
plugins: [react()],
build: {

View File

@@ -34,6 +34,10 @@ FROM debian:bookworm-slim
WORKDIR /app
# Accept build argument for git hash and set as environment variable
ARG GIT_HASH=local
ENV GIT_HASH=${GIT_HASH}
# Install runtime dependencies
RUN apt-get update && apt-get install -y \
ca-certificates \