getEnabled() ?? false); $form = Form::create([ ['token', TextType::class, ['label' => _m('The token used to authenticate you via the Pinboard-compatible API'), 'data' => $token?->getUserTokenString(), 'disabled' => true]], ['enable', SubmitType::class, ['label' => $enabled ? _m('Disable') : _m('Enable'), 'attr' => ['alt' => $enabled ? _m('Disable the use of the Pinboard-compatible API') : _m('Enable the use of the Pinboard-compatible API')]]], ['regenerate', SubmitType::class, ['label' => _m('Regenerate Token'), 'disabled' => !$enabled]], ], form_options: ['action' => Router::url(P\Pinboard::controller_route)]); return [ '_template' => 'pinboard/settings.html.twig', 'form_view' => $form->createView(), 'form' => $form, 'token' => $token, 'was_enabled' => $enabled, ]; } public static function onPost(Request $request) { $user = Common::ensureLoggedIn(); $params = self::setup(); $form = $params['form']; $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { /** @var SubmitButton $enable_button */ $enable_button = $form->get('enable'); /** @var SubmitButton $regenerate_button */ $regenerate_button = $form->get('regenerate'); if ($enable_button->isClicked()) { if ($params['was_enabled']) { if (\is_null($params['token'])) { throw new BugFoundException('Pinboard API can not be enabled if no token is present'); } else { $token = DB::refetch($parms['token']); $token->setEnabled(false); } } else { if (\is_null($params['token'])) { DB::persist($token = Token::create(['actor_id' => $user->getId(), 'token' => Token::generateTokenString(), 'enabled' => true])); } else { $token = DB::refetch($parms['token']); $token->setEnabled(true); } } } elseif ($regenerate_button->isClicked()) { if (\is_null($params['token'])) { throw new ClientException(_m('Can not regenerate token when no token exists. Enable Pinboard first')); } else { $token = DB::refetch($params['token']); $token->setToken(Token::generateTokenString()); } } else { throw new ClientException(_m('Invalid form submission')); } Cache::set(Token::cacheKeys($user->getNickname())['user-token'], $token); DB::flush(); return Form::forceRedirect($form, $request); } throw new ClientException(_m('Do not GET this page')); } }