Files
Aberwyn/Aberwyn/Controllers/SetupApiController.cs
Elias Jansson e626daa7bc
All checks were successful
continuous-integration/drone/push Build is passing
Gogogo
2025-06-03 22:11:17 +02:00

72 lines
2.4 KiB
C#

using Microsoft.AspNetCore.Mvc;
using MySql.Data.MySqlClient;
namespace Aberwyn.Controllers
{
[ApiController]
[Route("api/setup")]
public class SetupApiController : ControllerBase
{
[HttpPost("testdb")]
public IActionResult TestDbConnection([FromBody] DbTestRequest request)
{
try
{
var baseConnStr = $"server={request.Host};port={request.Port};user={request.User};password={request.Pass};";
using (var conn = new MySqlConnection(baseConnStr + "database=information_schema;"))
{
conn.Open();
// Kontrollera om databasen redan finns
var checkCmd = new MySqlCommand("SELECT SCHEMA_NAME FROM SCHEMATA WHERE SCHEMA_NAME = @dbName", conn);
checkCmd.Parameters.AddWithValue("@dbName", request.Db);
var exists = checkCmd.ExecuteScalar();
if (exists != null)
{
return Ok(new
{
success = true,
message = "Anslutning OK och databasen finns redan."
});
}
// Testa skapa en temporär databas
var testDbName = $"testcheck_{Guid.NewGuid():N}".Substring(0, 12);
var createCmd = new MySqlCommand($"CREATE DATABASE `{testDbName}`", conn);
createCmd.ExecuteNonQuery();
var dropCmd = new MySqlCommand($"DROP DATABASE `{testDbName}`", conn);
dropCmd.ExecuteNonQuery();
return Ok(new
{
success = true,
message = "Anslutning OK. Databasen finns inte, men CREATE DATABASE är tillåten."
});
}
}
catch (Exception ex)
{
return Ok(new
{
success = false,
message = ex.Message
});
}
}
public class DbTestRequest
{
public string Host { get; set; }
public string Port { get; set; }
public string Db { get; set; }
public string User { get; set; }
public string Pass { get; set; }
}
}
}