first commit

This commit is contained in:
2025-08-14 20:54:55 +08:00
commit 479d699d24
6 changed files with 2420 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/target

2255
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

10
Cargo.toml Normal file
View File

@@ -0,0 +1,10 @@
[package]
name = "authorize"
version = "0.1.0"
edition = "2024"
[dependencies]
sqlx = { version = "0.8.6", features = ["runtime-tokio", "chrono", "sqlite"] }
tokio = { version = "1.47.1", features = ["full"] }
warp = { version = "0.4.1", features = ["server"] }
welds = { version = "0.4.17", features = ["sqlite"] }

5
README.md Normal file
View File

@@ -0,0 +1,5 @@
| 方法 | doc |
| ---- | ---- |
| generate | 给项目生成key |
| verify | 验证key有效性 |
| info | 查询key信息 |

80
rustfmt.toml Normal file
View File

@@ -0,0 +1,80 @@
max_width = 79
hard_tabs = false
tab_spaces = 2
newline_style = "Auto"
indent_style = "Block"
use_small_heuristics = "Default"
fn_call_width = 60
attr_fn_like_width = 70
struct_lit_width = 18
struct_variant_width = 35
array_width = 60
chain_width = 60
single_line_if_else_max_width = 50
single_line_let_else_max_width = 50
wrap_comments = false
format_code_in_doc_comments = false
doc_comment_code_block_width = 100
comment_width = 80
normalize_comments = false
normalize_doc_attributes = false
format_strings = false
format_macro_matchers = false
format_macro_bodies = true
skip_macro_invocations = []
hex_literal_case = "Preserve"
empty_item_single_line = true
struct_lit_single_line = true
fn_single_line = false
where_single_line = false
imports_indent = "Block"
imports_layout = "Mixed"
imports_granularity = "Preserve"
group_imports = "Preserve"
reorder_imports = true
reorder_modules = true
reorder_impl_items = false
type_punctuation_density = "Wide"
space_before_colon = false
space_after_colon = true
spaces_around_ranges = false
binop_separator = "Front"
remove_nested_parens = true
combine_control_expr = true
short_array_element_width_threshold = 10
overflow_delimited_expr = false
struct_field_align_threshold = 0
enum_discrim_align_threshold = 0
match_arm_blocks = true
match_arm_leading_pipes = "Never"
force_multiline_blocks = false
fn_params_layout = "Tall"
brace_style = "SameLineWhere"
control_brace_style = "AlwaysSameLine"
trailing_semicolon = true
trailing_comma = "Vertical"
match_block_trailing_comma = false
blank_lines_upper_bound = 1
blank_lines_lower_bound = 0
edition = "2015"
style_edition = "2015"
version = "One"
inline_attribute_width = 0
format_generated_files = true
generated_marker_line_search_limit = 5
merge_derives = true
use_try_shorthand = false
use_field_init_shorthand = false
force_explicit_abi = true
condense_wildcard_suffixes = false
color = "Auto"
required_version = "1.8.0"
unstable_features = false
disable_all_formatting = false
skip_children = false
show_parse_errors = true
error_on_line_overflow = false
error_on_unformatted = false
ignore = []
emit_mode = "Files"
make_backup = false

69
src/main.rs Normal file
View File

@@ -0,0 +1,69 @@
use std::{fs, path::Path};
use warp::Filter;
use welds::prelude::*;
#[derive(WeldsModel)]
#[welds(table = "authorize")]
pub struct Authorize {
#[welds(primary_key)]
pub id: i32,
pub project: String,
pub key: String,
pub device_id: String,
pub expire: String,
pub insert_time: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let db_path = "C:/Users/admin/Desktop/database.db";
if let Some(parent_dir) = Path::new(db_path).parent() {
if !parent_dir.exists() {
fs::create_dir_all(parent_dir)?;
println!("已创建目录: {:?}", parent_dir);
}
}
if !Path::new(db_path).exists() {
fs::File::create(db_path)?;
println!("已创建空数据库文件: {}", db_path);
}
let connection_string = format!("sqlite://{db_path}");
let client = welds::connections::connect(connection_string).await?;
// 先执行建表 SQL如果表不存在
client
.execute(
r#"
CREATE TABLE IF NOT EXISTS authorize (
id INTEGER PRIMARY KEY AUTOINCREMENT,
project TEXT NOT NULL,
key TEXT NOT NULL,
device_id TEXT NOT NULL,
expire TEXT NOT NULL,
insert_time TEXT NOT NULL
)
"#,
&[],
)
.await?;
let mut authorize = Authorize::new();
authorize.id = 0;
authorize.project = "TestProject1".to_string();
authorize.key = "TestKey1".to_string();
authorize.device_id = "Device001".to_string();
authorize.expire = "2099-12-31".to_string();
authorize.insert_time = "2025-08-14 12:00:00".to_string();
authorize.save(client.as_ref()).await?;
// GET /hello/warp => 200 OK with body "Hello, warp!"
let hello =
warp::path!("hello" / String).map(|name| format!("Hello, {}!", name));
warp::serve(hello).run(([127, 0, 0, 1], 3030)).await;
Ok(())
}