Go to file
pointer-to-bios 30299a1cbf 删除秘钥 2024-02-29 12:58:16 +08:00
src 删除秘钥 2024-02-29 12:58:16 +08:00
.gitignore 删除秘钥 2024-02-29 12:58:16 +08:00
Cargo.lock 最小可用版 2024-02-21 20:46:15 +08:00
Cargo.toml 最小可用版 2024-02-21 20:46:15 +08:00
README.md 删除秘钥 2024-02-29 12:58:16 +08:00

README.md

SouthBay Accounts

南湾用户登录服务。

编译

在运行服务端的服务器上生成密钥对,并把私钥命名为id_rsa放在src/中后编译。

运行cargo build --release编译。

登录流程

用户只能每3秒发送一次登录请求。每3秒发送超过30次登录请求视为攻击行为禁止请求的ip3600秒。

客户端依次发送以下三个请求。

每个请求都先发送一个字节表示请求编号。

  • 编号1prelogin客户端向服务端请求tcp连接并发送私钥加密的southbayhub login:{id} 服务端回复一个公钥加密的southbayhub serveralready loggedunexist,连接断开。 服务端账户由unlinked状态进入logining状态10秒超过10秒视为登录失败。 客户端通过解密字符串验证服务端的有效性,并选择停止登录或继续登录。
  • 编号2login客户端向服务端请求tcp连接并发送私钥加密的{id}|{passwd} 服务端根据是否超时以及账号和密码的正确性回复公钥加密的unpreloggedlogged inpasswd incorrect,连接断开。 服务端账户进入logged状态60秒超过60秒进入nonavailable状态。
  • 编号3heartbeat客户端向服务端请求tcp连接并发送私钥加密的{id}后服务端的logged状态计时归零, 处于unavailable状态的换回logged状态并将计时归零。处于其它状态的什么都不做。
  • 编号4logout客户端向服务端请求tcp连接并发送私钥加密的{id}。所有的用户数据项重新写回数据库。

数据库

使用sqlite3

用户数据项

项目 说明
id 用户唯一标识符用户名的md5前8字节。
name 用户名,不可以更改。
passwd 用户密码的sha512值字符串的md5值客户端应发送sha512数据表应存储sha512值的md5值16进制字符串。
email 用户邮箱。
avatar 用户头像。一个服务端资源id。
CREATE TABLE users (
id BIGINT PRIMARY KEY,
name VARCHAR(128),
passwd CHAR(32),
email TEXT,
avatar INT
);

资源数据项

项目 说明
id 资源id
path 资源路径
CREATE TABLE resource (
id INT PRIMARY KEY,
path TEXT
);