Updated readme, install and other documentation, changed panel() to site() since it makes more sense that way with netbox. started fixing authentication, hostfact had a login method, but netbox does not, but the user model provides a password that we can authenticate against.

This commit is contained in:
Tony Roy 2021-03-13 14:34:15 -04:00
commit 0df9b15379
7 changed files with 120 additions and 92 deletions

View file

@ -4,18 +4,27 @@
The install of this package is pretty straight forward The install of this package is pretty straight forward
## Install Steps ## Install Steps
### Install this package with composer: ### Install
Install this package with composer:
``` ```
composer require wickedsoft/laravel-netbox composer require wickedsoft/laravel-netbox
``` ```
### Copy the config files for laravel-netbox ### Publish configuration
Copy the config files for laravel-netbox
``` ```
php artisan vendor:publish --provider="wickedsoft\NetBox\ServiceProvider" --tag="config" php artisan vendor:publish --provider="wickedsoft\NetBox\ServiceProvider" --tag="config"
``` ```
### Add the credentials to your environment file (.env) ### Environment file
Add the credentials to your environment file (.env)
``` ```
NETBOX_DEFAULT_URL= NETBOX_DEFAULT_URL=
NETBOX_DEFAULT_KEY= NETBOX_DEFAULT_KEY=
``` ```
### MultiInstalls
If you have multiple Netbox sites, you can add this to your environment file (.env), in order to pick a different default site than the default.
```
NETBOX_CONNECTION=
```

160
README.md
View file

@ -5,82 +5,12 @@ NetBox is an open source web application designed to help manage and document co
- [Installation](INSTALL.md) - [Installation](INSTALL.md)
- [Usage](#usage) - [Usage](#usage)
- [Commands](#commands) - [Commands](#commands)
- [Authentication](#authentication)
- [MultiInstalls](multiinstalls)
- [Change log](CHANGELOG.md) - [Change log](CHANGELOG.md)
- [License](LICENSE.md) - [License](LICENSE.md)
-
### Usage ### Usage
#### Authentication [users]
It's possible to use a custom `netbox` authentication driver to login users in your application, by default the UserProfile will be cached for 60 minutes
```php
// config/auth.php
'providers' => [
'netbox' => [
'driver' => 'netbox'
],
]
// Auth::attempt
if(Auth::attempt(['username' => $username, 'password' => $password]))
{
dd(Auth::user(), Auth::id());
}
```
#### Multiple Installs [config]
If you want to work with more Netbox installs, you can define more netboxes in the `config/netbox.php` file
```php
// config/netbox.php
'panels' => [
'default' => [
'url' => env('NETBOX_DEFAULT_URL'),
'key' => env('NETBOX_DEFAULT_KEY'),
],
'chicago' => [
'url' => env('NETBOX_CHI_URL'),
'key' => env('NETBOX_CHI_KEY'),
],
],
```
#### Multiple Installs [normal usage]
To use another netbox than your default one, you can specify it with the panel-method
```php
// UsersController
public function getIndex()
{
$users = NetBox::panel('chicago')->users()->list([
'limit' => 20
]);
//
}
```
#### Multiple Installs [dependency injection]
```php
// Route
Route::get('/netbox/{netBox}/users', ['as' => 'netbox/users', 'uses' => 'UsersController@getIndex']);
Route::bind('netBox', function ($value, $route) {
app('NetBox')->panel($value);
return app('NetBox');
});
// UsersController
public function getIndex(NetBox $netBox)
{
$users = $netBox->users()->list([
'limit' => 20
]);
//
}
```
### Commands
#### Global #### Global
```php ```php
NetBox::status()->show(array $params) NetBox::status()->show(array $params)
@ -660,4 +590,88 @@ NetBox::virtualMachines()->delete(int $id, array $params)
NetBox::virtualMachines()->edit(int $id, array $params) NetBox::virtualMachines()->edit(int $id, array $params)
NetBox::virtualMachines()->show(int $id, array $params) NetBox::virtualMachines()->show(int $id, array $params)
``` ```
### Authentication
It's possible to use a custom `netbox` authentication driver to login users in your application,
#### Setup
```php
// config/auth.php
'providers' => [
'netbox' => [
'driver' => 'netbox'
],
]
// Auth::attempt
if(Auth::attempt(['username' => $username, 'password' => $password]))
{
dd(Auth::user(), Auth::id());
}
```
#### Caching
By default the UserProfile will be cached for 60 minutes, you can use the command below to clear it, it will refresh the next time it is needed.
```php
cache()->forget('netbox_user_id_' .$user_id);
```
### MultiInstalls
#### Configuration
If you want to work with more Netbox installs, you can define more instances in the `config/netbox.php` file
```php
// config/netbox.php
'sites' => [
'default' => [
'url' => env('NETBOX_DEFAULT_URL'),
'key' => env('NETBOX_DEFAULT_KEY'),
],
'chicago' => [
'url' => env('NETBOX_CHI_URL'),
'key' => env('NETBOX_CHI_KEY'),
],
],
```
#### Default site
If you have multiple Netbox sites, you can add this to your environment file (.env), in order to pick a different default site than the default.
```
NETBOX_CONNECTION=
```
#### Access
To use another netbox than your default one, you can specify it with the panel-method
```php
// UsersController
public function getIndex()
{
$users = NetBox::site('chicago')->users()->list([
'limit' => 20
]);
//
}
```
#### Dependency injection
```php
// Route
Route::get('/netbox/{netBox}/users', ['as' => 'netbox/users', 'uses' => 'UsersController@getIndex']);
Route::bind('netBox', function ($value, $route) {
app('NetBox')->site($value);
return app('NetBox');
});
// UsersController
public function getIndex(NetBox $netBox)
{
$users = $netBox->users()->list([
'limit' => 20
]);
//
}
```
- - - - - -

View file

@ -4,7 +4,7 @@ return [
'default' => env('NETBOX_CONNECTION', 'default'), 'default' => env('NETBOX_CONNECTION', 'default'),
'panels' => [ 'sites' => [
'default' => [ 'default' => [
'url' => env('NETBOX_DEFAULT_URL'), 'url' => env('NETBOX_DEFAULT_URL'),
'key' => env('NETBOX_DEFAULT_KEY'), 'key' => env('NETBOX_DEFAULT_KEY'),

View file

@ -4,6 +4,17 @@ namespace wickedsoft\NetBox\Api\Users;
class Users extends AbstractApi class Users extends AbstractApi
{ {
/**
* @param $params
* @return mixed
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function checkLogin($params)
{
return $this->get("/users/users/".$id."/", $params);
//return $this->post(array_merge(['controller' => 'debtor', 'action' => 'checkLogin'], $params));
}
/** /**
* @param $params * @param $params
* @return mixed * @return mixed

View file

@ -64,7 +64,7 @@ class Client
'tags' => 'Extras\Tags', 'tags' => 'Extras\Tags',
//ipam //ipam
'aggregates' => 'IPAM\Aggregates' 'aggregates' => 'IPAM\Aggregates',
'ipAddresses' => 'IPAM\IpAddresses', 'ipAddresses' => 'IPAM\IpAddresses',
'prefixes' => 'IPAM\Prefixes', 'prefixes' => 'IPAM\Prefixes',
'rirs' => 'IPAM\Rirs', 'rirs' => 'IPAM\Rirs',
@ -131,9 +131,7 @@ class Client
if (!isset($this->classes[$name])) { if (!isset($this->classes[$name])) {
throw new \InvalidArgumentException(sprintf('Undefined method called:"%s"', $name)); throw new \InvalidArgumentException(sprintf('Undefined method called:"%s"', $name));
} }
$class = '\\wickedsoft\\NetBox\\Api\\' . $this->classes[$name]; $class = '\\wickedsoft\\NetBox\\Api\\' . $this->classes[$name];
return new $class($this); return new $class($this);
} }
@ -145,9 +143,7 @@ class Client
if (!isset($this->httpClient)) { if (!isset($this->httpClient)) {
$this->httpClient = new HttpClient(); $this->httpClient = new HttpClient();
} }
$this->httpClient->setOptions($this->getOptions()); $this->httpClient->setOptions($this->getOptions());
return $this->httpClient; return $this->httpClient;
} }

View file

@ -11,7 +11,7 @@ class NetBox
protected $client; protected $client;
/** @var array */ /** @var array */
protected $panels = []; protected $sites = [];
/** /**
* NetBox constructor. * NetBox constructor.
@ -36,17 +36,17 @@ class NetBox
* @param null|string $name * @param null|string $name
* @return \wickedsoft\NetBox\Client * @return \wickedsoft\NetBox\Client
*/ */
public function panel($name = null) public function site($name = null)
{ {
$name = $name ?: $this->getDefaultPanel(); $name = $name ?: $this->getDefaultSite();
return $this->panels[$name] = $this->get($name); return $this->sites[$name] = $this->get($name);
} }
/** /**
* @return string * @return string
*/ */
public function getDefaultPanel() public function getDefaultSite()
{ {
return $this->app['config']['netbox.default']; return $this->app['config']['netbox.default'];
} }
@ -57,7 +57,7 @@ class NetBox
*/ */
protected function get($name) protected function get($name)
{ {
return $this->panels[$name] ?? $this->resolve($name); return $this->sites[$name] ?? $this->resolve($name);
} }
/** /**
@ -83,6 +83,6 @@ class NetBox
*/ */
protected function getConfig($name) protected function getConfig($name)
{ {
return $this->app['config']["netbox.panels.{$name}"]; return $this->app['config']["netbox.sites.{$name}"];
} }
} }

View file

@ -14,7 +14,6 @@ class ServiceProvider extends \Illuminate\Support\ServiceProvider
$this->publishes([ $this->publishes([
__DIR__ . '/../config/netbox.php' => config_path('netbox.php') __DIR__ . '/../config/netbox.php' => config_path('netbox.php')
], 'config'); ], 'config');
\Auth::provider('netbox', function ($app, array $config) { \Auth::provider('netbox', function ($app, array $config) {
return new \wickedsoft\NetBox\Providers\NetBoxProvider(); return new \wickedsoft\NetBox\Providers\NetBoxProvider();
}); });
@ -39,11 +38,10 @@ class ServiceProvider extends \Illuminate\Support\ServiceProvider
{ {
$this->app->singleton('wickedsoft\NetBox\NetBox', function ($app) { $this->app->singleton('wickedsoft\NetBox\NetBox', function ($app) {
$netBox = new NetBox($app); $netBox = new NetBox($app);
$netBox->panel($netBox->getDefaultPanel()); $netBox->site($netBox->getDefaultSite());
return $netBox; return $netBox;
}); });
$this->app->alias('wickedsoft\NetBox\NetBox', 'NetBox'); $this->app->alias('wickedsoft\NetBox\NetBox', 'NetBox');
} }
} }