Allow unauthorized users to search and spectate.
This commit is contained in:
@@ -69,8 +69,6 @@ public class ShogiApplication(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return session;
|
||||
}
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ public class SessionsController(
|
||||
/// <param name="sessionId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{sessionId}")]
|
||||
[AllowAnonymous]
|
||||
public async Task<ActionResult<Session>> GetSession(Guid sessionId)
|
||||
{
|
||||
var session = await application.ReadSession(sessionId.ToString());
|
||||
@@ -78,12 +79,11 @@ public class SessionsController(
|
||||
};
|
||||
}
|
||||
|
||||
[HttpGet()]
|
||||
[HttpGet]
|
||||
[AllowAnonymous]
|
||||
public async Task<ActionResult<SessionMetadata[]>> ReadAllSessionsMetadata()
|
||||
{
|
||||
var id = this.User.GetId();
|
||||
if (id == null) return this.Unauthorized();
|
||||
|
||||
var id = this.User.GetId() ?? string.Empty;
|
||||
var dtos = await application.ReadAllSessionMetadatas(id);
|
||||
return dtos
|
||||
.Select(dto => new SessionMetadata
|
||||
|
||||
@@ -56,7 +56,7 @@ app.UseCors(policy =>
|
||||
policy.WithOrigins(allowedOrigins).AllowAnyHeader().AllowAnyMethod().AllowCredentials();
|
||||
});
|
||||
|
||||
app.MapHub<GameHub>("/gamehub").RequireAuthorization();
|
||||
app.MapHub<GameHub>("/gamehub");
|
||||
|
||||
app.Run();
|
||||
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
<a href="">Home</a>
|
||||
</p>
|
||||
|
||||
<AuthorizeView>
|
||||
<p>
|
||||
<a href="search">Search</a>
|
||||
</p>
|
||||
|
||||
<AuthorizeView>
|
||||
<p>
|
||||
<button class="href" @onclick="CreateSession">Create</button>
|
||||
</p>
|
||||
|
||||
@@ -56,10 +56,17 @@ else
|
||||
if (this.session != null)
|
||||
{
|
||||
var state = await authenticationState;
|
||||
var accountId = state.User.Claims.First(c => c.Type == ClaimTypes.Name).Value;
|
||||
var accountId = state.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name)?.Value;
|
||||
if (accountId == null)
|
||||
{
|
||||
this.isSpectating = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.perspective = accountId == session.Player1 ? WhichPlayer.Player1 : WhichPlayer.Player2;
|
||||
this.isSpectating = !(accountId == this.session.Player1 || accountId == this.session.Player2);
|
||||
}
|
||||
}
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,9 +74,11 @@
|
||||
<div class="player-area">
|
||||
@if (Perspective == WhichPlayer.Player2 && string.IsNullOrEmpty(Session.Player2))
|
||||
{
|
||||
<AuthorizeView>
|
||||
<div class="place-self-center">
|
||||
<button @onclick="OnClickJoinGameInternal">Join Game</button>
|
||||
</div>
|
||||
</AuthorizeView>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -115,23 +115,19 @@
|
||||
{
|
||||
var pieceBeingMoved = Session.BoardState.Board[selectedBoardPosition];
|
||||
var isPromotedAlready = pieceBeingMoved != null && pieceBeingMoved.IsPromoted;
|
||||
Console.WriteLine("Is promoted? {0}", isPromotedAlready);
|
||||
// Moving to an empty space or capturing an opponent's piece.
|
||||
if (!isPromotedAlready && (IsWithinPromoteArea(position) || IsWithinPromoteArea(selectedBoardPosition)))
|
||||
{
|
||||
Console.WriteLine("Prompt!");
|
||||
moveTo = position;
|
||||
showPromotePrompt = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
var success = await ShogiApi.Move(Session.SessionId, new MovePieceCommand(selectedBoardPosition, position, false));
|
||||
Console.WriteLine("Success? {0}", success);
|
||||
if (!success)
|
||||
{
|
||||
selectedBoardPosition = null;
|
||||
showError = true;
|
||||
Console.WriteLine("Show error");
|
||||
}
|
||||
}
|
||||
StateHasChanged();
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
@using System.Net
|
||||
@inject ShogiApi ShogiApi
|
||||
|
||||
<Stretch style="position: relative;">
|
||||
<GameBoardPresentation IsSpectating="true"
|
||||
Perspective="WhichPlayer.Player2"
|
||||
Session="Session"
|
||||
OnClickJoinGame="OnClickJoinGame" />
|
||||
</Stretch>
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
|
||||
@@ -13,14 +13,12 @@
|
||||
<span></span>
|
||||
</row>
|
||||
<hr />
|
||||
<AuthorizeView>
|
||||
@foreach (var session in allSessions)
|
||||
{
|
||||
<row>
|
||||
<GameBrowserEntry Session="session" OnSessionDeleted="FetchSessions" />
|
||||
</row>
|
||||
}
|
||||
</AuthorizeView>
|
||||
</div>
|
||||
|
||||
@if (allSessions.Length == 0)
|
||||
@@ -40,9 +38,10 @@
|
||||
async Task FetchSessions()
|
||||
{
|
||||
var sessions = await ShogiApi.GetAllSessionsMetadata();
|
||||
Console.WriteLine("Session count {0}", sessions.Length);
|
||||
if (sessions != null)
|
||||
{
|
||||
this.allSessions = sessions.ToArray();
|
||||
this.allSessions = sessions;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
@inject ShogiApi Api
|
||||
|
||||
<gameBrowserEntry>
|
||||
<AuthorizeView>
|
||||
@if (showDeletePrompt)
|
||||
{
|
||||
<modal class="PrimaryTheme ThemeVariant--Contrast">
|
||||
@@ -36,6 +35,7 @@
|
||||
{
|
||||
<span>Full</span>
|
||||
}
|
||||
<AuthorizeView>
|
||||
@if (context.User.Identity?.Name == Session.Player1)
|
||||
{
|
||||
<IconButton OnClick="() => showDeletePrompt = true">
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
@attribute [Authorize]
|
||||
@page "/play/{sessionId}"
|
||||
@page "/play/{sessionId}"
|
||||
|
||||
@inject GameHubNode node
|
||||
|
||||
@@ -8,9 +7,7 @@
|
||||
return;
|
||||
}
|
||||
<main class="PrimaryTheme">
|
||||
<AuthorizeView>
|
||||
<GameBoard SessionId="@SessionId" />
|
||||
</AuthorizeView>
|
||||
</main>
|
||||
|
||||
@code {
|
||||
|
||||
@@ -447,9 +447,6 @@ namespace UnitTests
|
||||
// P2 King retreat
|
||||
shogi.Move("E8", "E9", false);
|
||||
|
||||
console.WriteLine(shogi.ToStringStateAsAscii());
|
||||
|
||||
|
||||
// Act - P1 Pawn wins by checkmate.
|
||||
shogi.Move("E7", "E8", false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user