Chris@0: ipManager = $ip_manager; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function create(ContainerInterface $container) { Chris@0: return new static( Chris@0: $container->get('ban.ip_manager') Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getFormId() { Chris@0: return 'ban_ip_form'; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: * Chris@0: * @param string $default_ip Chris@0: * (optional) IP address to be passed on to Chris@0: * \Drupal::formBuilder()->getForm() for use as the default value of the IP Chris@0: * address form field. Chris@0: */ Chris@0: public function buildForm(array $form, FormStateInterface $form_state, $default_ip = '') { Chris@0: $rows = []; Chris@0: $header = [$this->t('banned IP addresses'), $this->t('Operations')]; Chris@0: $result = $this->ipManager->findAll(); Chris@0: foreach ($result as $ip) { Chris@0: $row = []; Chris@0: $row[] = $ip->ip; Chris@0: $links = []; Chris@0: $links['delete'] = [ Chris@0: 'title' => $this->t('Delete'), Chris@0: 'url' => Url::fromRoute('ban.delete', ['ban_id' => $ip->iid]), Chris@0: ]; Chris@0: $row[] = [ Chris@0: 'data' => [ Chris@0: '#type' => 'operations', Chris@0: '#links' => $links, Chris@0: ], Chris@0: ]; Chris@0: $rows[] = $row; Chris@0: } Chris@0: Chris@0: $form['ip'] = [ Chris@0: '#title' => $this->t('IP address'), Chris@0: '#type' => 'textfield', Chris@0: '#size' => 48, Chris@0: '#maxlength' => 40, Chris@0: '#default_value' => $default_ip, Chris@0: '#description' => $this->t('Enter a valid IP address.'), Chris@0: ]; Chris@0: $form['actions'] = ['#type' => 'actions']; Chris@0: $form['actions']['submit'] = [ Chris@0: '#type' => 'submit', Chris@0: '#value' => $this->t('Add'), Chris@0: ]; Chris@0: Chris@0: $form['ban_ip_banning_table'] = [ Chris@0: '#type' => 'table', Chris@0: '#header' => $header, Chris@0: '#rows' => $rows, Chris@0: '#empty' => $this->t('No blocked IP addresses available.'), Chris@0: '#weight' => 120, Chris@0: ]; Chris@0: return $form; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function validateForm(array &$form, FormStateInterface $form_state) { Chris@0: $ip = trim($form_state->getValue('ip')); Chris@0: if ($this->ipManager->isBanned($ip)) { Chris@0: $form_state->setErrorByName('ip', $this->t('This IP address is already banned.')); Chris@0: } Chris@0: elseif ($ip == $this->getRequest()->getClientIP()) { Chris@0: $form_state->setErrorByName('ip', $this->t('You may not ban your own IP address.')); Chris@0: } Chris@0: elseif (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE) == FALSE) { Chris@0: $form_state->setErrorByName('ip', $this->t('Enter a valid IP address.')); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function submitForm(array &$form, FormStateInterface $form_state) { Chris@0: $ip = trim($form_state->getValue('ip')); Chris@0: $this->ipManager->banIp($ip); Chris@17: $this->messenger()->addStatus($this->t('The IP address %ip has been banned.', ['%ip' => $ip])); Chris@0: $form_state->setRedirect('ban.admin_page'); Chris@0: } Chris@0: Chris@0: }