Skip to content

Commit 0151daf

Browse files
committed
feature: JwtToWebUser() always call Controller.GetWebUserCallback if provided (#21)
1 parent fe6949c commit 0151daf

File tree

3 files changed

+28
-31
lines changed

3 files changed

+28
-31
lines changed

release.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,15 @@ Notes :
1818
- sync `HttpMultipartDataParser` library with upstream
1919

2020

21+
## v11.9.0 / _(2024-02-15)_
22+
Maintenance
23+
24+
### breakingChange
25+
26+
- the `getWebUserCallback` delegate set with `SimpleW.SetToken()` is new call by `Controller.JwtToWebUser()` to redress `Controller.webuser` on each request.
27+
28+
29+
2130
## v11.8.0 / _(2024-02-14)_
2231
Maintenance
2332

src/SimpleW/SimpleW/Controller.cs

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@
99

1010
namespace SimpleW {
1111

12-
public delegate IWebUser DelegateSetTokenWebUser(Guid id = new Guid());
12+
/// <summary>
13+
/// Delegate to redress WebUser
14+
/// </summary>
15+
/// <param name="webuser"></param>
16+
/// <returns>IWebUser (NOT NULL)</returns>
17+
public delegate IWebUser DelegateSetTokenWebUser(TokenWebUser webuser = null);
1318

1419
/// <summary>
1520
/// <para>Controller is mandatory base class of all Controllers.</para>
@@ -70,8 +75,7 @@ public void Initialize(SimpleWSession session, HttpRequest request) {
7075
/// </summary>
7176
protected IWebUser webuser {
7277
get {
73-
if (!_webuser_set) {
74-
_webuser_set = true;
78+
if (_webuser == null) {
7579
_webuser = JwtToWebUser(GetJwt());
7680
}
7781
return _webuser;
@@ -83,15 +87,6 @@ protected IWebUser webuser {
8387
/// </summary>
8488
private IWebUser _webuser;
8589

86-
/// <summary>
87-
/// Flag : cache _webuser to avoid multi request
88-
/// as in some edge case JwtToWebUser()
89-
/// can return null (if GetWebUserCallback() return null)
90-
/// that's why we can't check _webuser = null and so
91-
/// use a specific flag
92-
/// </summary>
93-
private bool _webuser_set;
94-
9590
/// <summary>
9691
/// Return IWebUser from a jwt token
9792
/// The token is checked
@@ -101,25 +96,17 @@ protected IWebUser webuser {
10196
/// <param name="jwt">the string jwt</param>
10297
/// <returns></returns>
10398
public static IWebUser JwtToWebUser(string jwt) {
104-
// get webuser and update property (to avoid to do it in each controller)
10599
try {
106100
var wu = jwt?.ValidateJwt<TokenWebUser>(TokenKey, TokenIssuer);
107-
108-
// jwt token is valid and webuser must be refresh
109-
if (wu != null) {
110-
return wu.Refresh && GetWebUserCallback != null
111-
? GetWebUserCallback(wu.Id)
112-
: wu;
113-
}
114-
// try to get default TokenWebuser if defined in GetWebUserCallback
115-
else if (GetWebUserCallback != null) {
116-
return GetWebUserCallback();
117-
}
118-
else {
119-
return new WebUser();
101+
if (GetWebUserCallback != null) {
102+
return GetWebUserCallback(wu);
120103
}
104+
return wu ?? new WebUser();
121105
}
122106
catch {
107+
if (GetWebUserCallback != null) {
108+
return GetWebUserCallback();
109+
}
123110
return new WebUser();
124111
}
125112
}

src/SimpleW/SimpleW/SimpleWServer.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,13 @@ public void AddDynamicContent(Type controllerType, string path = "/") {
155155
}
156156

157157
/// <summary>
158-
/// Set Token settings and set delegate called by TokenWebUser to refresh webuser
158+
/// Set Token settings (passphrase and issuer).
159+
/// a delegate can be defined to redress webuser called by Controller.JwtToWebUser().
159160
/// </summary>
160161
/// <param name="tokenPassphrase">The String token secret passphrase (min 17 chars).</param>
161162
/// <param name="issuer">The String issuer.</param>
162-
/// <param name="tokenWebUserCallback">The DelegateSetTokenWebUser setTokenWebUser</param>
163-
public void SetToken(string tokenPassphrase, string issuer, DelegateSetTokenWebUser tokenWebUserCallback = null) {
163+
/// <param name="getWebUserCallback">The DelegateSetTokenWebUser getWebUserCallback</param>
164+
public void SetToken(string tokenPassphrase, string issuer, DelegateSetTokenWebUser getWebUserCallback = null) {
164165

165166
if (string.IsNullOrWhiteSpace(tokenPassphrase) || tokenPassphrase.Length <= 16) {
166167
throw new ArgumentException($"{nameof(tokenPassphrase)} must be 17 char length minimum");
@@ -169,8 +170,8 @@ public void SetToken(string tokenPassphrase, string issuer, DelegateSetTokenWebU
169170

170171
Controller.TokenIssuer = issuer;
171172

172-
if (tokenWebUserCallback != null) {
173-
Controller.GetWebUserCallback = tokenWebUserCallback;
173+
if (getWebUserCallback != null) {
174+
Controller.GetWebUserCallback = getWebUserCallback;
174175
}
175176
}
176177

0 commit comments

Comments
 (0)