{"id":15022327,"url":"https://github.com/php/web-news","last_synced_at":"2025-10-19T22:31:50.512Z","repository":{"id":6630520,"uuid":"7874404","full_name":"php/web-news","owner":"php","description":"The mailinglist frontend","archived":false,"fork":false,"pushed_at":"2024-10-04T02:19:16.000Z","size":17200,"stargazers_count":10,"open_issues_count":2,"forks_count":20,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-01-29T21:30:52.624Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/php.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-01-28T17:02:58.000Z","updated_at":"2024-10-04T02:19:20.000Z","dependencies_parsed_at":"2024-11-13T15:04:22.502Z","dependency_job_id":null,"html_url":"https://github.com/php/web-news","commit_stats":{"total_commits":208,"total_committers":32,"mean_commits":6.5,"dds":0.8076923076923077,"last_synced_commit":"8ec7891c10b6e6f6190e40074d57d3c471f236f8"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php%2Fweb-news","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php%2Fweb-news/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php%2Fweb-news/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php%2Fweb-news/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/php","download_url":"https://codeload.github.com/php/web-news/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237224792,"owners_count":19275086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-24T19:57:47.959Z","updated_at":"2025-10-19T22:31:50.208Z","avatar_url":"https://github.com/php.png","language":"PHP","readme":"# PHP.net News Server Web Interface\n\nYou may run this project using PHP's [built-in web server][webserver]\nfor local development.\n\n```\ngit clone https://github.com/php/web-news.git\ncd web-news/\nNNTP_HOST=news.php.net php -S localhost:8080 .router.php\n```\n\n-----\n\nthis is all very ugly. just proof-of-concept, really.\n\nthe biggest thing to do would be to do something smart with\nmime-encoded messages. but keeping the current property of \u003cb\u003enot\u003c/b\u003e\nslurping the whole damn message into memory just to do so.\n\nanother thing to do would be to support posting. to avoid\ncompletely anonymous posting, this could require confirming the\nemail address before allowing posts. to do this without actually\nhaving to maintain a database of users, we could send an email\ncontaining md5(md5(\"email:timestamp\").$secret) (where $secret is\nsome value that is kept secret. duh.) and then let the user \"log\nin\" by supplying their email address and this code, and storing\nthat in a cookie. depends on a secret for 'security', but like i\nsaid, it avoids having to maintain any sort of state on the server\nside. blocking email addresses for posting will be easy enough\nif anyone ever abuses the system.\n\nshould also probably protect email addresses from harvesters.\nthen again, anyone who wanted to harvest email addresses could just\ncrawl the nntp server directly. or they can crawl any of the other\nmail archives that don't protect the addresses.\n\nkeeping track of a .newsrc-like state for users would be cool,\ntoo. too bad there's no Set::IntSpan for php.\n\nperhaps chasing up the references: chain to display the\nthread when displaying an article would be interesting. i\nhave a feeling that building some sort of index is going\nto be desirable at some point. should use jwz's threading\nalgorithm. http://www.jwz.org/doc/threading.html\n\nftp://ftp.isi.edu/in-notes/rfc2047.txt explains how to decode encoded\nheader fields. handling utf-8 and iso-8859-1 should be pretty easy.\ncould use the gnu recode functions to do this in a general way,\ni think.\n\noh, and this uses direct socket functions instead of the php imap\nextension because nntp is a drop-dead-easy protocol, and i'm allergic\nto the c-client code.\n\n---\nSC.2004.09.03:\nHere are the appropriate Rewrite rules for apache:\n\n    RewriteEngine on\n    RewriteRule ^/(php.+)/start/([0-9]+) /group.php?group=$1\u0026i=$2 [L]\n    RewriteRule ^/(php.+)/([0-9]+)       /article.php?group=$1\u0026article=$2 [L]\n    RewriteRule ^/(php[^/]+)(/)?$        /group.php?group=$1 [L]\n\n\n[webserver]: http://php.net/manual/en/features.commandline.webserver.php\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp%2Fweb-news","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphp%2Fweb-news","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp%2Fweb-news/lists"}