paivana

HTTP paywall reverse proxy
Log | Files | Refs | Submodules | README | LICENSE

DateCommit messageAuthorFiles+-
2026-08-07 21:12fix packaging warningChristian Grothoff2+8-2
2026-08-07 21:07try to fix debian packageChristian Grothoff1+15-6
2026-08-07 20:34bump versions for Debian packageChristian Grothoff2+8-2
2026-08-07 18:40add benchmarkChristian Grothoff7+1247-11
2026-08-07 18:25add reverse proxy testChristian Grothoff18+4855-738
2026-08-07 16:54expand test suite with payment testChristian Grothoff7+1210-5
2026-08-07 14:51-fix misc nitsChristian Grothoff26+1546-438
2026-08-07 14:43expand cookie testsChristian Grothoff5+1239-209
2026-08-07 14:41build system cleanupsChristian Grothoff19+360-158
2026-08-07 12:03clean up Debian package and especially hardeningChristian Grothoff10+136-133
2026-08-07 12:02improve reverse HTTP standards conformance (options, timeouts, etc.)Christian Grothoff2+622-27
2026-08-06 22:06implement connection limit options and handle OOM for buffer allocationChristian Grothoff5+169-10
2026-08-06 22:04add timeout on merchant backend request and only Vary on language if we actually have multiple templates that could applyChristian Grothoff2+204-22
2026-08-06 21:23escape string literals for JS and set CSP policyChristian Grothoff2+188-4
2026-08-06 21:18refuse to start without templates, unless in no-pay-modeChristian Grothoff2+29-6
2026-08-06 21:18replace badly named cur_time with expirationChristian Grothoff6+173-50
2026-08-06 17:25clean up forwarding header chain parsing and handlingChristian Grothoff2+45-20
2026-08-06 17:23clean up forwarding header chain parsing and handlingChristian Grothoff7+2759-1066
2026-08-06 17:19misc robustness fixesChristian Grothoff4+399-22
2026-08-06 17:13construct proper cookie pathChristian Grothoff4+665-8
2026-08-06 16:03ensure restarts happen if merchant backend is not available when we try to load templatesChristian Grothoff1+22-9
2026-08-06 16:02refuse to start if templates are not validChristian Grothoff2+18-14
2026-08-06 16:00make BASE_URL mandatory if '-f' is not givenChristian Grothoff2+39-3
2026-08-06 14:45split curl context between reverse proxy and merchant to avoid leaking merchant authorization secret to target hostChristian Grothoff5+60-20
2026-08-06 14:44empty regex matches everythingChristian Grothoff1+8-2
2026-08-06 14:21another header proxies should stripChristian Grothoff1+4-0
2026-08-06 14:20\r and \n are illegal in values, but \t is allowedChristian Grothoff1+4-4
2026-08-06 14:19preserve header order: need to insert at tailChristian Grothoff1+7-3
2026-08-06 14:18deny access of contract was refundedChristian Grothoff1+7-1
2026-08-06 14:17no trailing ';' in cookies as per specChristian Grothoff1+5-1
2026-08-06 14:17insist our contracts are well-formedChristian Grothoff1+11-3
2026-08-06 14:15do not log cookie (credential) valueChristian Grothoff2+5-3
2026-08-06 14:14correct build-depsChristian Grothoff1+6-2
2026-08-06 14:14add missing ALLOW header in 405 responseChristian Grothoff1+5-0
2026-08-06 14:12defualt to systemdChristian Grothoff1+15-1
2026-08-06 14:08reject non-canonical URLsChristian Grothoff1+68-0
2026-08-06 14:07fix base_url check: handle NULL, enforce '/' terminationChristian Grothoff1+44-3
2026-08-06 14:06handle missing end-quoteChristian Grothoff1+5-0
2026-08-05 19:33avoid trailing '/' in config causing '//' in constructed URLs when combining with path from MHDChristian Grothoff1+36-13
2026-08-05 18:00anchor regexes everywhereChristian Grothoff7+147-23
2026-08-05 16:47complete doxygenChristian Grothoff3+3-4
2026-08-05 16:45clean up license header to properly specify AGPLChristian Grothoff23+67-67
2026-08-04 16:44support RFC 7239 Forwarded alongside X-Forwarded-*Christian Grothoff9+1104-25
2026-08-04 16:33add TRUSTED_PROXIES policy for the forwarded client addressChristian Grothoff8+998-62
2026-08-04 16:26make forwarding headers follow --respect-forwarded-headersChristian Grothoff11+1010-59
2026-08-04 15:13comment on 'forever' treatmentChristian Grothoff1+3-0
2026-08-04 15:10normalize IP addresses before hashing for cookieChristian Grothoff6+226-53
2026-08-04 15:07make hdr parsing more robustChristian Grothoff1+7-4
2026-08-04 15:06make not getting client address fatal instead of allowing client to pay in vain (and then not get access anyway)Christian Grothoff1+21-5
2026-08-04 15:03remove dead depsChristian Grothoff1+0-10
2026-08-04 15:01end on error, do not continue with redirectChristian Grothoff1+1-0
2026-08-04 14:59-typoChristian Grothoff1+1-1
2026-08-04 14:53make URL parsing more robust, using libcurl parserChristian Grothoff5+90-23
2026-08-04 14:37add test to reproduce cases where upstream starts to respond but stops reading the requestChristian Grothoff3+438-89
2026-04-26 21:18test for early responseChristian Grothoff4+425-2
2026-08-04 14:00do not forward our cookie upstreamChristian Grothoff5+139-2
2026-08-04 13:52do not forward Connection header from server back to client eitherChristian Grothoff6+187-17
2026-08-04 13:11check target website is reasonableChristian Grothoff1+16-1
2026-08-04 12:40check calloc for NULLChristian Grothoff1+2-0
2026-08-04 12:38fix shutdown leak from lack of shutdown task, add assertionChristian Grothoff2+3-3
2026-08-04 12:36make OOB check more explicitChristian Grothoff1+6-2
2026-08-04 12:01-remove useles MHD option, clean up lsock on failureChristian Grothoff1+3-2
2026-08-04 11:59enforce order_id is a slug, prevent NPE on missing hostChristian Grothoff3+13-7
2026-08-04 11:44check X-Forwarded port is well-formed, do not use if defaultChristian Grothoff1+29-7
2026-08-04 11:39also enforce 40MB limit from GNUnetChristian Grothoff1+16-7
2026-08-03 19:43-fix leakChristian Grothoff2+2-0
2026-08-03 19:42properly return error codes if configuration/options are badChristian Grothoff2+10-0
2026-08-03 19:31enforce -f also on X-Forwarded-Host/PortChristian Grothoff1+6-3
2026-08-03 19:13avoid excessive memmove on larger uploadsChristian Grothoff1+11-6
2026-08-03 19:11bound number of templates we cacheChristian Grothoff1+46-0
2026-08-03 19:04fix early-response handling in reverse proxyChristian Grothoff1+3-2
2026-08-02 21:05validate 'website' is a URLChristian Grothoff3+14-3
2026-08-02 21:02do not die if we could not set headersChristian Grothoff1+8-8
2026-08-02 21:01ensure client's cur_time is within a reasonable timeframe of 'now'Christian Grothoff1+20-0
2026-08-02 20:55only log if adding Paivana header failedChristian Grothoff1+4-4
2026-08-02 20:54use constant-time cmp on authentication dataChristian Grothoff1+2-2
2026-07-28 14:46paivana: answer HEAD requests for the paywall pageFlorian Dold1+7-2
2026-07-27 17:25debian: install into debian/tmpFlorian Dold1+4-1
2026-07-27 17:22fix duplicate meson version argumentFlorian Dold1+0-1
2026-07-27 17:20fix debian rules for mesonFlorian Dold1+1-4
2026-07-27 17:19remove leftover autotools Makefile.amFlorian Dold1+0-8
2026-07-27 16:52debian: fix file list of the paivana-httpd packageFlorian Dold1+1-1
2026-06-22 12:18put frontend under src/frontend and refactorFlorian Dold11+834-657
2026-06-22 09:35pass missing nonce argumentChristian Grothoff1+2-2
2026-06-16 14:56convert to new gnunet random APIMartin Schanzenbach3+145-146
2026-06-01 17:34configure: export flags for 'meson setup'Florian Dold1+4-1
2026-05-31 10:56use 409, not 400Christian Grothoff2+4-3
2026-05-31 10:38write READMEChristian Grothoff1+188-0
2026-05-31 10:14return 501 if paywall is disabled for /.well-known/paivana endpointChristian Grothoff6+19-5
2026-05-31 09:28handle allocation failures betterChristian Grothoff1+40-33
2026-05-31 09:24limit responses to GNUNET_MAX_MALLOC_CHECKEDChristian Grothoff3+32-20
2026-05-31 08:58cleanup minor issuesChristian Grothoff4+49-25
2026-05-30 23:30-more bugfixesChristian Grothoff5+46-31
2026-05-30 23:00-misc bugfixesChristian Grothoff3+24-10
2026-05-30 22:45-misc bugfixesChristian Grothoff2+6-4
2026-05-30 22:36-misc bugfixesChristian Grothoff5+35-26
2026-05-22 09:25Fix #11423Martin Schanzenbach6+43-6
2026-05-13 03:32fix #11385Sebastian2+117-45
2026-05-12 20:01must be increfChristian Grothoff1+1-1
2026-05-12 19:50choices is an array not an objSebastian2+6-4
2026-05-08 21:56bump versionChristian Grothoff1+1-2
2026-05-08 21:46pass summary and choices to Paivana page generationChristian Grothoff1+103-70
2026-05-05 11:34add whitelisting, global cookie setting, but generally restrict payment per pathChristian Grothoff6+118-6
2026-05-04 14:09use IP, not struct sockaddrChristian Grothoff2+15-7
2026-05-04 14:03more loggingChristian Grothoff1+1-1
2026-05-04 14:02more loggingChristian Grothoff1+12-3
2026-05-04 13:55more loggingChristian Grothoff2+20-1
2026-05-04 13:47more loggingChristian Grothoff1+5-0
2026-05-03 22:55402 resp change based on cookieSebastian1+2-1
2026-05-03 22:54dont follow redirect when checking paymentSebastian1+4-3
2026-05-03 22:45use the right website from the location.hashSebastian1+22-17
2026-05-03 22:12styled paywallSebastian1+410-28
2026-05-03 17:56fix #11356Christian Grothoff1+21-0
2026-05-03 08:04even cache 302, but Vary on CookieChristian Grothoff1+8-0
2026-05-02 21:36-fix up configChristian Grothoff1+4-4
2026-05-02 21:18update implementation to match latest specChristian Grothoff3+97-7
2026-05-02 17:44properly initialize max_pickup_duration from template, default to FOREVER as per specChristian Grothoff1+5-1
2026-05-02 17:30must allow some minimum caching, otherwise this is really bad for high-performance sitesChristian Grothoff1+4-1
2026-05-01 12:20debian: clean up rulesChristian Grothoff5+4-7
2026-05-01 11:33debian: build-depends on meson now, remove autotoolsChristian Grothoff1+2-4
2026-04-30 23:44fix #11356: cache is bad here sinceSebastian1+0-4
2026-04-30 23:42fix typo: missing colonSebastian1+1-1
2026-04-30 22:51support for destination unix pathSebastian3+25-0
2026-04-29 21:33make error messages slightly nicerChristian Grothoff1+4-4
2026-04-29 17:55fix #11356 couple of fixes - use proper buffer before hashing to 256 - query paivana on origin instead of website - request the merchant directly (instead of /.well-known/paivana/session/) - qrjs inplace (instead of internet request to sauron)Sebastian1+174-122
2026-04-29 17:49fix #11356: default max pickup time to one hourSebastian1+1-0
2026-04-29 17:22ignore makefilesSebastian1+1-0
2026-04-29 17:21fix #11356 bad cookie formatSebastian1+1-1
2026-04-29 13:13missgin resource releaseSebastian1+1-0
2026-04-29 13:00fix valgrind: Use of uninitialised value of size 8Sebastian1+1-1
2026-04-29 12:53fix #11356 corrected commit 0dc274dSebastian1+2-2
2026-04-28 21:55-bugfixChristian Grothoff1+1-1
2026-04-28 17:00fix #11356 when .well-known is present it won't be at the start of the URLSebastian1+1-1
2026-04-27 19:42fix minor warningChristian Grothoff1+12-7
2026-04-27 15:18fix #11356 adding paivana header reponse for non-webSebastian1+62-0
2026-04-26 22:15remove FIXMEChristian Grothoff1+8-7
2026-04-26 22:12remove -F option, also use PH_ctx instead of another curl multi loop for the reverse proxy curl interactionChristian Grothoff3+87-415
2026-04-26 21:15add -F flag to continue upload even if response is already being receivedChristian Grothoff3+32-6
2026-04-26 20:48do not 502 on early responseChristian Grothoff1+52-48
2026-04-26 20:09use bool for curl_pausedChristian Grothoff1+4-4
2026-04-26 20:08implement new -f option to extract client address from X-forwarded-for headerChristian Grothoff1+43-6
2026-04-26 20:04add new -f command-line optionChristian Grothoff2+17-0
2026-04-26 20:01set VARY and CACHE_CONTROL headers in paywall responsesChristian Grothoff1+12-2
2026-04-26 19:07fix 100 continue handlingChristian Grothoff3+14-16
2026-04-26 19:04clean up reverse proxy state machine logic and error handlingChristian Grothoff1+683-459
2026-04-23 21:07fix Via and Connection header handlingChristian Grothoff2+210-23
2026-04-23 20:54fail 100 continue early properlyChristian Grothoff1+0-3
2026-04-23 20:54fail 100 continue early properlyChristian Grothoff3+112-3
2026-04-23 20:43make max upload size an optionChristian Grothoff2+14-10
2026-04-23 20:39add reverse proxy testsChristian Grothoff11+2157-1
2026-04-23 20:20add FIXMEChristian Grothoff1+2-1
2026-04-23 19:05more comprehensive reverse proxy logicChristian Grothoff1+327-45
2026-04-23 17:30only initialize templates if we are actually in paywall modeChristian Grothoff1+46-24
2026-04-23 17:22use prebuilt branchChristian Grothoff1+1-0
2026-04-23 14:31build: update depdencies for nix buildMartin Schanzenbach2+6-7
2026-04-23 13:53add Debian package definitionChristian Grothoff20+1620-0
2026-04-23 06:36build: Migrate to mesonMartin Schanzenbach17+1577-427
2026-04-22 20:59debug paivanaChristian Grothoff9+368-142
2026-04-21 22:30sketch HTML paywall pageChristian Grothoff1+4-5
2026-04-21 22:29sketch HTML paywall pageChristian Grothoff2+150-63
2026-04-21 21:38add man pagesChristian Grothoff1+4-0
2026-04-21 21:35add docs submoduleChristian Grothoff3+5-0
2026-04-20 20:03use FIXME, not TODOChristian Grothoff1+1-1
2026-04-20 18:08complete template loading logicChristian Grothoff5+51-44
2026-04-20 16:50start to implement template logicChristian Grothoff6+283-43
2026-04-20 13:34more basics on PaivanaChristian Grothoff6+478-382
2026-04-20 13:21WiPChristian Grothoff6+377-65
2026-04-20 13:09address various FIXMEsChristian Grothoff4+98-68
2026-04-19 22:34can be staticChristian Grothoff1+2-2
2026-04-19 22:34expand consistency check logicChristian Grothoff2+86-9
2026-04-19 22:15compute paivana hash without complex KDF as per specChristian Grothoff1+14-13
2026-04-19 22:11compute paivana_id for session checkChristian Grothoff3+70-1
2026-04-19 21:59align cookie computation with specChristian Grothoff4+25-15
2026-04-19 21:13more work on Paivana: add pay handlerChristian Grothoff8+784-225
2026-04-16 09:06refacotor httpd logicChristian Grothoff6+1366-1144
2026-04-16 07:33use libtalermhd to remove code duplicationChristian Grothoff3+92-389
2026-04-16 07:02use timestampChristian Grothoff2+49-10
2026-04-07 14:23adapt to latest GNUnet APIChristian Grothoff1+9-10
2025-11-26 23:32Paivana paywall servingChristian Grothoff1+5-0
2025-11-26 23:29get paywall pageChristian Grothoff1+14-10
2025-11-26 23:27expand build system to install resource fileChristian Grothoff2+2-1
2025-11-26 23:24basic paywall logicChristian Grothoff2+298-2
2025-11-26 23:12paywall.htmlFlorian Dold1+71-0
2025-11-26 22:40complete trivial reverse proxyChristian Grothoff6+314-41
2025-11-26 22:28get code to compileChristian Grothoff4+77-37
2025-11-26 13:22more basicsChristian Grothoff5+110-0
2025-11-26 13:14minimal build systemChristian Grothoff3+2-0
2025-11-26 13:12initial import, based on twisterChristian Grothoff8+2787-0