API query and CI to build the docker demo image

Remove unused CI, removed some debugging for the demo
This commit is contained in:
Deon George 2020-08-31 21:41:45 +10:00
parent de4fa04d3b
commit 6620b9147e
10 changed files with 315 additions and 29 deletions

View File

@ -18,6 +18,10 @@ variables:
LDAP_ADMIN_PASSWORD: test
# LDAP_SEED_INTERNAL_SCHEMA_PATH: "${CI_PROJECT_DIR}/tests/server/openldap/schema"
stages:
- test
- deploy
# This folder is cached between builds
# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
cache:
@ -62,3 +66,35 @@ test:
# set it in your package.json script
# comment this out if you don't have a frontend test
# npm test
docker:
before_script:
- docker info
- docker version
- echo "$CI_JOB_TOKEN" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin
- if [ -n "$GITHUB_TOKEN" ]; then cat $GITHUB_TOKEN |base64 -d > auth.json; fi
variables:
VERSION: latest
CACHETAG: build-${VERSION}
DOCKER_HOST: tcp://docker:2375
stage: deploy
image: docker:latest
services:
- docker:dind
script:
- if [ -f init ]; then chmod 500 init; fi
- ([ -z "$REFRESH" ] && docker pull ${CI_REGISTRY_IMAGE}:${CACHETAG}) || echo "true"
- echo -n ${CI_COMMIT_SHORT_SHA} > VERSION
- docker build --cache-from ${CI_REGISTRY_IMAGE}:${CACHETAG} -t ${CI_REGISTRY_IMAGE}:${VERSION} -t ${CI_REGISTRY_IMAGE}:${CACHETAG} .
- docker push ${CI_REGISTRY_IMAGE}:${VERSION}
- docker push ${CI_REGISTRY_IMAGE}:${CACHETAG}
tags:
- docker
- x86_64
only:
- BRANCH-2.0

10
Dockerfile Normal file
View File

@ -0,0 +1,10 @@
FROM registry.leenooks.net/leenooks/php:7.4-fpm-mp
COPY . /var/www/html/
RUN mkdir /var/www/.composer \
&& ([ -r auth.json ] && mv auth.json /var/www/.composer/) || true \
&& touch .composer.refresh \
&& mv .env.example .env \
&& FORCE_PERMS=1 /sbin/init \
&& rm -rf /var/www/.composer/*

View File

@ -1,13 +1,87 @@
phpLDAPadmin
============
# phpLDAPadmin
phpLDAPadmin is a web based LDAP data management tool for system administrators. It is commonly known and referred by many as PLA.
phpLDAPadmin - Web based LDAP administration tool
A primary goal of PLA is to be as intuitive as possible - so it is certainly possible for end users to use it as well, for example, to manage their data in an LDAP server.
PLA is designed to be compliant with LDAP RFCs, enabling it to be used with any LDAP server.
If you come across an LDAP server, where PLA exhibits problems, please open an issue with full details of the problem so that we can have it fixed.
## History
Initially created in 2002 by David Smith, it was taken over by Deon George (aka leenooks) in 2005.
Since 2003 many things have changed - initial development was done in CVS and the project was hosted on Sourceforge.
In 2009, CVS was swapped out for GIT, and in around 2011 the project was moved to Github.
The PLA v1.2.x stream was created in July 2009.
## THANK YOU
Over the years, many, many, many people have supported PLA with either their time, their coding or with financial donations.
I have tried to send an email to acknowledge each contribution, and if you havent seen anything personally from me, I am sorry, but please know that I do appreciate all the help I get, in whatever form it is provided.
Again, Thank You.
## Future
Web development, tools, approaches and technology has come along way since 2009 and some talented folks have created some fantastic tools.
With that PLA is going under a major revamp in preparation for v2 and will aim to use those existing creations to help speed up the revamp effort.
Some of the creations planned to be used in v2 include:
* Laravel (https://laravel.com)
* adldap2/adldap2 (https://github.com/Adldap2/Adldap2)
* JQuery (https://jquery.com)
* FancyTree (https://github.com/mar10/fancytree)
* ArchitectUI (https://architectui.com)
PLA v1.2.x will be archived into [BRANCH-1.2](https://github.com/leenooks/phpLDAPadmin/tree/BRANCH-1.2), and `master` will be changed to reflect the new v2 work and effort.
If you plan to use PLA, and cannot use an installation from your OS package, please use [BRANCH-1.2](https://github.com/leenooks/phpLDAPadmin/tree/BRANCH-1.2) while progress is made in master for v2.
If you like the cutting edge, feel free to try out `master`, but expect problems, bugs and missing functionality.
If you have extended v2 and would like to contribute your extension, or if you find a way to fix something that is broken or missing please submit a pull request.
Alternatively, you can get take a peek at the work so far by using our docker container, which is built automatically after testing passes.
The [demo](http://demo.phpldapadmin.org) site, will also be running the same docker container. (See below for details.)
In summary, for the time being, expect `master` to be buggy and broken, and I'll update this readme as enhancements progress.
## Installation
[INSTALL](INSTALL.md)
### Installation on your server
#### Prerequisites
* A HTTP server (eg: Apache, Nginx)
* PHP (minimum version 7.2) https://www.php.net
* Composer https://getcomposer.org
* GIT
#### Installation
1. Checkout the code from github
```bash
git checkout https://github.com/leenooks/phpLDAPadmin.git
```
1. Install composer dependencies.
```bash
composer install
```
1. Edit your `.env` file as appropriate
copy `.env.example` to `.env` as a start.
1. Configure your webserver to have PLA's root in the `public` directory
### Using Docker
Instructions to come.
## Getting Help
The best place to get help with PLA (new and old) is on Stack Overflow (https://stackoverflow.com/tags/phpldapadmin/info)
## Found a bug?
If you have found a bug, and can provide detailed instructions so that it can be reproduced, please open an [issue](https://github.com/leenooks/phpLDAPadmin/issues) and provide those details.
Before opening a ticket, please check to see if it hasnt already been reported, and if it has, please provide any additional information that will help it be fixed.
*TIP*: Issues opened with reproducible details accompanied with a patch (or a pull request) to fix the problem will be looked at first.
## License
[LICENSE](LICENSE)

View File

@ -18,6 +18,7 @@ class Server
*/
public function getBaseDN(): ?Collection
{
//findBaseDn()?
// If the base is set in the configuration file, then just return that after validating it exists.
// @todo
if (false) {
@ -41,8 +42,6 @@ class Server
protected function getDNAttrValues(string $dn,array $attrs=['*','+'],int $deref=LDAP_DEREF_NEVER): ?Entry
{
try {
dump(config('ldap.connections.default.settings'));
return ($x=(new Adldap)
->addProvider(config('ldap.connections.default.settings'))
->search()
@ -54,4 +53,27 @@ class Server
dd(['e'=>$e]);
}
}
/**
* Query the server for a DN
*
* @param string $dn
* @return |null
*/
public function query(string $dn)
{
try {
return ($x=(new Adldap)
->addProvider(config('ldap.connections.default.settings'))
->search()
->setBaseDn($dn)
//->select($attrs)
->listing()
->get()) ? $x : NULL;
// @todo Tidy up this exception
} catch (\Exception $e) {
dd(['e'=>$e]);
}
}
}

View File

@ -3,7 +3,9 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Log;
use App\Classes\LDAP\Server;
@ -14,12 +16,14 @@ class APIController extends Controller
*
* @return array|null
*/
public function bases()
public function bases(): Collection
{
return (new Server())->getBaseDN()->transform(function($item) {
return (new Server())
->getBaseDN()
->transform(function($item) {
return [
'title'=>$item,
'item'=>base64_encode(Crypt::encryptString($item)),
'item'=>Crypt::encryptString($item),
//'folder'=>TRUE,
'lazy'=>TRUE,
//'key'=>0,
@ -27,4 +31,27 @@ class APIController extends Controller
];
});
}
public function query(Request $request): Collection
{
$levels = $request->query('depth',1);
$dn = Crypt::decryptString($request->query('key'));
Log::debug(sprintf('%s: Query [%s] - Levels [%d]',__METHOD__,$dn,$levels));
return (new Server())
->query($dn)
->transform(function($item) {
//dd($item->getDistinguishedName(),$item);
return [
'title'=>$item->getDistinguishedName(),
'item'=>Crypt::encryptString($item->getDistinguishedName()),
//'folder'=>TRUE,
'lazy'=>TRUE,
//'key'=>0,
//'autoexpand'=>TRUE,
];
});
Log::debug(sprintf('%s: Query [%s] - Levels [%d]: %s',__METHOD__,$dn,$levels,serialize($x)));
}
}

30
public/css/architect.min.css vendored Normal file

File diff suppressed because one or more lines are too long

BIN
public/img/logo-h.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

89
public/js/architect.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -16,9 +16,7 @@
<div class="row">
<div class="col-12 col-sm-4">
<h3 class="d-inline-block d-sm-none">phpLDAPadmin</h3>
<div class="col-12">
<img src="img/logo.png" class="product-image" alt="PLA Logo">
</div>
<img src="img/logo.png" class="logo-image col-12" alt="PLA Logo">
</div>
<div class="col-12 col-sm-8">
@ -64,12 +62,9 @@
$('#tree').fancytree({
clickFolderMode: 3,
extensions: ['glyph'],
aria: true, // Enable WAI-ARIA support.
autoActivate: false, // Automatically activate a node when it is focused (using keys).
autoCollapse: true, // Automatically collapse all siblings, when a node is expanded.
autoScroll: false, // Automatically scroll nodes into visible area.
autoScroll: true, // Automatically scroll nodes into visible area.
focusOnSelect: true, // Set focus when node is checked by a mouse click
keyboard: true, // Support keyboard navigation.
glyph: {
preset: 'awesome5',
map: {
@ -100,8 +95,8 @@
},
lazyLoad: function(event,data) {
data.result = {
url: "{{ url('api/branch') }}",
data: {key: data.node.data.item}
url: "{{ url('api/query') }}",
data: {key: data.node.data.item,depth: 1}
};
expandChildren(data.tree.rootNode);
@ -126,6 +121,7 @@
});
</script>
{{--
<style>
.fancytree-node {
display: flex !important;
@ -169,4 +165,5 @@
padding: 2px 0;
}
</style>
--}}
@append

View File

@ -19,6 +19,7 @@ Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
*/
Route::group(['middleware'=>'auth:api'], function() {
Route::group([],function() {
Route::get('/bases', 'APIController@bases');
Route::get('/query', 'APIController@query');
});