Skip to content

Commit

Permalink
Merge pull request #1 from oliviers12/0.01
Browse files Browse the repository at this point in the history
	modified:   src/edit.rs
  • Loading branch information
oliviers12 authored Sep 28, 2024
2 parents a78d032 + ff4fb22 commit 1ba7330
Show file tree
Hide file tree
Showing 2 changed files with 174 additions and 0 deletions.
122 changes: 122 additions & 0 deletions src/edit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,128 @@ mod schema;
// definir les structure depuit le shema
use crate::schema::*;

pub async fn edit_cluster(cluster_name: web::Path<String>) -> impl Responder {
let cluster_name = cluster_name.into_inner();

// Récupérer les données du cluster depuis datasource.rs
let cluster_data = match datasource::get_cluster_source(&cluster_name).await {
Ok(data) => data,
Err(err) => {
error!("Erreur lors de la récupération des données pour {}: {:?}", cluster_name, err);
return render_error("Les données du cluster n'ont pas pu être récupérées.");
}
};

// Convertir les données en YAML
let yaml_content = match serde_yaml::to_string(&cluster_data) {
Ok(content) => content,
Err(err) => {
error!("Erreur lors de la conversion en YAML pour {}: {:?}", cluster_name, err);
return render_error("Erreur lors de la conversion en YAML.");
}
};

let html = render_html(&cluster_name, &yaml_content);
HttpResponse::Ok().content_type("text/html").body(html)
}

// Fonction pour rendre l'erreur avec un message générique
fn render_error(message: &str) -> HttpResponse {
HttpResponse::Ok().content_type("text/html").body(format!(r#"
<html>
<body>
<h1>Erreur</h1>
<p>{}</p>
<a href="{}">Retour au Menu Principal</a>
</body>
</html>
"#, message, BASE_URL))
}

// Fonction pour rendre le HTML principal
fn render_html(cluster_name: &str, yaml_content: &str) -> String {
format!(r#"
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Configuration Cluster</title>
<link rel="stylesheet" href="/static/styles.css"> <!-- Lien vers le CSS externe -->
</head>
<body>
<h1>Configuration Cluster: {}</h1>
<nav>
<a href="{}">Menu Principal</a>
<button id="saveButton">Enregistrer</button>
</nav>
<section id="yamlEditor">
<h2>Général</h2>
<textarea id="yamlContent">{}</textarea>
</section>
<footer>
<h2>Documentation</h2>
<a href="https://budimanjojo.github.io/talhelper/latest/reference/configuration/">Variable</a>
</footer>
<script>
document.getElementById('saveButton').addEventListener('click', async function() {{
const yamlContent = document.getElementById('yamlContent').value;
const response = await fetch(`{}`, {{
method: 'POST',
headers: {{ 'Content-Type': 'application/json' }},
body: JSON.stringify(yamlContent)
}});
if (response.ok) {{
alert('Le contenu YAML a été enregistré !');
window.location.reload();
}} else {{
alert('Erreur lors de l\'enregistrement du YAML.');
}}
}});
</script>
</body>
</html>
"#, cluster_name, BASE_URL, yaml_content, YAML_SAVE_URL.replace("{}", cluster_name))
}

pub async fn save_yaml(cluster_name: web::Path<String>, yaml_content: web::Json<String>) -> impl Responder {
let cluster_name = cluster_name.into_inner();
let yaml_data = yaml_content.into_inner();

// Valider le contenu YAML
if !is_valid_yaml(&yaml_data) {
return HttpResponse::BadRequest().body("Le contenu YAML n'est pas valide.");
}

// Convertir le YAML en structure Rust
let cluster_config: Result<ClusterConfig, _> = from_str(&yaml_data);

match cluster_config {
Ok(config) => {
// Appeler create_or_update_cluster avec la configuration
match datasource::create_or_update_cluster(&cluster_name, &config).await {
Ok(_) => HttpResponse::Ok().body("Données enregistrées avec succès."),
Err(err) => {
error!("Erreur lors de l'enregistrement des données pour {}: {:?}", cluster_name, err);
HttpResponse::InternalServerError().body("Erreur lors de l'enregistrement des données.")
},
}
}
Err(err) => {
error!("Erreur lors du parsing du YAML pour {}: {:?}", cluster_name, err);
HttpResponse::BadRequest().body("Erreur lors du parsing du YAML.")
}
}
}

// Fonction de validation du YAML (exemple simpliste)
fn is_valid_yaml(yaml_data: &str) -> bool {
// Implémentez une validation de base pour vérifier si le YAML est bien formé
!yaml_data.trim().is_empty() // Remplacez par une logique de validation plus robuste si nécessaire
}

pub async fn edit_cluster(cluster_name: web::Path<String>) -> impl Responder {
let cluster_name = cluster_name.into_inner();

Expand Down
52 changes: 52 additions & 0 deletions static/styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background-color: #f4f4f4;
}

h1, h2 {
color: #333;
}

nav {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}

nav a, nav button {
padding: 10px 15px;
background-color: #007BFF;
color: white;
border: none;
border-radius: 5px;
text-decoration: none;
cursor: pointer;
}

nav button:hover, nav a:hover {
background-color: #0056b3;
}

#yamlEditor {
background: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}

textarea {
width: 100%;
height: 200px;
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px;
resize: none;
font-family: monospace;
}

footer {
margin-top: 20px;
text-align: center;
}

0 comments on commit 1ba7330

Please sign in to comment.