handle add_user function
This commit is contained in:
parent
e582194b25
commit
b2f8474c97
|
@ -13,22 +13,18 @@
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Cargo.lock" beforeDir="false" afterPath="$PROJECT_DIR$/Cargo.lock" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/Cargo.lock" beforeDir="false" afterPath="$PROJECT_DIR$/Cargo.lock" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Cargo.toml" beforeDir="false" afterPath="$PROJECT_DIR$/Cargo.toml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/Cargo.toml" beforeDir="false" afterPath="$PROJECT_DIR$/Cargo.toml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/chat/front_conn.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/chat/front_conn.rs" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/api/handlers.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/handlers.rs" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/chat/mod.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/chat/mod.rs" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/api/request.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/request.rs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/api/response.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/api/response.rs" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/chat/serv_conn.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/chat/serv_conn.rs" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/chat/serv_conn.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/chat/serv_conn.rs" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/chat/types.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/chat/types.rs" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/src/db/mod.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/db/mod.rs" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/db/mod.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/db/mod.rs" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/lib.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib.rs" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/db/types.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/db/types.rs" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/main.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/main.rs" afterDir="false" />
|
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ClangdSettings">
|
|
||||||
<option name="formatViaClangd" value="false" />
|
|
||||||
</component>
|
|
||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
|
@ -46,7 +42,7 @@
|
||||||
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||||
<property name="cf.first.check.clang-format" value="false" />
|
<property name="cf.first.check.clang-format" value="false" />
|
||||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/../../../olymp/mosh" />
|
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||||
<property name="nodejs_package_manager_path" value="npm" />
|
<property name="nodejs_package_manager_path" value="npm" />
|
||||||
<property name="org.rust.cargo.project.model.PROJECT_DISCOVERY" value="true" />
|
<property name="org.rust.cargo.project.model.PROJECT_DISCOVERY" value="true" />
|
||||||
</component>
|
</component>
|
||||||
|
@ -88,6 +84,7 @@
|
||||||
<workItem from="1613570542642" duration="4470000" />
|
<workItem from="1613570542642" duration="4470000" />
|
||||||
<workItem from="1614190476350" duration="9000" />
|
<workItem from="1614190476350" duration="9000" />
|
||||||
<workItem from="1614277959074" duration="31000" />
|
<workItem from="1614277959074" duration="31000" />
|
||||||
|
<workItem from="1617097697890" duration="1371000" />
|
||||||
</task>
|
</task>
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
|
|
11
Cargo.lock
generated
11
Cargo.lock
generated
|
@ -647,6 +647,7 @@ dependencies = [
|
||||||
"tokio 0.3.6",
|
"tokio 0.3.6",
|
||||||
"toml",
|
"toml",
|
||||||
"tungstenite 0.12.0",
|
"tungstenite 0.12.0",
|
||||||
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1605,6 +1606,16 @@ version = "0.7.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7"
|
checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "uuid"
|
||||||
|
version = "0.8.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom 0.2.1",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "value-bag"
|
name = "value-bag"
|
||||||
version = "1.0.0-alpha.6"
|
version = "1.0.0-alpha.6"
|
||||||
|
|
|
@ -23,6 +23,7 @@ serde_derive = "1.0.116"
|
||||||
async-trait = "0.1.42"
|
async-trait = "0.1.42"
|
||||||
simple_logger = "1.11.0"
|
simple_logger = "1.11.0"
|
||||||
chrono = {version = "0.4.19", features = ["serde"]}
|
chrono = {version = "0.4.19", features = ["serde"]}
|
||||||
|
uuid = {version = "0.8.2", features = ["serde" , "v4"]}
|
||||||
|
|
||||||
[dependencies.fcpv2]
|
[dependencies.fcpv2]
|
||||||
path = "../FCPv2"
|
path = "../FCPv2"
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
use super::request::*;
|
use super::{request::*, response::{AppStatus, ResponseType}};
|
||||||
use super::response::User;
|
use super::response::User;
|
||||||
use super::response::UserList;
|
use super::response::UserList;
|
||||||
use crate::chat::types::PackedMessage;
|
use crate::chat::types::PackedMessage;
|
||||||
use crate::chat::types::SP;
|
use crate::chat::types::SP;
|
||||||
use crate::db::{messages, users};
|
use crate::db::{self, messages, types, users};
|
||||||
use async_std::io::Result;
|
use async_std::io::Result;
|
||||||
|
use fcpv2::types::{traits::FcpParser, SSK};
|
||||||
use rusqlite::Connection;
|
use rusqlite::Connection;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
use uuid::Uuid;
|
||||||
pub fn start_app(request: StartAppReq, server_sender: &SP) -> Result<()> {
|
pub fn start_app(request: StartAppReq, server_sender: &SP) -> Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
//sending *JSON*, what everything is OK
|
//sending *JSON*, what everything is OK
|
||||||
|
@ -24,7 +26,8 @@ pub fn load_users(request: LoadUsersReq, conn: &Connection, server_sender: &SP)
|
||||||
.collect();
|
.collect();
|
||||||
let users: String = serde_json::to_string(&UserList {
|
let users: String = serde_json::to_string(&UserList {
|
||||||
users: jsoned_users,
|
users: jsoned_users,
|
||||||
}).unwrap();
|
})
|
||||||
|
.unwrap();
|
||||||
let _ = server_sender.send(PackedMessage::ToClient(users)).unwrap();
|
let _ = server_sender.send(PackedMessage::ToClient(users)).unwrap();
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -42,6 +45,14 @@ pub fn load_messages(
|
||||||
//sending *JSON*
|
//sending *JSON*
|
||||||
}
|
}
|
||||||
pub fn add_user(request: AddUserReq, conn: &Connection, server_sender: &SP) -> Result<()> {
|
pub fn add_user(request: AddUserReq, conn: &Connection, server_sender: &SP) -> Result<()> {
|
||||||
unimplemented!()
|
let user = db::types::User {
|
||||||
//sending *JSON* what user is created
|
id: db::types::Id(Uuid::new_v4()),
|
||||||
|
name: request.name,
|
||||||
|
sign_key: request.sign_key,
|
||||||
|
insert_key: SSK::parse(&request.insert_key[..]).unwrap(),
|
||||||
|
messages_count: 0,
|
||||||
|
};
|
||||||
|
db::users::add_user(user, &conn).unwrap();
|
||||||
|
server_sender.send(PackedMessage::ToClient(json!(AppStatus{res_type: ResponseType::UserAdded}).to_string())).unwrap();
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,6 +62,7 @@ pub struct LoadMessagesReq {
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
pub struct AddUserReq {
|
pub struct AddUserReq {
|
||||||
pub req_type: AddUser,
|
pub req_type: AddUser,
|
||||||
|
pub name: String,
|
||||||
pub sign_key: String,
|
pub sign_key: String,
|
||||||
pub insert_key: String,
|
pub insert_key: String,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
use crate::db::types::User as SqliteUser;
|
use crate::db::types::User as SqliteUser;
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
|
use tungstenite::http::Response;
|
||||||
use crate::db::types::SignKey;
|
use crate::db::types::SignKey;
|
||||||
pub type InsertKey = String;
|
pub type InsertKey = String;
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
enum ResponseType{
|
pub enum ResponseType{
|
||||||
Error,
|
Error,
|
||||||
NewMessage,
|
NewMessage,
|
||||||
UserList,
|
UserList,
|
||||||
|
@ -11,27 +12,30 @@ enum ResponseType{
|
||||||
FetchedMessages,
|
FetchedMessages,
|
||||||
InstanceCreated,
|
InstanceCreated,
|
||||||
InstanceAccepted,
|
InstanceAccepted,
|
||||||
|
UserAdded
|
||||||
|
|
||||||
}
|
}
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
enum ErrorType{
|
pub enum ErrorType{
|
||||||
WrongKey
|
WrongKey,
|
||||||
|
FailedToAddUser
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
struct AppError{
|
pub struct AppError{
|
||||||
res_type: ResponseType,
|
pub res_type: ErrorType,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status of last requested action. Like `Create Instance` or `LoadUsers`
|
// Status of last requested action. Like `Create Instance` or `LoadUsers`
|
||||||
struct ActionStatus{
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct AppStatus{
|
||||||
|
pub res_type: ResponseType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
pub id: u32,
|
pub id: String,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub sign_key: SignKey,
|
pub sign_key: SignKey,
|
||||||
pub insert_key: InsertKey,
|
pub insert_key: InsertKey,
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
use crate::chat::types::SP;
|
use crate::chat::types::{PackedMessage, SP};
|
||||||
use rusqlite;
|
use rusqlite;
|
||||||
|
|
||||||
use super::{request::*, handlers};
|
use super::{
|
||||||
|
handlers,
|
||||||
|
request::*,
|
||||||
|
response::{AppError, ErrorType, ResponseType},
|
||||||
|
};
|
||||||
use async_std::io::Result;
|
use async_std::io::Result;
|
||||||
use rusqlite::Connection;
|
use rusqlite::Connection;
|
||||||
use serde_json::from_str;
|
use serde_json::from_str;
|
||||||
|
@ -17,7 +21,6 @@ pub async fn request_selector(json: String, server_sender: &SP, conn: &Connectio
|
||||||
}
|
}
|
||||||
if let Ok(res) = from_str::<StopAppReq>(&json) {
|
if let Ok(res) = from_str::<StopAppReq>(&json) {
|
||||||
handlers::stop_app(res, conn, server_sender)?
|
handlers::stop_app(res, conn, server_sender)?
|
||||||
|
|
||||||
}
|
}
|
||||||
if let Ok(res) = from_str::<LoadUsersReq>(&json) {
|
if let Ok(res) = from_str::<LoadUsersReq>(&json) {
|
||||||
handlers::load_users(res, conn, server_sender)?
|
handlers::load_users(res, conn, server_sender)?
|
||||||
|
@ -29,11 +32,22 @@ pub async fn request_selector(json: String, server_sender: &SP, conn: &Connectio
|
||||||
handlers::load_messages(res, conn, server_sender)?
|
handlers::load_messages(res, conn, server_sender)?
|
||||||
}
|
}
|
||||||
if let Ok(res) = from_str::<AddUserReq>(&json) {
|
if let Ok(res) = from_str::<AddUserReq>(&json) {
|
||||||
handlers::add_user(res, conn, server_sender)?
|
match handlers::add_user(res, conn, server_sender) {
|
||||||
|
Ok(_) => {},
|
||||||
|
Err(e) => {
|
||||||
|
let _ = server_sender
|
||||||
|
.send(PackedMessage::ToClient(
|
||||||
|
json!(AppError {
|
||||||
|
res_type: ErrorType::FailedToAddUser
|
||||||
|
})
|
||||||
|
.to_string(),
|
||||||
|
))
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Err(async_std::io::Error::new(
|
Err(async_std::io::Error::new(
|
||||||
async_std::io::ErrorKind::InvalidData,
|
async_std::io::ErrorKind::InvalidData,
|
||||||
"Wrong request",
|
"Wrong request",
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,8 @@ async fn connect_to_server(client_sender: SP, server_receiver: RP) -> io::Result
|
||||||
}
|
}
|
||||||
async fn server_responce_getter(mut receiver: OwnedReadHalf, client_sender: SP) -> io::Result<()> {
|
async fn server_responce_getter(mut receiver: OwnedReadHalf, client_sender: SP) -> io::Result<()> {
|
||||||
loop {
|
loop {
|
||||||
|
// each freenet responce have an identifier and program will define what to do with request by this identifier
|
||||||
|
//TODO create handle_fcp_response function
|
||||||
let mut buffer = [0; 1024];
|
let mut buffer = [0; 1024];
|
||||||
match receiver.read(&mut buffer).await {
|
match receiver.read(&mut buffer).await {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
|
use std::io;
|
||||||
|
|
||||||
use chrono::prelude::*;
|
use chrono::prelude::*;
|
||||||
use fcpv2::types::{traits::FcpRequest, SSK};
|
use fcpv2::types::{traits::{FcpRequest, FcpParser}, SSK};
|
||||||
use serde_derive::{Serialize, Deserialize};
|
use rusqlite::{
|
||||||
|
types::{FromSql, FromSqlError, FromSqlResult, ToSqlOutput, ValueRef},
|
||||||
|
Result, ToSql,
|
||||||
|
};
|
||||||
|
use serde_derive::{Deserialize, Serialize};
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::api::response::User as JsonableUser;
|
use crate::api::response::User as JsonableUser;
|
||||||
|
|
||||||
|
@ -8,26 +15,52 @@ pub const DB_PATH: &str = "hole.db";
|
||||||
|
|
||||||
pub type SignKey = String;
|
pub type SignKey = String;
|
||||||
pub type InsertKey = SSK;
|
pub type InsertKey = SSK;
|
||||||
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
|
pub struct Id(pub uuid::Uuid);
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
pub id: u32,
|
pub id: Id,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub sign_key: SignKey,
|
pub sign_key: SignKey,
|
||||||
pub insert_key: InsertKey,
|
pub insert_key: InsertKey,
|
||||||
pub messages_count: u32,
|
pub messages_count: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// converting SSK to rusqlite type
|
||||||
|
impl ToSql for Id {
|
||||||
|
fn to_sql(&self) -> Result<ToSqlOutput<'_>> {
|
||||||
|
Ok(ToSqlOutput::from(self.0.to_string()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// converting from rusqlite type to SSK
|
||||||
|
impl FromSql for Id {
|
||||||
|
fn column_result(value: ValueRef<'_>) -> FromSqlResult<Id> {
|
||||||
|
let id = Uuid::parse_str(&(value.as_str()?)[..]).unwrap();
|
||||||
|
Ok(Id(id))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl User {
|
impl User {
|
||||||
pub fn to_jsonable(self) -> JsonableUser {
|
pub fn to_jsonable(self) -> JsonableUser {
|
||||||
JsonableUser {
|
JsonableUser {
|
||||||
id: self.id,
|
id: self.id.0.to_string(),
|
||||||
name: self.name,
|
name: self.name,
|
||||||
sign_key: self.sign_key,
|
sign_key: self.sign_key,
|
||||||
insert_key: SSK::convert(&self.insert_key),
|
insert_key: SSK::convert(&self.insert_key),
|
||||||
messages_count: self.messages_count
|
messages_count: self.messages_count,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub fn from_jsonable(json: JsonableUser) -> io::Result<User> {
|
||||||
|
Ok(User {
|
||||||
|
id: Id(Uuid::parse_str(&json.id[..]).unwrap()),
|
||||||
|
name: json.name,
|
||||||
|
sign_key: json.sign_key,
|
||||||
|
insert_key: SSK::parse(&json.insert_key[..]).unwrap(),
|
||||||
|
messages_count: json.messages_count,
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
|
|
Loading…
Reference in a new issue