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