Skip to content

Commit 58692be

Browse files
authored
fix: don't see developer tokens if not within the first 20 results (#4264)
1 parent ee23458 commit 58692be

File tree

3 files changed

+60
-4
lines changed

3 files changed

+60
-4
lines changed

framework/core/js/src/forum/components/UserSecurityPage.tsx

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,14 +194,38 @@ export default class UserSecurityPage<CustomAttrs extends IUserPageAttrs = IUser
194194
}
195195

196196
loadTokens() {
197-
return app.store
197+
const userId = this.user!.id()!;
198+
199+
// Load session tokens
200+
const sessionsPromise = app.store
198201
.find<AccessToken[]>('access-tokens', {
199-
filter: { user: this.user!.id()! },
202+
filter: {
203+
user: userId,
204+
'-type': 'developer',
205+
},
200206
})
201207
.then((tokens) => {
202-
this.state.setTokens(tokens);
203-
m.redraw();
208+
return tokens;
209+
});
210+
211+
// Load developer tokens
212+
const developerPromise = app.store
213+
.find<AccessToken[]>('access-tokens', {
214+
filter: {
215+
user: userId,
216+
type: 'developer',
217+
},
218+
})
219+
.then((tokens) => {
220+
return tokens;
204221
});
222+
223+
return Promise.all([sessionsPromise, developerPromise]).then(([sessions, developerTokens]) => {
224+
// Combine both arrays
225+
const allTokens = [...sessions, ...developerTokens];
226+
this.state.setTokens(allTokens);
227+
m.redraw();
228+
});
205229
}
206230

207231
terminateAllOtherSessions() {

framework/core/src/Filter/FilterServiceProvider.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public function register()
3737
return [
3838
AccessTokenFilterer::class => [
3939
HttpFilter\UserFilter::class,
40+
HttpFilter\AccessTokenTypeFilter::class,
4041
],
4142
DiscussionFilterer::class => [
4243
DiscussionQuery\AuthorFilterGambit::class,
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
/*
4+
* This file is part of Flarum.
5+
*
6+
* For detailed copyright and license information, please view the
7+
* LICENSE file that was distributed with this source code.
8+
*/
9+
10+
namespace Flarum\Http\Filter;
11+
12+
use Flarum\Filter\FilterInterface;
13+
use Flarum\Filter\FilterState;
14+
use Flarum\Filter\ValidateFilterTrait;
15+
16+
class AccessTokenTypeFilter implements FilterInterface
17+
{
18+
use ValidateFilterTrait;
19+
20+
public function getFilterKey(): string
21+
{
22+
return 'type';
23+
}
24+
25+
public function filter(FilterState $filterState, $filterValue, bool $negate)
26+
{
27+
$type = $this->asString($filterValue);
28+
29+
$filterState->getQuery()->where('type', $negate ? '!=' : '=', $type);
30+
}
31+
}

0 commit comments

Comments
 (0)