{"id":18336432,"url":"https://github.com/i2p/i2p.newsxml","last_synced_at":"2025-08-07T20:30:30.644Z","repository":{"id":146624453,"uuid":"283352973","full_name":"i2p/i2p.newsxml","owner":"i2p","description":"The I2P News Update Feed","archived":false,"fork":false,"pushed_at":"2025-03-22T01:55:34.000Z","size":3936,"stargazers_count":4,"open_issues_count":0,"forks_count":4,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-09T19:55:43.588Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","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/i2p.png","metadata":{"files":{"readme":"README","changelog":"news.sh","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":"2020-07-28T23:50:53.000Z","updated_at":"2025-03-22T01:55:38.000Z","dependencies_parsed_at":"2023-11-22T02:27:11.923Z","dependency_job_id":"1007fcc0-b8a6-4ef6-add6-f061d2d06795","html_url":"https://github.com/i2p/i2p.newsxml","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i2p%2Fi2p.newsxml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i2p%2Fi2p.newsxml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i2p%2Fi2p.newsxml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/i2p%2Fi2p.newsxml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/i2p","download_url":"https://codeload.github.com/i2p/i2p.newsxml/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248103911,"owners_count":21048245,"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-11-05T20:07:55.893Z","updated_at":"2025-04-09T19:55:49.824Z","avatar_url":"https://github.com/i2p.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"Package Requirements:\n\tpython\n\tpython-dev\n\tpython-virtualenv\n\tlibxml2-dev\n\tlibxslt1-dev\n\ttx client to push/pull translations\n\nTo set up:\n\n$ ./setup_venv.sh\n$ . env/bin/activate\n$ pip install .\n\nCopy etc/su3.vars to etc/su3.vars.custom\nChange settings for your signing key name and keystore location\n\n\nTo upgrade after changes to the I2P Atom extension:\n\n$ . env/bin/activate\n$ pip uninstall feedgen-i2p\n$ pip install .\n\n\n\nTo write a news entry:\n\n$ EDITOR=vim ./create_new_entry.sh\n\nThe highest-level heading that can be used is \u003ch4\u003e, but it looks bad in CSS, so\nfor now use \u003cp\u003e\u003cb\u003e.\n\nIf it's an I2P release, edit data/releases.json as well.\nValid su3 map entries in releases.json are:\n\n   torrent:     A single magnet link\n   url:         A list of in-i2p http URLs, supported in I2P as of 1.6.0\n   clearnet:    A list of non-i2p http URLs, not currently supported in I2P\n   clearnetssl: A list of non-i2p https URLs, not currently supported in I2P\n\n\nNOTE: Only the following XHTML entities are allowed in news entries.\nStrict XHTML is required. This is enforced in NewsXMLParser.\n\n    \"a\", \"b\", \"br\", \"div\", \"i\", \"p\", \"span\", \"font\", \"blockquote\", \"hr\",\n    \"del\", \"ins\", \"em\", \"strong\", \"mark\", \"sub\", \"sup\", \"tt\", \"code\", \"strike\", \"s\", \"u\",\n    \"h4\", \"h5\", \"h6\",\n    \"ol\", \"ul\", \"li\", \"dl\", \"dt\", \"dd\",\n    \"table\", \"tr\", \"td\", \"th\"\n\nPlease use .i2p links instead of clearnet links in news entries if possible.\n\n**Important:** Validate your XHTML with\n$ xmllint data/entries.html \u003e /dev/null || echo FAIL\n\n**WARNING:** *NEVER* push translations from here (tx push -t)! The strings will\n*NOT* match, and *ALL* translations will get out-of-sync!\n\nTo push the new entry into translations:\n\n$ tx push -s\n$ tx pull --use-git-timestamps -a\n\n\nTo pull translations:\n\n$ tx pull --use-git-timestamps -a\n\n\nTo build the feeds:\n\n$ ./news.sh\n\n\nServer requirements:\n\nWe recommend that the news server be run on its own\ntunnels and website, not combined with anything else,\nso the traffic and connection limits may be managed separately.\n\nServer MUST send Last-Modified or Etag header, and respond correctly\nto conditional headers in the request, so that unmodified\nfiles are not re-downloaded and re-displayed in the router console.\nFor lighttpd, these headers are NOT set unless mime types are\nconfigured for .su3 and .xml files; they are NOT configured by default.\n\nFor languages other than English, the router appends a ?lang=xx parameter\nto the URL, where xx is two or more lower-case letters (language code)\npossibly followed by an underscore and two or more upper-case letters (country code).\nThe server must map this request to the correct file, if available,\nwith fallback to a file that is available.\n\n\nThere are two supported hosting solutions:\n\n1) lighttpd\n\nExample rewrite rules for lighttpd to host the feeds:\n\n    url.rewrite-repeat = (\n        \"^/news/news.atom.xml\\?lang=([a-z]+(_[A-Za-z]+)?)\" =\u003e \"/news/news_$1.atom.xml\",\n        \"^/news/news.su3\\?lang=([a-z]+(_[A-Za-z]+)?)\" =\u003e \"/news/news_$1.su3\",\n    )\n    url.rewrite-repeat-if-not-file = (\n        \"^/news/news_([a-z]+)_[A-Za-z]+.atom.xml\" =\u003e \"/news/news_$1.atom.xml\",\n        \"^/news/news_([a-z]+)_[A-Za-z]+.su3\" =\u003e \"/news/news_$1.su3\",\n        \"^/news/news_[a-z]+.atom.xml\" =\u003e \"/news/news.atom.xml\",\n        \"^/news/news_[a-z]+.su3\" =\u003e \"/news/news.su3\",\n    )\n\n\n2) flask\n\nFor an alternative implementation using an apache reverse proxy and flask,\nsee the newsxml-flask/ directory in the i2p.scripts branch in monotone\nfor the code and instructions.\n\n\nTo generate a new signed blocklist:\n\nYou must have router signing privileges (i.e. a certificate in $I2P/certificates/router)\nfor routers to verify the signature. If you do not have privileges, ask somebody that\ndoes to generate it and check it in.\nGeneration requires I2P 0.9.27-12 or higher.\n\nBefore signing, create a symlink to the certificates directory in the\ndirectory you are signing from, usually this will be the `i2p.newsxml` checkout.\n\n        ln -s $HOME/i2p/certificates\n\nInput file is blocklist.txt. Format:\nOne IPv4 or IPv6 address or base 64 router hash per line.\nNo host names or netmasks (e.g. /24) are allowed.\nComments start with # in column 1.\nTo unblock an address or hash blocked in a previous blocklist, prefix with !\n\nBlocking/unblocking guidelines: Do not add blocks already in the release\nblocklist (installer/resources/blocklist.txt in the source, or\n$I2P/blocklist.txt in the installation directory).\nUnblocks only work if blocked in a previous feed; they will not override\nthe release blocklist.\n\nExample blocklist.txt:\n# comment\n1.2.3.4\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\n!5.6.7.8\n\n$ java -jar /path/to/routerconsole.jar blocklistentries [-p keystorepassword] /path/to/blocklist.txt /path/to/su3keystore.ks you@mail.i2p \u003e data/blocklist.xml\n\nReview output file to see if it looks right.\nDon't forget to check in data/blocklist.xml.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi2p%2Fi2p.newsxml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fi2p%2Fi2p.newsxml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fi2p%2Fi2p.newsxml/lists"}