Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ardek66/geminim
Gemini server made in Nim
https://github.com/ardek66/geminim
Last synced: 30 days ago
JSON representation
Gemini server made in Nim
- Host: GitHub
- URL: https://github.com/ardek66/geminim
- Owner: ardek66
- License: bsd-2-clause
- Created: 2020-08-16T21:52:13.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-07-09T09:15:41.000Z (over 2 years ago)
- Last Synced: 2024-11-15T05:32:18.630Z (2 months ago)
- Language: Nim
- Homepage:
- Size: 80.1 KB
- Stars: 35
- Watchers: 3
- Forks: 8
- Open Issues: 2
-
Metadata Files:
- Readme: README.org
- License: LICENSE
Awesome Lists containing this project
- awesome-nim - Geminim - A Gemini server. (Web / Gemini Servers)
- awesome-gemini - geminim - an async lightweight Gemini server made in Nim. (Servers / Graphical)
README
* GemiNim
GemiNim is a simple Nim server for the [[https://gemini.circumlunar.space/][Gemini]] protocol.
[[gemini://gemi.nim.town]]
[[https://gemi.nim.town/index.gemini]]
** Features
+ Fast
+ Simple
+ Domain-based vhosting
+ CGI
+ Per-user directories
+ Directory listing
+ Support for uploading files via Titan
+ Client-side authentication with authority files (see below)** Authority files
*This implementation is experimental and subject to change!*
GemiNim supports restricting access to configured resources using a system
similar to ssh authorization files.First, restricted zones are configured in GemiNim's configuration file as follows:
#+BEGIN_EXAMPLE
[localhost.localdomain/restrictedZones]
/path/to/resource: "path/to/authority_file"
#+END_EXAMPLE
Afterwards, GemiNim will restrict access to the configured paths by first requiring a certificate
if one is not provided, then verifying if the provided certificate is authorised as per the
declared authority file.The syntax for an authority file is as follow:
#+BEGIN_EXAMPLE
# Comment line
:
...
#+END_EXAMPLE
Where is one of:
+ md5
+ sha1
+ sha256
+ sha512And is the hash of the certificate to be authorised. The certificate must be hashed from it's
DER format.
For example, to obtain the SHA256 of a certificate:
#+BEGIN_EXAMPLE sh
openssl x509 -in certs/cert.pem -outform der | openssl dgst -sha256
#+END_EXAMPLE** Developing
You can build GemiNim by running:
#+BEGIN_EXAMPLE
nimble build
#+END_EXAMPLEI also provide a Nix package. To get into the build shell environment, just run:
#+BEGIN_EXAMPLE
nix-shell
#+END_EXAMPLE** TODO Planned features [1/3]
1. [X] Client certificate authentication (is implemented but highly experimental)
2. [ ] HTTP(S) mirroring
3. [ ] Reverse proxying support