Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a4af57be9 | ||
|
|
2d1964106b | ||
|
|
7c4652ac49 | ||
|
|
c855253072 | ||
|
|
f20b7de053 | ||
|
|
afa7474094 |
+2
-2
@@ -16,8 +16,8 @@ DJANGO_SECRET_KEY=CHANGE_ME_generate_at_least_50_random_characters
|
||||
DJANGO_DEBUG=0
|
||||
# Leeg laten tot er een publieke HTTPS-URL is.
|
||||
PUBLIC_BASE_URL=
|
||||
DJANGO_ALLOWED_HOSTS=192.168.10.150,127.0.0.1,localhost
|
||||
DJANGO_CSRF_TRUSTED_ORIGINS=http://192.168.10.150:1226,http://127.0.0.1:1226
|
||||
DJANGO_ALLOWED_HOSTS=vacatureradar.local,127.0.0.1,localhost
|
||||
DJANGO_CSRF_TRUSTED_ORIGINS=http://vacatureradar.local:1226,http://127.0.0.1:1226
|
||||
DJANGO_TIME_ZONE=Europe/Brussels
|
||||
VACATURERADAR_OWNER_NAME=Jens
|
||||
VACATURERADAR_VERSION=0.3.12
|
||||
|
||||
@@ -21,6 +21,8 @@ concurrency:
|
||||
jobs:
|
||||
full:
|
||||
name: full
|
||||
# Public fork code must never execute automatically on the private runner.
|
||||
if: ${{ gitea.event_name != 'pull_request' || gitea.event.pull_request.head.repo.full_name == gitea.repository }}
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
@@ -53,6 +55,33 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# MANAGED_FAST_PATH: documentation and this baseline workflow cannot
|
||||
# affect the shipped runtime. Keep the required status check, but do
|
||||
# not install toolchains or execute the full product suite.
|
||||
if [[ -n "${GITHUB_BASE_REF:-}" ]]; then
|
||||
git fetch --no-tags --depth=1 origin "${GITHUB_BASE_REF}"
|
||||
managed_base="origin/${GITHUB_BASE_REF}"
|
||||
git diff --check "${managed_base}..HEAD"
|
||||
mapfile -t managed_changed_files < <(
|
||||
git diff --name-only --diff-filter=ACMR "${managed_base}..HEAD"
|
||||
)
|
||||
managed_runtime_change=0
|
||||
for managed_path in "${managed_changed_files[@]}"; do
|
||||
case "${managed_path}" in
|
||||
*.md|*.mdx|docs/*|.github/ISSUE_TEMPLATE/*|.gitea/ISSUE_TEMPLATE/*|.gitea/runner-scope.sh|.gitea/workflows/managed-validation.yml)
|
||||
;;
|
||||
*)
|
||||
managed_runtime_change=1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
if [[ "${#managed_changed_files[@]}" -gt 0 && "${managed_runtime_change}" -eq 0 ]]; then
|
||||
printf 'Managed validation fast path: %s non-runtime file(s); full product suite skipped.\n' \
|
||||
"${#managed_changed_files[@]}"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
if [[ -f pyproject.toml || -f requirements.txt ]]; then
|
||||
# Compile only tracked Python sources. Running compileall after a
|
||||
# Node install would otherwise traverse node_modules and turn a
|
||||
|
||||
+2
-1
@@ -38,7 +38,8 @@ Deze data mag nooit shell-, netwerk-, e-mail-, bestandssysteem- of sollicitatiea
|
||||
|
||||
## Kwetsbaarheid melden
|
||||
|
||||
Maak geen publieke issue met secrets of persoonlijke vacaturegegevens. Documenteer intern:
|
||||
Maak geen publieke issue met secrets of persoonlijke vacaturegegevens. Meld een
|
||||
kwetsbaarheid privé via `security@itworx.tech` en vermeld:
|
||||
|
||||
1. component en versie/commit;
|
||||
2. reproduceerbare stappen met synthetische data;
|
||||
|
||||
@@ -152,6 +152,7 @@ def seed_demo_environment(user) -> None:
|
||||
profile.save(update_fields=["is_active"])
|
||||
|
||||
now = timezone.now()
|
||||
today = timezone.localdate(now)
|
||||
workplace_map = {
|
||||
"hybrid": JobPosting.Workplace.HYBRID,
|
||||
"remote": JobPosting.Workplace.REMOTE,
|
||||
@@ -254,7 +255,7 @@ def seed_demo_environment(user) -> None:
|
||||
defaults={
|
||||
"status": Application.Status.INTERVIEW,
|
||||
"applied_at": now - timedelta(days=6),
|
||||
"follow_up_date": (now + timedelta(days=2)).date(),
|
||||
"follow_up_date": today + timedelta(days=2),
|
||||
"contact_name": "Sofie Vandael",
|
||||
"contact_email": "sofie.vandael@cloudnexus.example",
|
||||
"notes": "Eerste gesprek gepland. Demo-data.",
|
||||
@@ -267,7 +268,7 @@ def seed_demo_environment(user) -> None:
|
||||
defaults={
|
||||
"status": Application.Status.APPLIED,
|
||||
"applied_at": now - timedelta(days=2),
|
||||
"follow_up_date": (now + timedelta(days=5)).date(),
|
||||
"follow_up_date": today + timedelta(days=5),
|
||||
"notes": "Sollicitatie verstuurd. Demo-data.",
|
||||
},
|
||||
)
|
||||
|
||||
Binary file not shown.
@@ -461,7 +461,7 @@ VR-208-herverificatie op 2026-07-22:
|
||||
## Deploymentstatus
|
||||
|
||||
- `main` is via de bestaande Gitea-SSH-sleutel naar `NuklearRabbit/VacatureRadar` gepusht.
|
||||
- De applicatie draait op de Unraid-server via `http://192.168.10.150:1226/` als één Dockerman-container; Supervisor bewaakt intern PostgreSQL 17, Redis, web, worker en scheduler.
|
||||
- De applicatie draait op de Unraid-server via de geconfigureerde private host en poort `1226` als één Dockerman-container; Supervisor bewaakt intern PostgreSQL 17, Redis, web, worker en scheduler.
|
||||
- De Dockerman-tegel gebruikt de lokale VacatureRadar-favicon en opent rechtstreeks de WebUI op poort 1226.
|
||||
- De server-side `.env` heeft rechten `0600`; gegenereerde secrets zijn niet naar Git of logs gekopieerd.
|
||||
- Historisch bewijs (2026-07-22, inmiddels vervangen): de self-hosted runner was
|
||||
|
||||
@@ -105,7 +105,7 @@ Gebruik vanaf een beheerwerkstation altijd een benoemde SSH-hostalias met een af
|
||||
|
||||
```sshconfig
|
||||
Host unraid-itworx
|
||||
HostName 192.168.10.150
|
||||
HostName server.example.test
|
||||
Port 22
|
||||
User root
|
||||
IdentityFile ~/.ssh/itworx_unraid_deploy
|
||||
|
||||
@@ -145,15 +145,22 @@ def test_demo_login_logs_in_and_seeds_environment(client):
|
||||
assert "minstens één import actief" in sources.content.decode("utf-8")
|
||||
|
||||
|
||||
def test_demo_login_is_idempotent(client):
|
||||
from datetime import timedelta
|
||||
def test_demo_login_is_idempotent(client, monkeypatch):
|
||||
from datetime import UTC, datetime, timedelta
|
||||
|
||||
from django.utils import timezone
|
||||
|
||||
from apps.jobs.models import Application, JobPosting
|
||||
from apps.jobs.services import demo_seed
|
||||
from apps.profiles.models import SearchProfile
|
||||
from apps.sources.models import MailboxConnection, Source
|
||||
|
||||
# 22:30 UTC is already the following calendar day in Europe/Brussels.
|
||||
# Freezing this boundary prevents UTC `.date()` calls from creeping back in.
|
||||
near_local_midnight = datetime(2026, 9, 2, 22, 30, tzinfo=UTC)
|
||||
monkeypatch.setattr(demo_seed.timezone, "now", lambda: near_local_midnight)
|
||||
expected_local_day = timezone.localdate(near_local_midnight)
|
||||
|
||||
client.post(reverse("demo-login"))
|
||||
first = JobPosting.objects.count()
|
||||
demo_user = get_user_model().objects.get(username=settings.DEMO_USERNAME)
|
||||
@@ -172,8 +179,8 @@ def test_demo_login_is_idempotent(client):
|
||||
job.refresh_from_db()
|
||||
application.refresh_from_db()
|
||||
assert job.status == JobPosting.Status.ACTIVE
|
||||
assert job.last_seen.date() == timezone.localdate()
|
||||
assert application.follow_up_date > timezone.localdate()
|
||||
assert timezone.localdate(job.last_seen) == expected_local_day
|
||||
assert application.follow_up_date > expected_local_day
|
||||
assert profile.scores.count() == 6
|
||||
assert MailboxConnection.objects.filter(user=demo_user, enabled=True).count() == 9
|
||||
assert Source.objects.filter(source_type=Source.Type.EMAIL, failure_count=0).count() >= 9
|
||||
|
||||
@@ -49,8 +49,8 @@ def test_configure_public_url_updates_only_public_security_settings(tmp_path: Pa
|
||||
env_file.write_text(
|
||||
"DJANGO_SECRET_KEY=keep-this-secret\n"
|
||||
"POSTGRES_PASSWORD=keep-this-password\n"
|
||||
"DJANGO_ALLOWED_HOSTS=192.168.10.150,localhost\n"
|
||||
"DJANGO_CSRF_TRUSTED_ORIGINS=http://192.168.10.150:1226\n",
|
||||
"DJANGO_ALLOWED_HOSTS=vacatureradar.local,localhost\n"
|
||||
"DJANGO_CSRF_TRUSTED_ORIGINS=http://vacatureradar.local:1226\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
@@ -67,7 +67,7 @@ def test_configure_public_url_updates_only_public_security_settings(tmp_path: Pa
|
||||
assert "DJANGO_DEBUG=0" in content
|
||||
assert "vacatureradar.itworx.tech" in content
|
||||
assert (
|
||||
"DJANGO_CSRF_TRUSTED_ORIGINS=http://192.168.10.150:1226,https://vacatureradar.itworx.tech"
|
||||
"DJANGO_CSRF_TRUSTED_ORIGINS=http://vacatureradar.local:1226,https://vacatureradar.itworx.tech"
|
||||
) in content
|
||||
assert "CACHE_URL=redis://127.0.0.1:6379/1" in content
|
||||
assert "TRUSTED_PROXY_CIDRS=172.18.0.0/16" in content
|
||||
|
||||
Reference in New Issue
Block a user