* Initial plan * Add Google authentication with authorized email configuration Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Complete Google authentication implementation with documentation Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Fix CORS error by removing [Authorize] from auth user endpoint Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Add authorization attribute to ConfigurationController for security Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Fix JavaScript error in login button by correcting window.location.href usage Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Fix Google OAuth redirect URI configuration to resolve authentication error Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Fix OAuth state validation error by specifying authentication scheme in callback Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Fix OAuth state validation error by improving authentication configuration Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Fix authentication setup documentation with correct redirect URI Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Fix navigation buttons overlapping with authentication header Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Remove unused unsing --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> Co-authored-by: Claudio Schaad <clayschaad@users.noreply.github.com> Co-authored-by: Claudio Schaad <c.schaad@pog.ch>
75 lines
No EOL
2.2 KiB
C#
75 lines
No EOL
2.2 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using ShiftScheduler.Services;
|
|
using ShiftScheduler.Shared;
|
|
using System.Text;
|
|
|
|
namespace ShiftScheduler.Server.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
[Authorize(Policy = "AllowedEmails")]
|
|
public class ConfigurationController : ControllerBase
|
|
{
|
|
private readonly IConfigurationService _configurationService;
|
|
|
|
public ConfigurationController(IConfigurationService configurationService)
|
|
{
|
|
_configurationService = configurationService;
|
|
}
|
|
|
|
[HttpGet]
|
|
public IActionResult GetConfiguration()
|
|
{
|
|
return Ok(_configurationService.GetConfiguration());
|
|
}
|
|
|
|
[HttpPut]
|
|
public IActionResult UpdateConfiguration([FromBody] ApplicationConfiguration configuration)
|
|
{
|
|
try
|
|
{
|
|
_configurationService.UpdateConfiguration(configuration);
|
|
return Ok();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return BadRequest($"Failed to update configuration: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
[HttpGet("export")]
|
|
public async Task<IActionResult> ExportConfiguration()
|
|
{
|
|
try
|
|
{
|
|
var json = await _configurationService.ExportConfigurationAsync();
|
|
var bytes = Encoding.UTF8.GetBytes(json);
|
|
return File(bytes, "application/json", "ShiftScheduler-Configuration.json");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return BadRequest($"Failed to export configuration: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
[HttpPost("import")]
|
|
public async Task<IActionResult> ImportConfiguration([FromBody] ImportConfigurationRequest request)
|
|
{
|
|
try
|
|
{
|
|
await _configurationService.ImportConfigurationAsync(request.JsonContent);
|
|
return Ok();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return BadRequest($"Failed to import configuration: {ex.Message}");
|
|
}
|
|
}
|
|
}
|
|
|
|
public class ImportConfigurationRequest
|
|
{
|
|
public string JsonContent { get; set; } = string.Empty;
|
|
}
|
|
} |