- Server maintenance mode
- Security: error out if a certificate’s permissions are too open, and don’t start that server if so
- UPnP to open ports for servers - must be manually enabled
- Finish NPS implementation (NPS Form)
- Misfin Server implementation: Misfin(B) and Misfin(C)
- Multi-user (pubnix) system setup
- Dynamic DNS setup
- SIS Manager User Management
- User permissions: access to specific servers, restrictions on host setup (mainly the bind_address and ports)
- Upload TLS certs
- Disk space quota
- Restrict CGI/SCGI
- Hosting registration: allow user registration for hosting.
- Dynamic DNS and Domain Name setup
- File Management
- File explorer over Gemini
- Titan upload (add new, delete, edit)
- Keep track of which version of page being updated: extend Titan and Gemini to use an identifier?
- Deployment - deploy static content to a server’s serve directory
- Auto-start SCGI application servers that SIS will communicate with
- Use unix-domain sockets or pipes for SCGI application servers
- CGI/SCGI
- PATH_TRANSLATED
- Authorizers
- Non-parsed header scripts/application servers
- Internationalization
- Tor Onion Services
- Reverse Proxy
- Improved Gopher Protocol support
- Gophermap files
- Automatically add hostname and port to all lines that are missing them
- Include other gophermaps within a gophermap
- Need a way to link to files outside of server directory?
- Cache them?
- Streaming
- HTTP(S) Proxying
- Load Balancing
- Related Project Extensions
- Wiki System
- Code Management (Issue Tracker, etc.)
- Music and Radio Hosting
- Video Hosting
- FastCGI?
- Can handle multiple requests over one connection (internal multiplexing)
- Can also use multiple connections instead
- Gemini Proxying
- Since gemini allows you to put any URL in a request, you can use a gemini server as a proxy for other protocols (like http(s)).
- The multiplexer should be able to handle passing requests off to these proxy handlers.
- PSGI (Perl), JSGI (Javascript), Rack (Ruby), AJP, WSGI -> ASGI
- ?Support HTTP/HTTPS servers using another go library (or http package)?