2.2 KiB
2.2 KiB
SouthBay Accounts
南湾用户登录服务。
编译
在运行服务端的服务器上生成密钥对,并把私钥命名为id_rsa
放在src/
中后编译。
运行cargo build --release
编译。
登录流程
用户只能每3秒发送一次登录请求。每3秒发送超过30次登录请求视为攻击行为,禁止请求的ip3600
秒。
客户端依次发送以下三个请求。
每个请求都先发送一个字节表示请求编号。
- 编号1
prelogin
:客户端向服务端请求tcp连接并发送私钥加密的southbayhub login:{id}
, 服务端回复一个公钥加密的southbayhub server
、already logged
或unexist
,连接断开。 服务端账户由unlinked
状态进入logining
状态10秒,超过10秒视为登录失败。 客户端通过解密字符串验证服务端的有效性,并选择停止登录或继续登录。 - 编号2
login
:客户端向服务端请求tcp连接并发送私钥加密的{id}|{passwd}
, 服务端根据是否超时以及账号和密码的正确性回复公钥加密的unprelogged
、logged in
、passwd incorrect
,连接断开。 服务端账户进入logged
状态60秒,超过60秒进入nonavailable
状态。 - 编号3
heartbeat
:客户端向服务端请求tcp连接并发送私钥加密的{id}
后服务端的logged
状态计时归零, 处于unavailable
状态的换回logged
状态并将计时归零。处于其它状态的什么都不做。 - 编号4
logout
:客户端向服务端请求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
);