diff --git a/migrator/.gitignore b/migrator/.gitignore deleted file mode 100644 index a063a0a46..000000000 --- a/migrator/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -users.toml -users.sql -dump.sql diff --git a/migrator/Cargo.toml b/migrator/Cargo.toml deleted file mode 100644 index a3f4c56fc..000000000 --- a/migrator/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "migrator" -version = "0.1.0" -edition = "2021" - -[workspace] - -[dependencies] -rand = "0.8.5" -shuttle-common = { path = "../common" } -toml = "0.5.9" diff --git a/migrator/db_script.sh b/migrator/db_script.sh deleted file mode 100755 index d92bbc275..000000000 --- a/migrator/db_script.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env sh - - -ssh ubuntu@18.133.52.140 "docker exec pg pg_dumpall -U postgres > dump.sql" -scp ubuntu@18.133.52.140:~/dump.sql dump.sql - -scp dump.sql database.shuttle.internal:~/dump.sql - -# docker cp dump.sql 123:/dump.sql -# docker exec 123 psql -f dump.sql -U postgres diff --git a/migrator/script.sh b/migrator/script.sh deleted file mode 100755 index 68b80976c..000000000 --- a/migrator/script.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env sh - -scp ubuntu@18.133.52.140:/opt/shuttle/user-data/users/users.toml users.toml -cargo run -- users.toml > users.sql - - -scp users.sql controller.shuttle.internal:~/users.sql -ssh controller.shuttle.internal "cat ~/users.sql | sudo sqlite3 /var/lib/docker/volumes/shuttle-dev_gateway-vol/_data/gateway.sqlite" diff --git a/migrator/src/main.rs b/migrator/src/main.rs deleted file mode 100644 index 0ddab79a5..000000000 --- a/migrator/src/main.rs +++ /dev/null @@ -1,185 +0,0 @@ -use rand::distributions::{Alphanumeric, DistString}; -use shuttle_common::project::ProjectName; -use std::{ - env::args, - fmt::{Display, Formatter}, - fs, - str::FromStr, -}; - -fn main() { - let mut args = args(); - let _ = args.next(); - let file = args - .next() - .expect("expected a users.toml file to convert to .sql"); - let data = fs::read_to_string(file).expect("to read data file"); - let toml = toml::from_str(&data).expect("to parse data file"); - - let users = parse_value(toml); - - for user in users { - println!("{user}"); - } -} - -#[derive(Eq, PartialEq, Debug)] -struct User { - key: String, - name: String, - projects: Vec, -} - -impl From<(&String, &toml::Value)> for User { - fn from((key, value): (&String, &toml::Value)) -> User { - let (name, projects) = match value { - toml::Value::Table(table) => { - let name = table - .get("name") - .expect("user to have a name") - .as_str() - .expect("name to be a string") - .to_string(); - let projects = table - .get("projects") - .expect("user to have projects") - .as_array() - .expect("projects to be an array") - .iter() - .map(|value| value.as_str().expect("project to be a string")) - .filter_map(|project_name| match project_name.len() { - 3..=64 => match ProjectName::from_str(project_name) { - Ok(project_name) => Some(project_name), - Err(err) => { - eprintln!("{err}"); - None - } - }, - _ => { - eprintln!("project name is too long/short: {project_name}"); - None - } - }) - .collect(); - - (name, projects) - } - other => panic!("unexpected '{other}' at user level"), - }; - - Self { - key: key.to_string(), - name, - projects, - } - } -} - -impl Display for User { - fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { - write!( - f, - "INSERT INTO accounts(account_name, key, super_user) VALUES('{}', '{}', 0);", - self.name, self.key - )?; - - for project in self.projects.iter() { - let initial_key = Alphanumeric.sample_string(&mut rand::thread_rng(), 32); - let state = format!("{{\"creating\": {{\"project_name\": \"{project}\", \"initial_key\": \"{initial_key}\"}}}}"); - - write!( - f, - "\nINSERT INTO projects(project_name, account_name, project_state, initial_key) VALUES('{}', '{}', '{}', '{}');", - project, - self.name, - state, - initial_key, - )?; - } - - write!(f, "\n") - } -} - -fn parse_value(value: toml::Value) -> Vec { - match value { - toml::Value::Table(table) => table.iter().map(Into::into).collect(), - _ => vec![], - } -} - -#[cfg(test)] -mod tests { - use super::User; - - fn get_dummy() -> toml::Value { - r#" -[key1] -name = 'name1' -projects = [] - -[key2] -name = 'name2' -projects = [ - 'project1', - 'project2', -] -"# - .parse() - .unwrap() - } - - #[test] - fn parse_value() { - let value = get_dummy(); - let actual = super::parse_value(value); - - let expected = vec![ - User { - key: "key1".to_string(), - name: "name1".to_string(), - projects: vec![], - }, - User { - key: "key2".to_string(), - name: "name2".to_string(), - projects: vec!["project1".parse().unwrap(), "project2".parse().unwrap()], - }, - ]; - - assert_eq!(actual, expected); - } - - #[test] - fn display() { - let input = User { - key: "key".to_string(), - name: "name".to_string(), - projects: vec!["project1".parse().unwrap(), "project2".parse().unwrap()], - }; - - let actual = input.to_string(); - - assert!( - actual.starts_with( - "INSERT INTO accounts(account_name, key, super_user) VALUES('name', 'key', 0);" - ), - "got: {}", - actual - ); - assert!( - actual.contains( - "INSERT INTO projects(project_name, account_name, project_state, initial_key) VALUES('project1', 'name', '{\"creating\": {\"project_name\": \"project1\", \"initial_key\": " - ), - "got: {}", - actual - ); - assert!( - actual.contains( - "INSERT INTO projects(project_name, account_name, project_state, initial_key) VALUES('project2', 'name', '{\"creating\": {\"project_name\": \"project2\", \"initial_key\": " - ), - "got: {}", - actual - ); - } -}