first commit
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/target
|
||||
2255
Cargo.lock
generated
Normal file
2255
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
10
Cargo.toml
Normal file
10
Cargo.toml
Normal 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
5
README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
| 方法 | doc |
|
||||
| ---- | ---- |
|
||||
| generate | 给项目生成key |
|
||||
| verify | 验证key有效性 |
|
||||
| info | 查询key信息 |
|
||||
80
rustfmt.toml
Normal file
80
rustfmt.toml
Normal 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
69
src/main.rs
Normal 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(())
|
||||
}
|
||||
Reference in New Issue
Block a user