APi Scopes

This commit is contained in:
Paul Schneider 2026-03-16 23:16:12 +00:00
commit be7df3d054
25 changed files with 823 additions and 116 deletions

View file

@ -0,0 +1,69 @@
@model IdentityServer8.EntityFramework.Entities.ApiScope
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Create</title>
</head>
<body>
<h4>ApiScope</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="Enabled" /> @Html.DisplayNameFor(model => model.Enabled)
</label>
</div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="DisplayName" class="control-label"></label>
<input asp-for="DisplayName" class="form-control" />
<span asp-validation-for="DisplayName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Description" class="control-label"></label>
<input asp-for="Description" class="form-control" />
<span asp-validation-for="Description" class="text-danger"></span>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="Required" /> @Html.DisplayNameFor(model => model.Required)
</label>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="Emphasize" /> @Html.DisplayNameFor(model => model.Emphasize)
</label>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="ShowInDiscoveryDocument" /> @Html.DisplayNameFor(model => model.ShowInDiscoveryDocument)
</label>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
</body>
</html>

View file

@ -0,0 +1,72 @@
@model Yavsc.Models.YavscApiScope
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Delete</title>
</head>
<body>
<h3>Are you sure you want to delete this?</h3>
<div>
<h4>YavscApiScope</h4>
<hr />
<dl class="row">
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Enabled)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Enabled)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Name)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Name)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.DisplayName)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.DisplayName)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Description)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Description)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Required)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Required)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Emphasize)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Emphasize)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.ShowInDiscoveryDocument)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.ShowInDiscoveryDocument)
</dd>
</dl>
<form asp-action="Delete">
<input type="hidden" asp-for="Id" />
<input type="submit" value="Delete" class="btn btn-danger" /> |
<a asp-action="Index">Back to List</a>
</form>
</div>
</body>
</html>

View file

@ -0,0 +1,69 @@
@model Yavsc.Models.YavscApiScope
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Details</title>
</head>
<body>
<div>
<h4>YavscApiScope</h4>
<hr />
<dl class="row">
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Enabled)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Enabled)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Name)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Name)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.DisplayName)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.DisplayName)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Description)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Description)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Required)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Required)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.Emphasize)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.Emphasize)
</dd>
<dt class = "col-sm-2">
@Html.DisplayNameFor(model => model.ShowInDiscoveryDocument)
</dt>
<dd class = "col-sm-10">
@Html.DisplayFor(model => model.ShowInDiscoveryDocument)
</dd>
</dl>
</div>
<div>
<a asp-action="Edit" asp-route-id="@Model?.Id">Edit</a> |
<a asp-action="Index">Back to List</a>
</div>
</body>
</html>

View file

@ -0,0 +1,70 @@
@model Yavsc.Models.YavscApiScope
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Edit</title>
</head>
<body>
<h4>YavscApiScope</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Edit">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Id" />
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="Enabled" /> @Html.DisplayNameFor(model => model.Enabled)
</label>
</div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="DisplayName" class="control-label"></label>
<input asp-for="DisplayName" class="form-control" />
<span asp-validation-for="DisplayName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Description" class="control-label"></label>
<input asp-for="Description" class="form-control" />
<span asp-validation-for="Description" class="text-danger"></span>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="Required" /> @Html.DisplayNameFor(model => model.Required)
</label>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="Emphasize" /> @Html.DisplayNameFor(model => model.Emphasize)
</label>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="ShowInDiscoveryDocument" /> @Html.DisplayNameFor(model => model.ShowInDiscoveryDocument)
</label>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
</body>
</html>

View file

@ -0,0 +1,79 @@
@model IEnumerable<Yavsc.Models.YavscApiScope>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<p>
<a asp-action="Create">Create New</a>
</p>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Enabled)
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.DisplayName)
</th>
<th>
@Html.DisplayNameFor(model => model.Description)
</th>
<th>
@Html.DisplayNameFor(model => model.Required)
</th>
<th>
@Html.DisplayNameFor(model => model.Emphasize)
</th>
<th>
@Html.DisplayNameFor(model => model.ShowInDiscoveryDocument)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Enabled)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.DisplayName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.Required)
</td>
<td>
@Html.DisplayFor(modelItem => item.Emphasize)
</td>
<td>
@Html.DisplayFor(modelItem => item.ShowInDiscoveryDocument)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
</body>
</html>

View file

@ -60,7 +60,7 @@
@Html.DisplayNameFor(model => model.AccessTokenType)
</dt>
<dd>
@Html.DisplayFor(model => model.AccessTokenType)
@Html.DisplayFor(model => model.AccessTokenType)
</dd>
</dl>
</div>

View file

@ -1,4 +1,4 @@
@using IdentityServer8.Models
@using IdentityServer8.Models;
@model IEnumerable<IdentityServer8.EntityFramework.Entities.Client>
<h2>@Localizer["Index"]</h2>
@ -7,77 +7,85 @@
<a asp-action="Create">@Localizer["Create New"]</a>
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.ClientId)
</th>
<th>
@Html.DisplayNameFor(model => model.Enabled)
</th>
<th>
@Html.DisplayNameFor(model => model.ClientName)
</th>
<th>
@Html.DisplayNameFor(model => model.FrontChannelLogoutUri)
</th>
<th>
@Html.DisplayNameFor(model => model.RedirectUris)
</th>
<th>
@Html.DisplayNameFor(model => model.AbsoluteRefreshTokenLifetime)
</th>
<th>
@Html.DisplayNameFor(model => model.AllowedGrantTypes)
</th>
<th>
@Html.DisplayNameFor(model => model.AccessTokenType)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ClientId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Enabled)
</td>
<td>
@foreach (var item in Model)
{
<div class="list-item">
<div class="card">
<h5 class="card-title">Identifier</h5>
<h6 class="card-subtitle mb-2 text-muted">and activation</h6>
<dl class="card-body">
<dt>
@Html.DisplayNameFor(modelItem => item.ClientName)
</dt>
<dd>
@Html.DisplayFor(modelItem => item.ClientName)
</td>
<td>
@Html.DisplayFor(modelItem => item.FrontChannelLogoutUri)
</td>
<td>
<ul>
@foreach (var uri in item.RedirectUris)
{
<li>@uri.RedirectUri</li>
}
</ul>
</td>
<td>
@Html.DisplayFor(modelItem => item.AbsoluteRefreshTokenLifetime)
</td>
<td>
<ul>
@foreach (var t in item.AllowedGrantTypes)
{
<li>@t.GrantType</li>
}
</ul>
</td>
<td>
</dd>
<dt>
@Html.DisplayNameFor(modelItem => item.ClientId)
</dt>
<dd>
@Html.DisplayFor(modelItem => item.ClientId)
</dd>
<dt>
@Html.DisplayNameFor(modelItem => item.Enabled)
</dt>
<dd>
@Html.DisplayFor(modelItem => item.Enabled)
</dd>
</dl>
</div>
<div class="card">
<h5 class="card-title">Urls</h5>
<h6 class="card-subtitle mb-2 text-muted">login and logout, refresh token</h6>
<dl class="card-body">
<dt>
@Html.DisplayNameFor(model => model.FrontChannelLogoutUri)
</dt>
<dd> @Html.DisplayFor(model => item.FrontChannelLogoutUri)
</dd>
<dt>@Html.DisplayNameFor(model => model.RedirectUris)</dt>
<dd>
@foreach (var uri in item.RedirectUris)
{
<li>@uri.RedirectUri</li>
}
</dd>
<dt>@Html.DisplayNameFor(model => model.AbsoluteRefreshTokenLifetime)</dt>
<dd>@Html.DisplayFor(model => item.AbsoluteRefreshTokenLifetime)</dd>
</dl>
</div>
<div class="card">
<h5 class="card-title">Grants</h5>
<h6 class="card-subtitle mb-2 text-muted">and access type</h6>
<dl class="card-body">
<dt>@Html.DisplayNameFor(model => model.AllowedGrantTypes)</dt>
<dd> @foreach (var t in item.AllowedGrantTypes)
{
<li>@t.GrantType</li>
}
</dd>
<dt>
@Html.DisplayNameFor(model => model.AccessTokenType)
</dt>
<dd>
@Enum.GetName(typeof(AccessTokenType), item.AccessTokenType)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</table>
</dd>
</dl>
</div>
<a class="btn btn-primary btn-lg" asp-action="Edit" asp-route-id="@item.Id">Edit</a>
<a class="btn btn-secondary btn-lg" asp-action="Details" asp-route-id="@item.Id">Details</a>
<a class="btn btn-danger btn-lg" asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</div>
}

View file

@ -8,7 +8,7 @@
<link rel="icon" type="image/x-icon" href="~/favicon.ico" asp-append-version="true"/>
<link rel="shortcut icon" type="image/x-icon" href="~/favicon.ico" asp-append-version="true"/>
<link rel="stylesheet" href="~/lib/jquery-ui/jquery-ui.min.css">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" asp-append-version="true"/>
<link rel="stylesheet" href="~/lib/bootstrap.quartz.min.css" asp-append-version="true"/>
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>
<script src="~/lib/jquery-ui/external/jquery/jquery.js"></script>
<script src="~/lib/jquery-ui/jquery-ui.js"></script>
@ -36,7 +36,7 @@ background-attachment: fixed;
}
}
@await RenderSectionAsync("subbanner", false)
<div class="container body-container">
<div class="container py-4">
@RenderBody()
</div>
<footer class="border-top footer text-muted">