98 lines
2.9 KiB
C#
98 lines
2.9 KiB
C#
using System.Text.Json;
|
|
using Livekit.Server.Sdk.Dotnet;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
var MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
|
|
|
|
IConfiguration config = new ConfigurationBuilder()
|
|
.SetBasePath(Directory.GetCurrentDirectory())
|
|
.AddJsonFile("appsettings.json")
|
|
.AddEnvironmentVariables()
|
|
.Build();
|
|
|
|
// Load env variables
|
|
var SERVER_PORT = config.GetValue<int>("SERVER_PORT");
|
|
var LIVEKIT_API_KEY = config.GetValue<string>("LIVEKIT_API_KEY");
|
|
var LIVEKIT_API_SECRET = config.GetValue<string>("LIVEKIT_API_SECRET");
|
|
|
|
// Enable CORS support
|
|
builder.Services.AddCors(options =>
|
|
{
|
|
options.AddPolicy(
|
|
name: MyAllowSpecificOrigins,
|
|
builder =>
|
|
{
|
|
builder.WithOrigins("*").AllowAnyHeader();
|
|
}
|
|
);
|
|
});
|
|
|
|
builder.WebHost.UseKestrel(serverOptions =>
|
|
{
|
|
serverOptions.ListenAnyIP(SERVER_PORT);
|
|
});
|
|
|
|
var app = builder.Build();
|
|
app.UseCors(MyAllowSpecificOrigins);
|
|
|
|
app.MapPost(
|
|
"/token",
|
|
async (HttpRequest request) =>
|
|
{
|
|
var body = new StreamReader(request.Body);
|
|
string postData = await body.ReadToEndAsync();
|
|
Dictionary<string, dynamic> bodyParams =
|
|
JsonSerializer.Deserialize<Dictionary<string, dynamic>>(postData)
|
|
?? new Dictionary<string, dynamic>();
|
|
|
|
if (
|
|
bodyParams.TryGetValue("roomName", out var roomName)
|
|
&& bodyParams.TryGetValue("participantName", out var participantName)
|
|
)
|
|
{
|
|
var token = new AccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET)
|
|
.WithIdentity(participantName)
|
|
.WithName(participantName)
|
|
.WithGrants(new VideoGrants { RoomJoin = true, Room = roomName });
|
|
|
|
var jwt = token.ToJwt();
|
|
return Results.Json(new { token = jwt });
|
|
}
|
|
else
|
|
{
|
|
return Results.BadRequest(
|
|
new { errorMessage = "roomName and participantName are required" }
|
|
);
|
|
}
|
|
}
|
|
);
|
|
|
|
app.MapPost(
|
|
"/livekit/webhook",
|
|
async (HttpRequest request) =>
|
|
{
|
|
var webhookReceiver = new WebhookReceiver(LIVEKIT_API_KEY, LIVEKIT_API_SECRET);
|
|
try
|
|
{
|
|
StreamReader body = new StreamReader(request.Body);
|
|
string postData = await body.ReadToEndAsync();
|
|
string authHeader =
|
|
request.Headers["Authorization"].FirstOrDefault()
|
|
?? throw new Exception("Authorization header is missing");
|
|
|
|
WebhookEvent webhookEvent = webhookReceiver.Receive(postData, authHeader);
|
|
|
|
Console.Out.WriteLine(webhookEvent);
|
|
|
|
return Results.Ok();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.Error.WriteLine("Error validating webhook event: " + e.Message);
|
|
return Results.Unauthorized();
|
|
}
|
|
}
|
|
);
|
|
|
|
app.Run();
|