diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index c988733..4717578 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -4,10 +4,9 @@ on: [workflow_dispatch, push, pull_request] jobs: run: - uses: flarum/framework/.github/workflows/REUSABLE_backend.yml@1.x + uses: flarum/framework/.github/workflows/REUSABLE_backend.yml@2.x with: enable_backend_testing: true enable_phpstan: true - php_versions: '["7.4", "8.0", "8.1", "8.2", "8.3", "8.4"]' backend_directory: . diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index e3b5ff9..9284b6c 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -4,7 +4,7 @@ on: [workflow_dispatch, push, pull_request] jobs: run: - uses: flarum/framework/.github/workflows/REUSABLE_frontend.yml@1.x + uses: flarum/framework/.github/workflows/REUSABLE_frontend.yml@2.x with: enable_bundlewatch: false enable_prettier: true @@ -13,7 +13,7 @@ jobs: frontend_directory: ./js backend_directory: . js_package_manager: yarn - main_git_branch: 1.x + main_git_branch: 2.x secrets: bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }} diff --git a/composer.json b/composer.json index 39e79aa..9192fa5 100644 --- a/composer.json +++ b/composer.json @@ -28,16 +28,17 @@ } ], "require": { - "php": "^7.4 || ^8.0", - "flarum/core": "^1.8.1", + "flarum/core": "^2.0.0", "league/oauth1-client": "^1.10.1", "league/oauth2-facebook": "^2.2.0", "league/oauth2-github": "^3.1.0", "league/oauth2-google": "^4.0.1", "omines/oauth2-gitlab": "^3.3.0", "wohali/oauth2-discord-new": "^1.2.1", - "fof/extend": "^1.3.3" + "fof/extend": "^2.0.0" }, + "minimum-stability": "beta", + "prefer-stable": true, "replace": { "flarum/auth-facebook": "*", "flarum/auth-github": "*", @@ -77,8 +78,8 @@ "flarum/gdpr" ] }, - "flagrow": { - "discuss": "https://discuss.flarum.org/d/25182" + "branch-alias": { + "dev-2.x": "2.x-dev" }, "flarum-cli": { "modules": { @@ -88,8 +89,8 @@ } }, "require-dev": { - "flarum/phpstan": "*", - "flarum/testing": "^1.0.0" + "flarum/phpstan": "^2.0.0", + "flarum/testing": "^2.0.0" }, "scripts": { "analyse:phpstan": "phpstan analyse", diff --git a/extend.php b/extend.php index 2b23863..edad797 100644 --- a/extend.php +++ b/extend.php @@ -11,13 +11,14 @@ namespace FoF\OAuth; -use Flarum\Api\Serializer\CurrentUserSerializer; -use Flarum\Api\Serializer\ForumSerializer; +use Flarum\Api\Context; +use Flarum\Api\Resource; +use Flarum\Api\Schema; use Flarum\Extend; use Flarum\Frontend\Document; +use Flarum\Search\Database\DatabaseSearchDriver; use Flarum\User\Event\LoggedOut; use Flarum\User\Event\RegisteringFromProvider; -use Flarum\User\Filter\UserFilterer; use Flarum\User\Search\UserSearcher; use FoF\Extend\Events\OAuthLoginSuccessful; @@ -45,16 +46,15 @@ (new Extend\Routes('forum')) ->get('/auth/twitter', 'auth.twitter', Controllers\TwitterAuthController::class), - (new Extend\Routes('api')) - ->get('/users/{id}/linked-accounts', 'users.provider.list', Api\Controllers\ListProvidersController::class) - ->get('/linked-accounts', 'user.provider.list', Api\Controllers\ListProvidersController::class) - ->delete('/linked-accounts/{id}', 'users.provider.delete', Api\Controllers\DeleteProviderLinkController::class), + new Extend\ApiResource(Api\Resource\ProviderResource::class), (new Extend\ServiceProvider()) ->register(OAuthServiceProvider::class), - (new Extend\ApiSerializer(ForumSerializer::class)) - ->attributes(Api\AddForumAttributes::class), + (new Extend\ApiResource(Resource\ForumResource::class)) + ->fields(Api\AddForumAttributes::class), + (new Extend\ApiResource(Resource\UserResource::class)) + ->fields(Api\AddUserAttributes::class), (new Extend\Settings()) ->default('fof-oauth.only_icons', false) @@ -74,20 +74,14 @@ ->listen(LoggedOut::class, Listeners\HandleLogout::class) ->subscribe(Listeners\ClearOAuthCache::class), - (new Extend\ApiSerializer(CurrentUserSerializer::class)) - ->attributes(Api\CurrentUserAttributes::class), - - (new Extend\Filter(UserFilterer::class)) - ->addFilter(Query\SsoIdFilterGambit::class), - - (new Extend\SimpleFlarumSearch(UserSearcher::class)) - ->addGambit(Query\SsoIdFilterGambit::class), - (new Extend\Conditional()) ->whenExtensionEnabled('flarum-gdpr', fn () => [ - (new Extend\ApiSerializer(ForumSerializer::class)) - ->attribute('passwordlessSignUp', function (ForumSerializer $serializer) { - return !$serializer->getActor()->isGuest() && $serializer->getActor()->loginProviders()->count() > 0; - }), + (new Extend\ApiResource(Resource\ForumResource::class)) + ->fields(fn () => [ + Schema\Str::make('passwordlessSignUp') + ->get(fn ($model, Context $context) => !$context->getActor()->isGuest() && $context->getActor()->loginProviders()->count() > 0), + ]), ]), + (new Extend\SearchDriver(DatabaseSearchDriver::class)) + ->addFilter(UserSearcher::class, Query\SsoIdFilter::class), ]; diff --git a/js/package.json b/js/package.json index 26d6c95..e72e870 100644 --- a/js/package.json +++ b/js/package.json @@ -5,12 +5,12 @@ "prettier": "@flarum/prettier-config", "devDependencies": { "@flarum/prettier-config": "^1.0.0", - "flarum-tsconfig": "^1.0.3", - "flarum-webpack-config": "^2.0.0", + "flarum-tsconfig": "^2.0.0", + "flarum-webpack-config": "^3.0.2", "prettier": "^3.0.3", "typescript-coverage-report": "^0.6.1", "webpack": "^5.94.0", - "webpack-cli": "^5.1.4" + "webpack-cli": "^5.0" }, "scripts": { "analyze": "cross-env ANALYZER=true yarn run build", diff --git a/js/src/admin/components/AuthSettingsPage.js b/js/src/admin/components/AuthSettingsPage.js index 8f16fca..ab8b1ca 100644 --- a/js/src/admin/components/AuthSettingsPage.js +++ b/js/src/admin/components/AuthSettingsPage.js @@ -2,7 +2,8 @@ import app from 'flarum/admin/app'; import Button from 'flarum/common/components/Button'; import Dropdown from 'flarum/common/components/Dropdown'; import ExtensionPage from 'flarum/admin/components/ExtensionPage'; -import icon from 'flarum/common/helpers/icon'; +import Icon from 'flarum/common/components/Icon'; +import Badge from 'flarum/common/components/Badge'; import ItemList from 'flarum/common/utils/ItemList'; export default class AuthSettingsPage extends ExtensionPage { @@ -16,7 +17,7 @@ export default class AuthSettingsPage extends ExtensionPage { return (
- {app.translator.trans(`fof-oauth.admin.settings.providers.${name}.description`, { - link: ( - - {provider.link} - - ), - })} -
-- {app.translator.trans(`fof-oauth.admin.settings.providers.callback_url_text`, { - url: ( - - {callbackUrl} - - ), - })} -
++ {app.translator.trans(`fof-oauth.admin.settings.providers.${name}.description`, { + link: ( + + {provider.link} + + ), + })} +
++ {app.translator.trans(`fof-oauth.admin.settings.providers.callback_url_text`, { + url: ( + + {callbackUrl} + + ), + })} +
+{provider.name()}
{app.translator.trans('fof-oauth.forum.user.settings.linked-account.orphaned-account')}
-{app.translator.trans(`fof-oauth.forum.providers.${provider.name()}`)}
-