实验性双子座服务器

Jetforce的Python项目详细描述


喷射力

新的、正在开发的Gemini协议的实验性TCP服务器。 了解更多here

Rocket Launch

功能

  • 一个内置的静态文件服务器,支持gemini目录和 CGI脚本
  • 具有零外部依赖性的轻量级单文件框架。
  • 具有类型提示和黑色样式格式的现代python代码库。
  • 支持使用异步事件循环的并发连接
  • 松散实现WSGI的可扩展组件 服务器/应用程序模式

安装

需要python 3.7+

最新版本可以从PyPI

安装
$ pip install jetforce

或者,克隆存储库并直接运行脚本:

$ git clone https://github.com/michael-lazar/jetforce
$ cd jetforce
$ python3 jetforce.py

用法

使用--help标志查看命令行选项:

$ jetforce --help
usage: jetforce [-h][--host HOST][--port PORT][--hostname HOSTNAME][--tls-certfile FILE][--tls-keyfile FILE][--tls-cafile FILE][--tls-capath DIR][--dir DIR][--cgi-dir DIR][--index-file FILE]

An Experimental Gemini Protocol Server

optional arguments:
  -h, --help           show this help message and exit
  --host HOST          Server address to bind to (default: 127.0.0.1)
  --port PORT          Server port to bind to (default: 1965)
  --hostname HOSTNAME  Server hostname (default: localhost)
  --tls-certfile FILE  Server TLS certificate file (default: None)
  --tls-keyfile FILE   Server TLS private key file (default: None)
  --tls-cafile FILE    A CA file to use for validating clients (default: None)
  --tls-capath DIR     A directory containing CA files for validating clients
                       (default: None)
  --dir DIR            Root directory on the filesystem to serve (default:
                       /var/gemini)
  --cgi-dir DIR        CGI script directory, relative to the server's root
                       directory (default: cgi-bin)
  --index-file FILE    If a directory contains a file with this name, that
                       file will be served instead of auto-generating an index
                       page (default: index.gmi)

主机名

因为gemini协议发送请求中的整个URL,所以有必要 声明您的服务器期望在其下接收流量的主机名。 jetforce将拒绝任何与主机名和状态不匹配的请求 第Proxy Request Refused

TLS证书

gemini规范要求通过TLS发送所有连接

如果不使用--tls-certfile标志提供TLS证书文件, jetforce将自动生成一个临时证书供您使用。这是 很好地简化了开发,但是在您将服务器公开给 公共互联网你应该配置一些更永久的东西。你可以生成 您自己的自签名服务器证书,或从证书中获取一个 像Let's Encrypt这样的权威

下面是jetforce用来生成自签名证书的OpenSSL命令:

$ openssl req -newkey rsa:2048 -nodes -keyout {hostname}.key \
    -nodes -x509 -out {hostname}.crt -subj "/CN={hostname}"

jetforce还支持已验证的客户端tls证书。您可以指定 带有--tls-cafile--tls-capath标志的客户端CA已证实的 连接将在其环境中添加REMOTE_USER变量, 它包含客户端证书的cn属性。关于如何 生成TLS客户端证书不在本自述文件的范围内,但是 你可以找到很多有用的教程 online

目前没有计划支持未经验证(临时)的客户 证书。这是由于python标准的技术限制 库的ssl模块,将详细描述 here

静态文件

Jetforce将为/var/gemini/目录中的静态文件提供服务:

  • .gmi结尾的文件将被解释为text/gemini类型
  • 如果请求一个目录,jetforce将在该目录中查找一个文件 名称为index.gmi
      如果存在,索引文件将返回
    • 否则,jetforce将生成一个目录列表

CGI脚本

Jetforce实现了官方CGI的稍微修改的版本 规范。因为Gemini比HTTP复杂,所以CGI接口是 也更容易使用。

jetforce实现的主要区别在于cgi脚本 预期将整个gemini响应逐字写入stdout:

  1. 第一行的状态码和元
  2. 后续行中的可选响应正文

不允许脚本使用诸如Content-Type之类的HTTP头响应, 或任何其他特殊的CGI头,如内部文件重定向。

某些特定于HTTP的环境变量(如REQUEST_METHOD)不是 使用,因为它们在双子座的请求中没有意义。

许可证

这个项目是根据Floodgap Free Software License授权的。

The Floodgap Free Software License (FFSL) has one overriding mandate: that software using it, or derivative works based on software that uses it, must be free. By free we mean simply "free as in beer" -- you may put your work into open or closed source packages as you see fit, whether or not you choose to release your changes or updates publicly, but you must not ask any fee for it.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
iOS MDM注册配置文件请求/Profile使用java对证书进行签名   java如何调试GWT项目中的PHP文件   Mac和Windows之间的Java文件getFreeSpace差异   java从ArrayList进入JComboBox   ApacheKafka如何执行zookeeperserverstart。我的java程序中的bat文件?   JAXRS应用程序的java初始化   java如何为double覆盖compareTo方法?   使用进程动态运行java代码   sockets java。网SocketException:权限被拒绝openshift   java PorterduffXfermode:清除位图的一部分   其他线程中变量的java更改侦听器   java如何初始化接口实例以与父片段中的子片段通信   java Cordova插件在构建时出错,源代码1.6中不支持菱形运算符使用源代码7   java是学习编程的教育游戏吗?   在不同机器上使用JasperReports API运行代码时出现java问题   java Spring引导延迟Flyway序列化循环依赖   未为加密/解密初始化java密码