Skip to content

Commit c8ab449

Browse files
authored
Merge pull request #70 from boolean-uk/swagger-auto-auth
automatic authenthication in swagger during development nice
2 parents 7b8f9a3 + c542d18 commit c8ab449

File tree

2 files changed

+63
-15
lines changed

2 files changed

+63
-15
lines changed

exercise.wwwapi/DTOs/Users/UserDTO.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,5 @@ public UserDTO(User model)
5959
Specialism = model.Specialism;
6060
Role = model.Role.ToString();
6161
Notes = model.Notes.Select(n => new NoteDTO(n)).ToList();
62-
63-
6462
}
6563
}

exercise.wwwapi/Program.cs

Lines changed: 63 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,31 @@
1-
using System.Diagnostics;
1+
using exercise.wwwapi;
22
using exercise.wwwapi.Configuration;
33
using exercise.wwwapi.Data;
4+
using exercise.wwwapi.DTOs.Comments;
5+
using exercise.wwwapi.DTOs.Comments.UpdateComment;
6+
using exercise.wwwapi.DTOs.Notes;
7+
using exercise.wwwapi.DTOs.Posts;
8+
using exercise.wwwapi.DTOs.Posts.UpdatePost;
49
using exercise.wwwapi.DTOs.Register;
510
using exercise.wwwapi.DTOs.UpdateUser;
11+
using exercise.wwwapi.DTOs.Users;
612
using exercise.wwwapi.Endpoints;
713
using exercise.wwwapi.EndPoints;
14+
using exercise.wwwapi.Models;
815
using exercise.wwwapi.Repository;
16+
using exercise.wwwapi.Validators.NoteValidators;
17+
using exercise.wwwapi.Validators.PostValidators;
918
using exercise.wwwapi.Validators.UserValidators;
1019
using FluentValidation;
1120
using Microsoft.AspNetCore.Authentication.JwtBearer;
1221
using Microsoft.EntityFrameworkCore;
1322
using Microsoft.IdentityModel.Tokens;
1423
using Microsoft.OpenApi.Models;
1524
using Scalar.AspNetCore;
25+
using System.Diagnostics;
26+
using System.IdentityModel.Tokens.Jwt;
27+
using System.Security.Claims;
1628
using System.Text;
17-
using exercise.wwwapi;
18-
using exercise.wwwapi.Models;
19-
using exercise.wwwapi.DTOs.Notes;
20-
using exercise.wwwapi.Validators.NoteValidators;
21-
using exercise.wwwapi.DTOs.Posts;
22-
using exercise.wwwapi.Validators.PostValidators;
23-
using exercise.wwwapi.DTOs.Posts.UpdatePost;
24-
using exercise.wwwapi.DTOs.Comments;
25-
using exercise.wwwapi.DTOs.Comments.UpdateComment;
26-
using exercise.wwwapi.DTOs.Users;
2729

2830

2931
var builder = WebApplication.CreateBuilder(args);
@@ -169,8 +171,29 @@
169171
if (app.Environment.IsDevelopment())
170172
{
171173
app.UseSwagger(c => c.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi2_0);
172-
app.UseSwaggerUI();
173-
app.UseSwaggerUI(options => options.SwaggerEndpoint("/openapi/v3.json", "Demo API"));
174+
175+
// Generate a JWT token using your existing signing key
176+
var devJwtToken = GenerateDevJwtToken(token);
177+
178+
app.UseSwaggerUI(c =>
179+
{
180+
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Demo API");
181+
c.SwaggerEndpoint("/openapi/v3.json", "Demo API");
182+
183+
c.HeadContent = $@"
184+
<script>
185+
window.addEventListener('load', function() {{
186+
setTimeout(function() {{
187+
if (window.ui && window.ui.preauthorizeApiKey) {{
188+
window.ui.preauthorizeApiKey('Bearer', 'Bearer {devJwtToken}');
189+
console.log('Swagger UI auto-authenticated with dev token');
190+
}} else {{
191+
console.log('Swagger UI not ready for auto-authentication');
192+
}}
193+
}}, 2000);
194+
}});
195+
</script>";
196+
});
174197
app.MapScalarApiReference();
175198
}
176199

@@ -195,7 +218,34 @@
195218
app.ConfigureCourseEndpoints();
196219
app.Run();
197220

221+
static string GenerateDevJwtToken(string signingKey)
222+
{
223+
var tokenHandler = new JwtSecurityTokenHandler();
224+
var key = Encoding.UTF8.GetBytes(signingKey);
225+
226+
var claims = new List<Claim>
227+
{
228+
new Claim(ClaimTypes.Name, "Development User"),
229+
new Claim(ClaimTypes.Email, "[email protected]"),
230+
new Claim(ClaimTypes.Role, "Teacher")
231+
};
232+
233+
var tokenDescriptor = new SecurityTokenDescriptor
234+
{
235+
Subject = new ClaimsIdentity(claims),
236+
Expires = DateTime.UtcNow.AddDays(30),
237+
SigningCredentials = new SigningCredentials(
238+
new SymmetricSecurityKey(key),
239+
SecurityAlgorithms.HmacSha256Signature)
240+
};
241+
242+
var jwtToken = tokenHandler.CreateToken(tokenDescriptor);
243+
return tokenHandler.WriteToken(jwtToken);
244+
}
245+
198246
public partial class Program
199247
{
200248
} // needed for testing - please ignore
201249

250+
251+

0 commit comments

Comments
 (0)