Workflow-App/Workflow/scripts/mark_otp_required.py
sjcoetzeesj-coder 11d0178ab1 feat: commit Workflow app source; move CIPC credentials to env
Adds the full Next.js app (app/, components/, lib/, scripts/, assets/,
docs/, Dockerfile, compose, configs) to version control.

Security:
- CIPC BizPortal customer-code logins (Login 1 + Login 3) now read
  CIPC_LOGIN1_CODE / CIPC_LOGIN1_PASSWORD / CIPC_LOGIN3_CODE /
  CIPC_LOGIN3_PASSWORD from .env.local instead of source.
- BizPortal personal login in apply-bizportal route reads
  BIZPORTAL_ID_NO / BIZPORTAL_PASSWORD.
- Added .env.example as the committed template.

.gitignore excludes .env*, node_modules, .next, logs, sqlite, Playwright
storage_state.json (live CIPC cookies), scratch dirs, client PDFs and
debug screenshots.
2026-10-18 15:21:45 +02:00

67 lines
1.7 KiB
Python

"""Mark all companies using the given SARS login usernames as OTP-required.
Usage: .venv\Scripts\python mark_otp_required.py
"""
import os
import requests
from pathlib import Path
from dotenv import load_dotenv
load_dotenv(Path(r"C:\Users\SJ\.minimax-agent\projects\Workflow\.env.local").resolve())
pb_url = os.environ["PB_URL"].rstrip("/")
pb_token = os.environ["PB_TOKEN"]
H = {"Authorization": f"Bearer {pb_token}", "Content-Type": "application/json"}
CID = "pbc_3748838150"
target_users = [
"Vendre@4043",
"tmetrading@gmail.com",
"cpkloppers1241",
]
# Find all companies matching any of the usernames.
matched = []
for u in target_users:
f = f'sars_login_username="{u}"'
r = requests.get(
f"{pb_url}/api/collections/{CID}/records",
headers=H,
params={"filter": f, "perPage": 200},
)
r.raise_for_status()
items = r.json().get("items", [])
print(f"{u}: {len(items)} record(s)")
matched.extend(items)
# Dedupe by id
seen = set()
unique = []
for rec in matched:
if rec["id"] not in seen:
seen.add(rec["id"])
unique.append(rec)
print(f"\nTotal unique companies to mark otp=true: {len(unique)}")
for rec in unique:
print(
f" - {rec['id']:18s} "
f"{rec.get('enterprise_name')!r:42s} "
f"(login={rec.get('sars_login_username')})"
)
# Patch each with otp=true.
ok = 0
for rec in unique:
r = requests.patch(
f"{pb_url}/api/collections/{CID}/records/{rec['id']}",
headers=H,
json={"otp": True},
)
if r.status_code == 200:
ok += 1
print(f" PATCH OK {rec['id']}")
else:
print(f" PATCH FAIL {rec['id']}: {r.status_code} {r.text[:200]}")
print(f"\nDone. {ok}/{len(unique)} records marked otp=true.")