new: [Authkeys] added
							parent
							
								
									a7bb35b7cb
								
							
						
					
					
						commit
						a99317734d
					
				| 
						 | 
				
			
			@ -0,0 +1,54 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Controller;
 | 
			
		||||
 | 
			
		||||
use App\Controller\AppController;
 | 
			
		||||
use Cake\Utility\Hash;
 | 
			
		||||
use Cake\Utility\Text;
 | 
			
		||||
use \Cake\Database\Expression\QueryExpression;
 | 
			
		||||
use Cake\Http\Exception\NotFoundException;
 | 
			
		||||
use Cake\Http\Exception\MethodNotAllowedException;
 | 
			
		||||
use Cake\Http\Exception\ForbiddenException;
 | 
			
		||||
use Cake\Http\Exception\NotAcceptableException;
 | 
			
		||||
use Cake\Error\Debugger;
 | 
			
		||||
 | 
			
		||||
class AuthKeysController extends AppController
 | 
			
		||||
{
 | 
			
		||||
    public function index()
 | 
			
		||||
    {
 | 
			
		||||
        $this->CRUD->index([
 | 
			
		||||
            'filters' => ['users.username', 'authkey', 'comment', 'users.id'],
 | 
			
		||||
            'quickFilters' => ['authkey', 'comment'],
 | 
			
		||||
            'contain' => ['Users']
 | 
			
		||||
        ]);
 | 
			
		||||
        if ($this->ParamHandler->isRest()) {
 | 
			
		||||
            return $this->restResponsePayload;
 | 
			
		||||
        }
 | 
			
		||||
        $this->set('metaGroup', 'ContactDB');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function delete($id)
 | 
			
		||||
    {
 | 
			
		||||
        $this->CRUD->delete($id);
 | 
			
		||||
        if ($this->ParamHandler->isRest()) {
 | 
			
		||||
            return $this->restResponsePayload;
 | 
			
		||||
        }
 | 
			
		||||
        $this->set('metaGroup', 'ContactDB');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function add()
 | 
			
		||||
    {
 | 
			
		||||
        $this->CRUD->add();
 | 
			
		||||
        if ($this->ParamHandler->isRest()) {
 | 
			
		||||
            return $this->restResponsePayload;
 | 
			
		||||
        }
 | 
			
		||||
        $this->loadModel('Users');
 | 
			
		||||
        $dropdownData = [
 | 
			
		||||
            'user' => $this->Users->find('list', [
 | 
			
		||||
                'sort' => ['username' => 'asc']
 | 
			
		||||
            ])
 | 
			
		||||
        ];
 | 
			
		||||
        $this->set(compact('dropdownData'));
 | 
			
		||||
        $this->set('metaGroup', 'ContactDB');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Model\Entity;
 | 
			
		||||
 | 
			
		||||
use App\Model\Entity\AppModel;
 | 
			
		||||
use Cake\ORM\Entity;
 | 
			
		||||
 | 
			
		||||
class AuthKey extends AppModel
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace App\Model\Table;
 | 
			
		||||
 | 
			
		||||
use App\Model\Table\AppTable;
 | 
			
		||||
use Cake\ORM\Table;
 | 
			
		||||
use Cake\Validation\Validator;
 | 
			
		||||
use Cake\Event\EventInterface;
 | 
			
		||||
use Cake\Utility\Security;
 | 
			
		||||
use ArrayObject;
 | 
			
		||||
 | 
			
		||||
class AuthKeysTable extends AppTable
 | 
			
		||||
{
 | 
			
		||||
    public function initialize(array $config): void
 | 
			
		||||
    {
 | 
			
		||||
        parent::initialize($config);
 | 
			
		||||
        $this->addBehavior('UUID');
 | 
			
		||||
        $this->belongsTo(
 | 
			
		||||
            'Users'
 | 
			
		||||
        );
 | 
			
		||||
        $this->setDisplayField('authkey');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function beforeMarshal(EventInterface $event, ArrayObject $data, ArrayObject $options)
 | 
			
		||||
    {
 | 
			
		||||
        $data['created'] = time();
 | 
			
		||||
        if (empty($data['valid_until'])) {
 | 
			
		||||
            $data['valid_until'] = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (empty($data['authkey'])) {
 | 
			
		||||
            $data['authkey'] = $this->generateAuthKey();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function generateAuthKey()
 | 
			
		||||
    {
 | 
			
		||||
        return Security::randomString(40);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function validationDefault(Validator $validator): Validator
 | 
			
		||||
    {
 | 
			
		||||
        $validator
 | 
			
		||||
            ->notEmptyString('authkey')
 | 
			
		||||
            ->notEmptyString('user_id')
 | 
			
		||||
            ->requirePresence(['authkey', 'user_id'], 'create');
 | 
			
		||||
        return $validator;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
<?php
 | 
			
		||||
echo $this->element('genericElements/Form/genericForm', array(
 | 
			
		||||
    'data' => array(
 | 
			
		||||
        'description' => __('Authkeys are used for API access. A user can have more than one authkey, so if you would like to use separate keys per tool that queries Cerebrate, add additional keys. Use the comment field to make identifying your keys easier.'),
 | 
			
		||||
        'fields' => array(
 | 
			
		||||
            array(
 | 
			
		||||
                'field' => 'user_id',
 | 
			
		||||
                'label' => __('User'),
 | 
			
		||||
                'options' => $dropdownData['user'],
 | 
			
		||||
                'type' => 'dropdown'
 | 
			
		||||
            ),
 | 
			
		||||
            array(
 | 
			
		||||
                'field' => 'comment'
 | 
			
		||||
            ),
 | 
			
		||||
            array(
 | 
			
		||||
                'field' => 'valid_until',
 | 
			
		||||
                'label' => 'Validity'
 | 
			
		||||
            )
 | 
			
		||||
        ),
 | 
			
		||||
        'submit' => array(
 | 
			
		||||
            'action' => $this->request->getParam('action')
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
));
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
<?php
 | 
			
		||||
echo $this->element('genericElements/IndexTable/index_table', [
 | 
			
		||||
    'data' => [
 | 
			
		||||
        'data' => $data,
 | 
			
		||||
        'top_bar' => [
 | 
			
		||||
            'pull' => 'right',
 | 
			
		||||
            'children' => [
 | 
			
		||||
                [
 | 
			
		||||
                    'type' => 'simple',
 | 
			
		||||
                    'children' => [
 | 
			
		||||
                        'data' => [
 | 
			
		||||
                            'type' => 'simple',
 | 
			
		||||
                            'text' => __('Add authentication key'),
 | 
			
		||||
                            'class' => 'btn btn-primary',
 | 
			
		||||
                            'popover_url' => '/authKeys/add'
 | 
			
		||||
                        ]
 | 
			
		||||
                    ]
 | 
			
		||||
                ],
 | 
			
		||||
                [
 | 
			
		||||
                    'type' => 'search',
 | 
			
		||||
                    'button' => __('Filter'),
 | 
			
		||||
                    'placeholder' => __('Enter value to search'),
 | 
			
		||||
                    'data' => '',
 | 
			
		||||
                    'searchKey' => 'value'
 | 
			
		||||
                ]
 | 
			
		||||
            ]
 | 
			
		||||
        ],
 | 
			
		||||
        'fields' => [
 | 
			
		||||
            [
 | 
			
		||||
                'name' => '#',
 | 
			
		||||
                'sort' => 'id',
 | 
			
		||||
                'data_path' => 'id',
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => __('User'),
 | 
			
		||||
                'sort' => 'user.username',
 | 
			
		||||
                'data_path' => 'user.username',
 | 
			
		||||
            ],
 | 
			
		||||
            [
 | 
			
		||||
                'name' => __('Auth key'),
 | 
			
		||||
                'sort' => 'authkey',
 | 
			
		||||
                'data_path' => 'authkey',
 | 
			
		||||
                'privacy' => 1
 | 
			
		||||
            ]
 | 
			
		||||
        ],
 | 
			
		||||
        'title' => __('Authentication key Index'),
 | 
			
		||||
        'description' => __('A list of API keys bound to a user.'),
 | 
			
		||||
        'pull' => 'right',
 | 
			
		||||
        'actions' => [
 | 
			
		||||
            [
 | 
			
		||||
                'onclick' => 'populateAndLoadModal(\'/encryptionKeys/delete/[onclick_params_data_path]\');',
 | 
			
		||||
                'onclick_params_data_path' => 'id',
 | 
			
		||||
                'icon' => 'trash'
 | 
			
		||||
            ]
 | 
			
		||||
        ]
 | 
			
		||||
    ]
 | 
			
		||||
]);
 | 
			
		||||
		Loading…
	
		Reference in New Issue