Skip to content

Commit f2a1f12

Browse files
authored
Merge pull request #173 from Marcelo-k-USP/issue_170
issue 170
2 parents 25de667 + fcb3335 commit f2a1f12

33 files changed

Lines changed: 4478 additions & 3746 deletions

README.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ Caso não queira inserir automaticamente a pessoa, esse recurso pode ser desabil
5656

5757
## Dependências php
5858

59-
version='7.4'
60-
sudo curl -sS https://getcomposer.org/download/1.10.26/composer.phar -o /usr/bin/composer # usa o composer v1.10 compatível com o PHP 7.4
61-
sudo chmod +x /usr/bin/composer # dá permissão de execução
59+
version='8.3'
6260

6361
## Instalação
6462

@@ -194,9 +192,9 @@ Ativar toda base de usuários:
194192

195193
php artisan tinker
196194

197-
$users = \Adldap\Laravel\Facades\Adldap::search()->users()->get();
195+
$users = LdapRecord\Models\ActiveDirectory\User::all();
198196
foreach($users as $user) {
199-
$user->setUserAccountControl(AccountControl::NORMAL_ACCOUNT);
197+
$user->accountControl()->setNormalAccount();
200198
$user->save();
201199
}
202200

app/Exceptions/Handler.php

Lines changed: 0 additions & 58 deletions
This file was deleted.

app/Http/Controllers/ConfigController.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ class ConfigController extends Controller
1010
{
1111
public function show()
1212
{
13+
// menu "Sincronizar ..."
14+
1315
$this->authorize('admin');
16+
\UspTheme::activeUrl('configs');
1417
$config = Config::all()->last();
1518
if ($config == null) {
1619
$config = new Config;
@@ -29,6 +32,8 @@ public function show()
2932
*/
3033
public function update(Request $request)
3134
{
35+
// menu "Sincronizar ..." -> botão "Enviar"
36+
3237
$this->authorize('admin');
3338
$request->validate([
3439
'codpes_sem_vinculo' => [new Numeros_USP($request->codpes_sem_vinculo)],

app/Http/Controllers/IndexController.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Illuminate\Http\Request;
66

7-
use Adldap\Laravel\Facades\Adldap;
87
use Carbon\Carbon;
98

109
class IndexController extends Controller

app/Http/Controllers/LdapUserController.php

Lines changed: 67 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?php
22
namespace App\Http\Controllers;
33

4-
use Adldap\Laravel\Facades\Adldap;
54
use App\Jobs\SincronizaReplicado;
65
use App\Ldap\Group as LdapGroup;
76
use App\Ldap\User as LdapUser;
@@ -13,6 +12,8 @@
1312
use Illuminate\Validation\Rule;
1413
use Uspdev\Replicado\Pessoa;
1514
use Uspdev\Utils\Generic as Utils;
15+
use LdapRecord\Models\ActiveDirectory\User;
16+
use LdapRecord\Models\ActiveDirectory\Group;
1617

1718
class LdapUserController extends Controller
1819
{
@@ -28,6 +29,8 @@ public function __construct()
2829
*/
2930
public function index(Request $request)
3031
{
32+
// menu "Usuários Ldap"
33+
3134
$this->authorize('gerente');
3235
\UspTheme::activeUrl('ldapusers');
3336

@@ -46,7 +49,7 @@ public function index(Request $request)
4649
$page = empty($request->page) ? 1 : $request->page;
4750

4851
// Busca
49-
$ldapusers = Adldap::search()->users();
52+
$ldapusers = User::query();
5053

5154
if (!empty($request->search) && isset($request->search)) {
5255
// buscar por username ou por nome
@@ -57,13 +60,17 @@ public function index(Request $request)
5760
if (!empty($request->grupos) && isset($request->grupos)) {
5861
if (count($request->grupos) > 1) {
5962
for ($i = 0; $i < count($request->grupos); $i++) {
60-
$group = Adldap::search()->groups()->find($request->grupos[$i]);
61-
$ldapusers = $ldapusers->orWhere('memberof', '=', $group->getDnBuilder()->get());
63+
$group = Group::findBy('cn', $request->grupos[$i]);
64+
if ($group) {
65+
$ldapusers = $ldapusers->orWhere('memberof', '=', $group->getDn());
66+
}
6267
}
6368
} else {
6469
//TODO: aqui nao acho que precise separado do FOR
65-
$group = Adldap::search()->groups()->find($request->grupos[0]);
66-
$ldapusers = $ldapusers->where('memberof', '=', $group->getDnBuilder()->get());
70+
$group = Group::findBy('cn', $request->grupos[0]);
71+
if ($group) {
72+
$ldapusers = $ldapusers->where('memberof', '=', $group->getDn());
73+
}
6774
}
6875
}
6976

@@ -79,15 +86,36 @@ public function index(Request $request)
7986
// $ldapusers = $ldapusers->whereBetween('accountexpires', [(new \DateTime('October 1st 2010'))->format('YmdHis.0\Z'), now()->format('YmdHis.0\Z')]);
8087

8188
// Ordenando
82-
$ldapusers = $ldapusers->sortBy('displayname', 'asc');
89+
$ldapusers = $ldapusers->orderBy('displayname', 'asc');
8390

8491
// Paginando
8592
// pagina começa no 0 mas vamos mostrar começando no 1
86-
$ldapusers = $ldapusers->paginate($perPage, $page - 1);
87-
$nav['pagCor'] = $ldapusers->getCurrentPage() + 1;
88-
$nav['perPag'] = $ldapusers->getPerPage();
89-
$nav['totPag'] = $ldapusers->getPages();
90-
$nav['offset'] = $ldapusers->getCurrentOffSet();
93+
94+
// processamento especial para contar mais de 1000 (a nova versão do LDAP trunca em 1000)
95+
$allUsers = collect();
96+
$ldapusers->chunk(1000, function ($chunk) use ($allUsers) {
97+
foreach ($chunk as $user) {
98+
$allUsers->push($user);
99+
}
100+
});
101+
$allUsers = $allUsers->sortBy(function ($user) {
102+
$nome = $user->getFirstAttribute('displayname');
103+
return empty($nome) ? ' ' : $nome;
104+
}, SORT_NATURAL | SORT_FLAG_CASE)->values();
105+
106+
// processamento especial para paginar manualmente
107+
$page = request()->get('page', 1); // Descobrimos a página atual baseada na URL (?page=X)
108+
$offset = ($page - 1) * $perPage; // Fatiamos a coleção para pegar apenas os itens da página atual... offset = onde começa o corte
109+
$itemsForCurrentPage = $allUsers->slice($offset, $perPage)->values();
110+
$ldapusers = new \Illuminate\Pagination\LengthAwarePaginator($itemsForCurrentPage, $allUsers->count(), $perPage, $page, ['path' => \Illuminate\Pagination\Paginator::resolveCurrentPath()]); // Criamos o Paginador Manualmente para o Blade entender
111+
112+
$nav = [
113+
'pagCor' => $ldapusers->currentPage(),
114+
'perPag' => $ldapusers->perPage(),
115+
'totPag' => $ldapusers->lastPage(),
116+
'total' => $ldapusers->total(), // É esse valor que vai aparecer como 1022
117+
'offset' => $ldapusers->firstItem() - 1,
118+
];
91119

92120
$maxLnk = 5; # Máximo de links
93121
$lnkLat = ceil($maxLnk / 2); # Cálculo dos links laterais
@@ -115,6 +143,8 @@ public function index(Request $request)
115143
*/
116144
public function create(Request $request)
117145
{
146+
// menu "Criar usuário"
147+
118148
$this->authorize('gerente');
119149
\UspTheme::activeUrl('ldapusers/create');
120150

@@ -129,6 +159,8 @@ public function create(Request $request)
129159
*/
130160
public function store(Request $request)
131161
{
162+
// menu "Criar usuário" -> botão "Enviar Dados"
163+
132164
$this->authorize('gerente');
133165

134166
if (isset($request->acao) && $request->acao == 'criar-por-codpes') {
@@ -139,7 +171,7 @@ public function store(Request $request)
139171
// verifincado se usuário já existe no ldap
140172
if ($user = LdapUser::obterUserPorCodpes($request->codpes)) {
141173
$request->session()->flash('alert-info', 'Usuário já existe!');
142-
return redirect("ldapusers/" . $user->GetaccountName());
174+
return redirect("ldapusers/" . $user->getFirstAttribute('samaccountname'));
143175
}
144176

145177
// verificando se o codpes possui vinculo ativo na unidade
@@ -152,11 +184,11 @@ public function store(Request $request)
152184

153185
// criando usuario a partir do codpes
154186
$user = LdapUser::criarOuAtualizarPorArray($pessoa[0]);
155-
$user->setPassword($password = Utils::senhaAleatoria());
187+
$user->unicodepwd = ($password = $password ?? Utils::senhaAleatoria());
156188
$user->save();
157189

158190
$request->session()->flash('alert-success', 'Usuário cadastrado com sucesso!');
159-
return redirect("ldapusers/" . $user->GetaccountName())->with('password', $password);
191+
return redirect("ldapusers/" . $user->getFirstAttribute('samaccountname'))->with('password', $password);
160192
}
161193

162194
// criando usuário com dados manuais
@@ -175,7 +207,7 @@ public function store(Request $request)
175207
$user = LdapUser::createOrUpdate($request->username, $attr, $grupos);
176208

177209
$request->session()->flash('alert-success', 'Usuário cadastrado com sucesso!');
178-
return redirect("ldapusers/" . $user->GetaccountName());
210+
return redirect("ldapusers/" . $user->getFirstAttribute('samaccountname'));
179211
}
180212

181213
/**
@@ -186,6 +218,8 @@ public function store(Request $request)
186218
*/
187219
public function show(Request $request, $username)
188220
{
221+
// menu "Usuários Ldap" -> algum usuário Ldap
222+
189223
$this->authorize('gerente');
190224
\UspTheme::activeUrl('ldapusers');
191225

@@ -200,6 +234,8 @@ public function show(Request $request, $username)
200234

201235
public function my(Request $request)
202236
{
237+
// menu "Minha Conta (trocar senha da rede)"
238+
203239
$this->authorize('user');
204240
\UspTheme::activeUrl('ldapusers/my');
205241

@@ -216,6 +252,8 @@ public function my(Request $request)
216252
*/
217253
protected function showCommon($user)
218254
{
255+
// menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)"
256+
219257
$attr = LdapUser::show($user);
220258
$vinculos = [];
221259
// o $codpesValido serve para informar se o codpes extraído veio do campo indicado no config
@@ -250,14 +288,16 @@ public function edit($id)
250288
*/
251289
public function update(Request $request, $username)
252290
{
291+
// menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> alguma opção do menu de expiração de conta, alguma opção do menu de habilitar/desabilitar, botão "Alterar"
292+
253293
$this->authorize('user');
254294

255295
// troca de senha
256296
if (!is_null($request->senha)) {
257297
$request->validate([
258298
// TODO: 04/07/2022 - ECAdev @alecosta: Parametrizar
259299
// 'senha' => ['required', 'confirmed', 'min:8'], # Sem complexidade
260-
'senha' => ['required', 'confirmed', 'min:8|max:20', 'regex:/[0-9]/', 'regex:/[A-Z]/', 'regex:/[!@#\$%\^&\*()_]/'], # Com complexidade
300+
'senha' => ['required', 'confirmed', 'min:8', 'max:20', 'regex:/[0-9]/', 'regex:/[A-Z]/', 'regex:/[!@#\$%\^&\*()_]/'], # Com complexidade
261301
'must_change_pwd' => ['nullable', 'in:1'],
262302
]);
263303

@@ -309,6 +349,8 @@ public function update(Request $request, $username)
309349
*/
310350
public function destroy(Request $request, $username)
311351
{
352+
// menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Excluir"
353+
312354
$this->authorize('gerente');
313355

314356
$attr = LdapUser::delete($username);
@@ -319,7 +361,10 @@ public function destroy(Request $request, $username)
319361

320362
public function syncReplicadoForm(Request $request)
321363
{
364+
// menu "Sincronizar ..." -> botão "Sincronizar com replicado"
365+
322366
$this->authorize('gerente');
367+
\UspTheme::activeUrl('configs');
323368

324369
$vinculos = Pessoa::tiposVinculos(config('web-ldap-admin.replicado_unidade'));
325370
foreach ($vinculos as &$vinculo) {
@@ -333,6 +378,8 @@ public function syncReplicadoForm(Request $request)
333378

334379
public function syncReplicado(Request $request)
335380
{
381+
// menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar"
382+
336383
$this->authorize('gerente');
337384
$this->validate($request, [
338385
'type' => 'required',
@@ -345,6 +392,8 @@ public function syncReplicado(Request $request)
345392

346393
public function addGroup(Request $request)
347394
{
395+
// menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Grupo" -> botão "Salvar"
396+
348397
$this->authorize('gerente');
349398
// Validações
350399
$request->validate([
@@ -355,7 +404,7 @@ public function addGroup(Request $request)
355404
$user = LdapUser::obterUserPorUsername($request->username);
356405
foreach ($grupos as $grupo) {
357406
$group = LdapGroup::createOrUpdate($grupo);
358-
$group->addMember($user);
407+
$group->members()->attach($user);
359408
}
360409
$request->session()->flash('alert-success', 'Grupo(s) adicionado(s) com sucesso.');
361410
return redirect("/ldapusers/$request->username");

0 commit comments

Comments
 (0)