diff --git a/app/Http/Controllers/ConfigController.php b/app/Http/Controllers/ConfigController.php
index 368d2c2..3d02848 100644
--- a/app/Http/Controllers/ConfigController.php
+++ b/app/Http/Controllers/ConfigController.php
@@ -8,44 +8,44 @@
class ConfigController extends Controller
{
- public function show()
- {
- // menu "Sincronizar ..."
+ public function show()
+ {
+ // menu "Sincronizar ..."
- $this->authorize('admin');
- \UspTheme::activeUrl('configs');
- $config = Config::all()->last();
- if ($config == null) {
- $config = new Config;
- $config->save();
+ $this->authorize('admin');
+ \UspTheme::activeUrl('configs');
+ $config = Config::all()->last();
+ if ($config == null) {
+ $config = new Config;
+ $config->save();
+ }
+ $codpes_sem_vinculo = $config->codpes_sem_vinculo;
+ return view('configs/edit', compact('codpes_sem_vinculo'));
}
- $codpes_sem_vinculo = $config->codpes_sem_vinculo;
- return view('configs/edit', compact('codpes_sem_vinculo'));
- }
- /**
- * Update the specified resource in storage.
- *
- * @param \Illuminate\Http\Request $request
- * @param \App\Config $config
- * @return \Illuminate\Http\Response
- */
- public function update(Request $request)
- {
- // menu "Sincronizar ..." -> botão "Enviar"
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \App\Config $config
+ * @return \Illuminate\Http\Response
+ */
+ public function update(Request $request)
+ {
+ // menu "Sincronizar ..." -> botão "Enviar"
- $this->authorize('admin');
- $request->validate([
- 'codpes_sem_vinculo' => [new Numeros_USP($request->codpes_sem_vinculo)],
- ]);
- $codpes_sem_vinculo = explode(',', $request->codpes_sem_vinculo);
- $codpes_sem_vinculo = array_map('trim', $codpes_sem_vinculo);
- $codpes_sem_vinculo = implode(',', $codpes_sem_vinculo);
+ $this->authorize('admin');
+ $request->validate([
+ 'codpes_sem_vinculo' => [new Numeros_USP($request->codpes_sem_vinculo)],
+ ]);
+ $codpes_sem_vinculo = explode(',', $request->codpes_sem_vinculo);
+ $codpes_sem_vinculo = array_map('trim', $codpes_sem_vinculo);
+ $codpes_sem_vinculo = implode(',', $codpes_sem_vinculo);
- $config = Config::all()->last();
- $config->codpes_sem_vinculo = $codpes_sem_vinculo;
- $request->session()->flash('alert-info', 'Números USP alterados com sucesso');
- $config->save();
- return redirect()->back();
- }
+ $config = Config::all()->last();
+ $config->codpes_sem_vinculo = $codpes_sem_vinculo;
+ $request->session()->flash('alert-info', 'Números USP alterados com sucesso');
+ $config->save();
+ return redirect()->back();
+ }
}
diff --git a/app/Http/Controllers/LdapUserController.php b/app/Http/Controllers/LdapUserController.php
index 4f57240..4a78b08 100644
--- a/app/Http/Controllers/LdapUserController.php
+++ b/app/Http/Controllers/LdapUserController.php
@@ -18,395 +18,395 @@
class LdapUserController extends Controller
{
- public function __construct()
- {
- $this->middleware('auth');
- }
-
- /**
- * Display a listing of the resource.
- *
- * @return \Illuminate\Http\Response
- */
- public function index(Request $request)
- {
- // menu "Usuários Ldap"
-
- $this->authorize('manager');
- \UspTheme::activeUrl('ldapusers');
-
- //vamos validar os campos??
- $request->validate([
- 'perPage' => 'nullable',
- 'page' => 'nullable',
- 'search' => 'nullable',
- 'grupos' => 'nullable',
- ]);
-
- // Registros por página
- $perPage = empty($request->perPage) ? config('web-ldap-admin.registrosPorPagina') : $request->perPage;
-
- // Verifica qual a página
- $page = empty($request->page) ? 1 : $request->page;
-
- // Busca
- $ldapusers = User::query();
-
- if (!empty($request->search) && isset($request->search)) {
- // buscar por username ou por nome
- $ldapusers = $ldapusers->orWhere('displayname', 'contains', $request->search)
- ->orWhere('samaccountname', 'contains', $request->search);
+ public function __construct()
+ {
+ $this->middleware('auth');
}
- if (!empty($request->grupos) && isset($request->grupos)) {
- if (count($request->grupos) > 1) {
- for ($i = 0; $i < count($request->grupos); $i++) {
- $group = Group::findBy('cn', $request->grupos[$i]);
- if ($group) {
- $ldapusers = $ldapusers->orWhere('memberof', '=', $group->getDn());
- }
+ /**
+ * Display a listing of the resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function index(Request $request)
+ {
+ // menu "Usuários Ldap"
+
+ $this->authorize('manager');
+ \UspTheme::activeUrl('ldapusers');
+
+ //vamos validar os campos??
+ $request->validate([
+ 'perPage' => 'nullable',
+ 'page' => 'nullable',
+ 'search' => 'nullable',
+ 'grupos' => 'nullable',
+ ]);
+
+ // Registros por página
+ $perPage = empty($request->perPage) ? config('web-ldap-admin.registrosPorPagina') : $request->perPage;
+
+ // Verifica qual a página
+ $page = empty($request->page) ? 1 : $request->page;
+
+ // Busca
+ $ldapusers = User::query();
+
+ if (!empty($request->search) && isset($request->search)) {
+ // buscar por username ou por nome
+ $ldapusers = $ldapusers->orWhere('displayname', 'contains', $request->search)
+ ->orWhere('samaccountname', 'contains', $request->search);
}
- } else {
- //TODO: aqui nao acho que precise separado do FOR
- $group = Group::findBy('cn', $request->grupos[0]);
- if ($group) {
- $ldapusers = $ldapusers->where('memberof', '=', $group->getDn());
+
+ if (!empty($request->grupos) && isset($request->grupos)) {
+ if (count($request->grupos) > 1) {
+ for ($i = 0; $i < count($request->grupos); $i++) {
+ $group = Group::findBy('cn', $request->grupos[$i]);
+ if ($group) {
+ $ldapusers = $ldapusers->orWhere('memberof', '=', $group->getDn());
+ }
+ }
+ } else {
+ //TODO: aqui nao acho que precise separado do FOR
+ $group = Group::findBy('cn', $request->grupos[0]);
+ if ($group) {
+ $ldapusers = $ldapusers->where('memberof', '=', $group->getDn());
+ }
+ }
}
- }
- }
- // oculta usuários default do sistema
- foreach (config('web-ldap-admin.ocultarUsuarios') as $usuario) {
- $ldapusers = $ldapusers->where('samaccountname', '!=', $usuario);
+ // oculta usuários default do sistema
+ foreach (config('web-ldap-admin.ocultarUsuarios') as $usuario) {
+ $ldapusers = $ldapusers->where('samaccountname', '!=', $usuario);
+ }
+
+ // mostra somente os usuários habilitados
+ // $ldapusers = $ldapusers->whereEnabled();
+
+ // tentativa de mostrar somente contas não expiradas
+ // $ldapusers = $ldapusers->whereBetween('accountexpires', [(new \DateTime('October 1st 2010'))->format('YmdHis.0\Z'), now()->format('YmdHis.0\Z')]);
+
+ // Ordenando
+ $ldapusers = $ldapusers->orderBy('displayname', 'asc');
+
+ // Paginando
+ // pagina começa no 0 mas vamos mostrar começando no 1
+
+ // processamento especial para contar mais de 1000 (a nova versão do LDAP trunca em 1000)
+ $allUsers = collect();
+ $ldapusers->chunk(1000, function ($chunk) use ($allUsers) {
+ foreach ($chunk as $user) {
+ $allUsers->push($user);
+ }
+ });
+ $allUsers = $allUsers->sortBy(function ($user) {
+ $nome = $user->getFirstAttribute('displayname');
+ return empty($nome) ? ' ' : $nome;
+ }, SORT_NATURAL | SORT_FLAG_CASE)->values();
+
+ // processamento especial para paginar manualmente
+ $page = request()->get('page', 1); // Descobrimos a página atual baseada na URL (?page=X)
+ $offset = ($page - 1) * $perPage; // Fatiamos a coleção para pegar apenas os itens da página atual... offset = onde começa o corte
+ $itemsForCurrentPage = $allUsers->slice($offset, $perPage)->values();
+ $ldapusers = new \Illuminate\Pagination\LengthAwarePaginator($itemsForCurrentPage, $allUsers->count(), $perPage, $page, ['path' => \Illuminate\Pagination\Paginator::resolveCurrentPath()]); // Criamos o Paginador Manualmente para o Blade entender
+
+ $nav = [
+ 'pagCor' => $ldapusers->currentPage(),
+ 'perPag' => $ldapusers->perPage(),
+ 'totPag' => $ldapusers->lastPage(),
+ 'total' => $ldapusers->total(), // É esse valor que vai aparecer como 1022
+ 'offset' => $ldapusers->firstItem() - 1,
+ ];
+
+ $maxLnk = 5; # Máximo de links
+ $lnkLat = ceil($maxLnk / 2); # Cálculo dos links laterais
+ $nav['pagIni'] = $nav['pagCor'] - $lnkLat; # Início dos links (esquerda)
+ $nav['pagFin'] = $nav['pagCor'] + $lnkLat; # Fim dos links (direita)
+
+ $searchGrupos = '';
+ $gruposUrl = '';
+ if (!empty($request->grupos) && isset($request->grupos)) {
+ $searchGrupos = implode(', ', $request->grupos);
+ foreach ($request->grupos as $grupo) {
+ $gruposUrl .= "&grupos[]=$grupo";
+ }
+ }
+
+ $grupos = LdapGroup::listaGrupos();
+
+ return view('ldapusers.index', compact('ldapusers', 'grupos', 'request', 'nav', 'gruposUrl', 'searchGrupos', 'perPage'));
}
- // mostra somente os usuários habilitados
- // $ldapusers = $ldapusers->whereEnabled();
-
- // tentativa de mostrar somente contas não expiradas
- // $ldapusers = $ldapusers->whereBetween('accountexpires', [(new \DateTime('October 1st 2010'))->format('YmdHis.0\Z'), now()->format('YmdHis.0\Z')]);
-
- // Ordenando
- $ldapusers = $ldapusers->orderBy('displayname', 'asc');
-
- // Paginando
- // pagina começa no 0 mas vamos mostrar começando no 1
-
- // processamento especial para contar mais de 1000 (a nova versão do LDAP trunca em 1000)
- $allUsers = collect();
- $ldapusers->chunk(1000, function ($chunk) use ($allUsers) {
- foreach ($chunk as $user) {
- $allUsers->push($user);
- }
- });
- $allUsers = $allUsers->sortBy(function ($user) {
- $nome = $user->getFirstAttribute('displayname');
- return empty($nome) ? ' ' : $nome;
- }, SORT_NATURAL | SORT_FLAG_CASE)->values();
-
- // processamento especial para paginar manualmente
- $page = request()->get('page', 1); // Descobrimos a página atual baseada na URL (?page=X)
- $offset = ($page - 1) * $perPage; // Fatiamos a coleção para pegar apenas os itens da página atual... offset = onde começa o corte
- $itemsForCurrentPage = $allUsers->slice($offset, $perPage)->values();
- $ldapusers = new \Illuminate\Pagination\LengthAwarePaginator($itemsForCurrentPage, $allUsers->count(), $perPage, $page, ['path' => \Illuminate\Pagination\Paginator::resolveCurrentPath()]); // Criamos o Paginador Manualmente para o Blade entender
-
- $nav = [
- 'pagCor' => $ldapusers->currentPage(),
- 'perPag' => $ldapusers->perPage(),
- 'totPag' => $ldapusers->lastPage(),
- 'total' => $ldapusers->total(), // É esse valor que vai aparecer como 1022
- 'offset' => $ldapusers->firstItem() - 1,
- ];
-
- $maxLnk = 5; # Máximo de links
- $lnkLat = ceil($maxLnk / 2); # Cálculo dos links laterais
- $nav['pagIni'] = $nav['pagCor'] - $lnkLat; # Início dos links (esquerda)
- $nav['pagFin'] = $nav['pagCor'] + $lnkLat; # Fim dos links (direita)
-
- $searchGrupos = '';
- $gruposUrl = '';
- if (!empty($request->grupos) && isset($request->grupos)) {
- $searchGrupos = implode(', ', $request->grupos);
- foreach ($request->grupos as $grupo) {
- $gruposUrl .= "&grupos[]=$grupo";
- }
+ /**
+ * Show the form for creating a new resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function create(Request $request)
+ {
+ // menu "Criar usuário"
+
+ $this->authorize('manager');
+ \UspTheme::activeUrl('ldapusers/create');
+
+ return view('ldapusers.create');
}
- $grupos = LdapGroup::listaGrupos();
-
- return view('ldapusers.index', compact('ldapusers', 'grupos', 'request', 'nav', 'gruposUrl', 'searchGrupos', 'perPage'));
- }
-
- /**
- * Show the form for creating a new resource.
- *
- * @return \Illuminate\Http\Response
- */
- public function create(Request $request)
- {
- // menu "Criar usuário"
-
- $this->authorize('manager');
- \UspTheme::activeUrl('ldapusers/create');
-
- return view('ldapusers.create');
- }
-
- /**
- * Store a newly created resource in storage.
- *
- * @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
- */
- public function store(Request $request)
- {
- // menu "Criar usuário" -> botão "Enviar Dados"
-
- $this->authorize('manager');
-
- if (isset($request->acao) && $request->acao == 'criar-por-codpes') {
- $request->validate([
- 'codpes' => 'required|integer',
- ]);
-
- // verifincado se usuário já existe no ldap
- if ($user = LdapUser::obterUserPorCodpes($request->codpes)) {
- $request->session()->flash('alert-info', 'Usuário já existe!');
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return \Illuminate\Http\Response
+ */
+ public function store(Request $request)
+ {
+ // menu "Criar usuário" -> botão "Enviar Dados"
+
+ $this->authorize('manager');
+
+ if (isset($request->acao) && $request->acao == 'criar-por-codpes') {
+ $request->validate([
+ 'codpes' => 'required|integer',
+ ]);
+
+ // verifincado se usuário já existe no ldap
+ if ($user = LdapUser::obterUserPorCodpes($request->codpes)) {
+ $request->session()->flash('alert-info', 'Usuário já existe!');
+ return redirect("ldapusers/" . $user->getFirstAttribute('samaccountname'));
+ }
+
+ // verificando se o codpes possui vinculo ativo na unidade
+ $pessoa = Pessoa::listarVinculosAtivos($request->codpes);
+ if (!$pessoa) {
+ $request->session()->flash('alert-warning', 'Número USP ' . $request->codpes . ' não encontrado!');
+ return back();
+ }
+ // dd($pessoa);
+
+ // criando usuario a partir do codpes
+ $user = LdapUser::criarOuAtualizarPorArray($pessoa[0]);
+ $user->unicodepwd = ($password = $password ?? Utils::senhaAleatoria());
+ $user->save();
+
+ $request->session()->flash('alert-success', 'Usuário cadastrado com sucesso!');
+ return redirect("ldapusers/" . $user->getFirstAttribute('samaccountname'))->with('password', $password);
+ }
+
+ // criando usuário com dados manuais
+ $request->validate([
+ 'username' => ['required', 'regex:/^[a-zA-Z0-9]*$/i', new LdapUsernameRule],
+ 'nome' => ['required'],
+ 'email' => ['required', 'email', new LdapEmailRule],
+ ]);
+
+ $grupos = array_merge($request->grupos, ['NAOREPLICADO']);
+ $attr = [
+ 'nome' => $request->nome,
+ 'email' => $request->email,
+ 'setor' => 'NAOREPLICADO',
+ ];
+ $user = LdapUser::createOrUpdate($request->username, $attr, $grupos);
+
+ $request->session()->flash('alert-success', 'Usuário cadastrado com sucesso!');
return redirect("ldapusers/" . $user->getFirstAttribute('samaccountname'));
- }
-
- // verificando se o codpes possui vinculo ativo na unidade
- $pessoa = Pessoa::listarVinculosAtivos($request->codpes);
- if (!$pessoa) {
- $request->session()->flash('alert-warning', 'Número USP ' . $request->codpes . ' não encontrado!');
- return back();
- }
- // dd($pessoa);
-
- // criando usuario a partir do codpes
- $user = LdapUser::criarOuAtualizarPorArray($pessoa[0]);
- $user->unicodepwd = ($password = $password ?? Utils::senhaAleatoria());
- $user->save();
-
- $request->session()->flash('alert-success', 'Usuário cadastrado com sucesso!');
- return redirect("ldapusers/" . $user->getFirstAttribute('samaccountname'))->with('password', $password);
}
- // criando usuário com dados manuais
- $request->validate([
- 'username' => ['required', 'regex:/^[a-zA-Z0-9]*$/i', new LdapUsernameRule],
- 'nome' => ['required'],
- 'email' => ['required', 'email', new LdapEmailRule],
- ]);
-
- $grupos = array_merge($request->grupos, ['NAOREPLICADO']);
- $attr = [
- 'nome' => $request->nome,
- 'email' => $request->email,
- 'setor' => 'NAOREPLICADO',
- ];
- $user = LdapUser::createOrUpdate($request->username, $attr, $grupos);
-
- $request->session()->flash('alert-success', 'Usuário cadastrado com sucesso!');
- return redirect("ldapusers/" . $user->getFirstAttribute('samaccountname'));
- }
-
- /**
- * Display the specified resource.
- *
- * @param int $id
- * @return \Illuminate\Http\Response
- */
- public function show(Request $request, $username)
- {
- // menu "Usuários Ldap" -> algum usuário Ldap
-
- $this->authorize('manager');
- \UspTheme::activeUrl('ldapusers');
-
- $user = LdapUser::obterUserPorUsername($username);
- if (!$user) {
- $request->session()->flash('alert-danger', "A conta $username não existe no ldap.");
- return view('ldapusers.show-no-user');
- }
+ /**
+ * Display the specified resource.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function show(Request $request, $username)
+ {
+ // menu "Usuários Ldap" -> algum usuário Ldap
+
+ $this->authorize('manager');
+ \UspTheme::activeUrl('ldapusers');
+
+ $user = LdapUser::obterUserPorUsername($username);
+ if (!$user) {
+ $request->session()->flash('alert-danger', "A conta $username não existe no ldap.");
+ return view('ldapusers.show-no-user');
+ }
- return SELF::showCommon($user);
- }
+ return SELF::showCommon($user);
+ }
- public function my(Request $request)
- {
- // menu "Minha Conta (trocar senha da rede)"
+ public function my(Request $request)
+ {
+ // menu "Minha Conta (trocar senha da rede)"
- $this->authorize('user');
- \UspTheme::activeUrl('ldapusers/my');
+ $this->authorize('user');
+ \UspTheme::activeUrl('ldapusers/my');
- $user = LdapUser::obterUserPorCodpes(Auth::user()->codpes);
- if (!$user) {
- $request->session()->flash('alert-danger', 'Sua conta não existe no ldap. ');
- return view('ldapusers.show-no-user');
+ $user = LdapUser::obterUserPorCodpes(Auth::user()->codpes);
+ if (!$user) {
+ $request->session()->flash('alert-danger', 'Sua conta não existe no ldap. ');
+ return view('ldapusers.show-no-user');
+ }
+ return SELF::showCommon($user);
}
- return SELF::showCommon($user);
- }
-
- /**
- * parte comum do para show e my
- */
- protected function showCommon($user)
- {
- // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)"
-
- $attr = LdapUser::show($user);
- $vinculos = [];
- // o $codpesValido serve para informar se o codpes extraído veio do campo indicado no config
- list($codpes, $codpesValido) = LdapUser::obterCodpes($user, true);
-
- if ($codpes) {
- $vinculos = Replicado::listarVinculosEstendidos($codpes);
- $foto = \Uspdev\Wsfoto::obter($codpes);
- } else {
- $foto = '';
+
+ /**
+ * parte comum do para show e my
+ */
+ protected function showCommon($user)
+ {
+ // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)"
+
+ $attr = LdapUser::show($user);
+ $vinculos = [];
+ // o $codpesValido serve para informar se o codpes extraído veio do campo indicado no config
+ list($codpes, $codpesValido) = LdapUser::obterCodpes($user, true);
+
+ if ($codpes) {
+ $vinculos = Replicado::listarVinculosEstendidos($codpes);
+ $foto = \Uspdev\Wsfoto::obter($codpes);
+ } else {
+ $foto = '';
+ }
+
+ return view('ldapusers.show', compact('attr', 'user', 'vinculos', 'codpesValido', 'foto'));
}
- return view('ldapusers.show', compact('attr', 'user', 'vinculos', 'codpesValido', 'foto'));
- }
-
- /**
- * Show the form for editing the specified resource.
- *
- * @param int $id
- * @return \Illuminate\Http\Response
- */
- public function edit($id) {}
-
- /**
- * Update the specified resource in storage.
- *
- * @param \Illuminate\Http\Request $request
- * @param int $id
- * @return \Illuminate\Http\Response
- */
- public function update(Request $request, $username)
- {
- // 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"
-
- $this->authorize('user');
-
- // troca de senha
- if (!is_null($request->senha)) {
- $request->validate([
- // TODO: 04/07/2022 - ECAdev @alecosta: Parametrizar
- // 'senha' => ['required', 'confirmed', 'min:8'], # Sem complexidade
- 'senha' => ['required', 'confirmed', 'min:8', 'max:20', 'regex:/[0-9]/', 'regex:/[A-Z]/', 'regex:/[!@#\$%\^&\*()_]/'], # Com complexidade
- 'must_change_pwd' => ['nullable', 'in:1'],
- ]);
-
- if (LdapUser::changePassword($username, $request->senha, $request->must_change_pwd)) {
- $request->session()->flash('alert-success', 'Senha alterada com sucesso!');
- } else {
- $request->session()->flash(
- 'alert-danger',
- 'Não foi possível alterar a senha da sua conta! Consulte a política de senha de seu servidor.'
- );
- }
-
- return redirect()->back();
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function edit($id) {}
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function update(Request $request, $username)
+ {
+ // 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"
+
+ $this->authorize('user');
+
+ // troca de senha
+ if (!is_null($request->senha)) {
+ $request->validate([
+ // TODO: 04/07/2022 - ECAdev @alecosta: Parametrizar
+ // 'senha' => ['required', 'confirmed', 'min:8'], # Sem complexidade
+ 'senha' => ['required', 'confirmed', 'min:8', 'max:20', 'regex:/[0-9]/', 'regex:/[A-Z]/', 'regex:/[!@#\$%\^&\*()_]/'], # Com complexidade
+ 'must_change_pwd' => ['nullable', 'in:1'],
+ ]);
+
+ if (LdapUser::changePassword($username, $request->senha, $request->must_change_pwd)) {
+ $request->session()->flash('alert-success', 'Senha alterada com sucesso!');
+ } else {
+ $request->session()->flash(
+ 'alert-danger',
+ 'Não foi possível alterar a senha da sua conta! Consulte a política de senha de seu servidor.'
+ );
+ }
+
+ return redirect()->back();
+ }
+
+ $this->authorize('manager');
+ // atualiza status
+ if (!is_null($request->status)) {
+
+ if ($request->status == 'disable') {
+ LdapUser::disable($username);
+ $request->session()->flash('alert-success', "Usuário $username desabilitado!");
+ return redirect()->back();
+ }
+
+ if ($request->status == 'enable') {
+ LdapUser::enable($username);
+ $request->session()->flash('alert-success', "Usuário $username habilitado!");
+ return redirect()->back();
+ }
+ }
+
+ // atualiza data de expiração
+ if (!is_null($request->expiry)) {
+ $request->validate([
+ 'expiry' => ['required', Rule::in([7, 30, 365, 0, -1])],
+ ]);
+
+ LdapUser::expirarSenha($username, $request->expiry);
+ $request->session()->flash('alert-success', "Usuário $username: alterado expiração da senha!");
+ return redirect()->back();
+ }
}
- $this->authorize('manager');
- // atualiza status
- if (!is_null($request->status)) {
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function destroy(Request $request, $username)
+ {
+ // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Excluir"
- if ($request->status == 'disable') {
- LdapUser::disable($username);
- $request->session()->flash('alert-success', "Usuário $username desabilitado!");
- return redirect()->back();
- }
+ $this->authorize('manager');
- if ($request->status == 'enable') {
- LdapUser::enable($username);
- $request->session()->flash('alert-success', "Usuário $username habilitado!");
+ $attr = LdapUser::delete($username);
+
+ $request->session()->flash('alert-danger', 'Usuário(a) ' . $username . ' deletado');
return redirect()->back();
- }
}
- // atualiza data de expiração
- if (!is_null($request->expiry)) {
- $request->validate([
- 'expiry' => ['required', Rule::in([7, 30, 365, 0, -1])],
- ]);
+ public function syncReplicadoForm(Request $request)
+ {
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado"
+
+ $this->authorize('manager');
+ \UspTheme::activeUrl('configs');
+
+ $vinculos = Pessoa::listarTiposVinculoExtenso();
+ foreach ($vinculos as &$vinculo) {
+ $vinculo['countReplicado'] = Pessoa::ativosVinculo($vinculo['tipvinext'], config('web-ldap-admin.replicado_unidade'), 1)[0]['total'];
+ $vinculo['countAD'] = count(LdapUser::getUsersGroup($vinculo['tipvinext']));
+ $vinculo['style'] = ($vinculo['countAD'] < $vinculo['countReplicado']) ? 'text-danger' : '';
+ }
- LdapUser::expirarSenha($username, $request->expiry);
- $request->session()->flash('alert-success', "Usuário $username: alterado expiração da senha!");
- return redirect()->back();
+ return view('ldapusers.sync', compact('vinculos'));
}
- }
-
- /**
- * Remove the specified resource from storage.
- *
- * @param int $id
- * @return \Illuminate\Http\Response
- */
- public function destroy(Request $request, $username)
- {
- // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Excluir"
-
- $this->authorize('manager');
-
- $attr = LdapUser::delete($username);
-
- $request->session()->flash('alert-danger', 'Usuário(a) ' . $username . ' deletado');
- return redirect()->back();
- }
-
- public function syncReplicadoForm(Request $request)
- {
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado"
-
- $this->authorize('manager');
- \UspTheme::activeUrl('configs');
-
- $vinculos = Pessoa::tiposVinculos(config('web-ldap-admin.replicado_unidade'));
- foreach ($vinculos as &$vinculo) {
- $vinculo['countReplicado'] = Pessoa::ativosVinculo($vinculo['tipvinext'], config('web-ldap-admin.replicado_unidade'), 1)[0]['total'];
- $vinculo['countAD'] = count(LdapUser::getUsersGroup($vinculo['tipvinext']));
- $vinculo['style'] = ($vinculo['countAD'] < $vinculo['countReplicado']) ? 'text-danger' : '';
+
+ public function syncReplicado(Request $request)
+ {
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar"
+
+ $this->authorize('manager');
+ $this->validate($request, [
+ 'type' => 'required',
+ ]);
+
+ SincronizaReplicado::dispatch($request->type);
+ $request->session()->flash('alert-success', 'Sincronização em andamento');
+ return redirect('/ldapusers');
}
- return view('ldapusers.sync', compact('vinculos'));
- }
-
- public function syncReplicado(Request $request)
- {
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar"
-
- $this->authorize('manager');
- $this->validate($request, [
- 'type' => 'required',
- ]);
-
- SincronizaReplicado::dispatch($request->type);
- $request->session()->flash('alert-success', 'Sincronização em andamento');
- return redirect('/ldapusers');
- }
-
- public function addGroup(Request $request)
- {
- // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Grupo" -> botão "Salvar"
-
- $this->authorize('manager');
- // Validações
- $request->validate([
- 'username' => ['required'],
- 'grupos' => ['required'],
- ]);
- $grupos = $request->grupos;
- $user = LdapUser::obterUserPorUsername($request->username);
- foreach ($grupos as $grupo) {
- $group = LdapGroup::createOrUpdate($grupo);
- $group->members()->attach($user);
+ public function addGroup(Request $request)
+ {
+ // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Grupo" -> botão "Salvar"
+
+ $this->authorize('manager');
+ // Validações
+ $request->validate([
+ 'username' => ['required'],
+ 'grupos' => ['required'],
+ ]);
+ $grupos = $request->grupos;
+ $user = LdapUser::obterUserPorUsername($request->username);
+ foreach ($grupos as $grupo) {
+ $group = LdapGroup::createOrUpdate($grupo);
+ $group->members()->attach($user);
+ }
+ $request->session()->flash('alert-success', 'Grupo(s) adicionado(s) com sucesso.');
+ return redirect("/ldapusers/$request->username");
}
- $request->session()->flash('alert-success', 'Grupo(s) adicionado(s) com sucesso.');
- return redirect("/ldapusers/$request->username");
- }
}
diff --git a/app/Jobs/SincronizaReplicado.php b/app/Jobs/SincronizaReplicado.php
index 1c1d343..a1c0b42 100644
--- a/app/Jobs/SincronizaReplicado.php
+++ b/app/Jobs/SincronizaReplicado.php
@@ -37,9 +37,9 @@ public function __construct(array $type)
public function handle()
{
// menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar"
-
+
foreach ($this->type as $type) {
- foreach (Pessoa::tiposVinculos($this->unidade) as $vinculo) {
+ foreach (Pessoa::listarTiposVinculoExtenso() as $vinculo) {
if ($type == $vinculo['tipvinext']) {
$this->sync(Pessoa::ativosVinculo($vinculo['tipvinext'], $this->unidade));
}
@@ -50,7 +50,7 @@ public function handle()
public function sync($pessoas)
{
// menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar"
-
+
if ($pessoas) {
// No .env foi configurado para desativar os desligados?
if (config('web-ldap-admin.desativarDesligados') == true) {
diff --git a/app/Ldap/User.php b/app/Ldap/User.php
index 272da1e..c423ebf 100644
--- a/app/Ldap/User.php
+++ b/app/Ldap/User.php
@@ -8,6 +8,7 @@
use Uspdev\Replicado\Graduacao;
use Uspdev\Replicado\Estrutura;
use Uspdev\Replicado\Pessoa;
+use App\Replicado\Pessoa as LdapPessoa;
use Uspdev\Utils\Generic as Utils;
use LdapRecord\Models\ActiveDirectory\Container;
@@ -19,570 +20,570 @@
class User
{
- /**
- * Cria ou atualiza os dados do usuário ldap
- *
- * Este método está com mais comentários no código pois em geral
- * serve de entrada para novos desenvolvedores.
- *
- * Estrutura do array attr:
- * $attr['nome'] : Nome completo
- * $attr['email'] : Email
- * $attr['setor'] : Departamento
- * $attr['descricao'] : Descricao
- **/
- public static function createOrUpdate(string $username, array $attr, array $groups = [], $password = null)
- {
- // invocado por:
- // no login (LoginListener::handle -> User::criarOuAtualizarPorArray)
- // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store)
- // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::criarOuAtualizarPorArray)
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::criarOuAtualizarPorArray)
-
- // vamos ver se o usuário já existe
- $user = SELF::obterUserPorUsername($username);
-
- # Novo usuário
- if (is_null($user) or $user == false) {
- $user = new LdapUser();
-
- // define DN para esse user
- $baseDn = $user->getConnection()->getConfiguration()->get('base_dn');
- $user->setDn("CN={$username},CN=Users,{$baseDn}");
-
- // se não for fornecido senha vamos gerar aleatório forte
- $user->unicodepwd = $password ?? Utils::senhaAleatoria();
-
- // Trocar a senha no próximo logon
- if (config('web-ldap-admin.obrigaTrocarSenhaNoWindows')) {
- $user->pwdlastset = 0;
- }
-
- // Enable the new user (using user account control).
- $user->useraccountcontrol = AccountControl::NORMAL_ACCOUNT;
-
- // vamos expirar senha conforme config
- $user->accountExpires = SELF::getExpiryDays();
- }
+ /**
+ * Cria ou atualiza os dados do usuário ldap
+ *
+ * Este método está com mais comentários no código pois em geral
+ * serve de entrada para novos desenvolvedores.
+ *
+ * Estrutura do array attr:
+ * $attr['nome'] : Nome completo
+ * $attr['email'] : Email
+ * $attr['setor'] : Departamento
+ * $attr['descricao'] : Descricao
+ **/
+ public static function createOrUpdate(string $username, array $attr, array $groups = [], $password = null)
+ {
+ // invocado por:
+ // no login (LoginListener::handle -> User::criarOuAtualizarPorArray)
+ // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store)
+ // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::criarOuAtualizarPorArray)
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::criarOuAtualizarPorArray)
+
+ // vamos ver se o usuário já existe
+ $user = SELF::obterUserPorUsername($username);
+
+ # Novo usuário
+ if (is_null($user) or $user == false) {
+ $user = new LdapUser();
+
+ // define DN para esse user
+ $baseDn = $user->getConnection()->getConfiguration()->get('base_dn');
+ $user->setDn("CN={$username},CN=Users,{$baseDn}");
+
+ // se não for fornecido senha vamos gerar aleatório forte
+ $user->unicodepwd = $password ?? Utils::senhaAleatoria();
+
+ // Trocar a senha no próximo logon
+ if (config('web-ldap-admin.obrigaTrocarSenhaNoWindows')) {
+ $user->pwdlastset = 0;
+ }
- // login no windows
- $user->samaccountname = $username;
- // nome de exibição
- $user->displayname = $attr['nome'];
-
- // atribuindo nome e sobrenome
- $nome_array = explode(' ', $attr['nome']);
- if (count($nome_array) > 1) {
- $user->givenname = trim($nome_array[0]);
- unset($nome_array[0]);
- $user->sn = implode(' ', $nome_array);
- } else {
- $user->givenname = trim($nome_array[0]);
- }
+ // Enable the new user (using user account control).
+ $user->useraccountcontrol = AccountControl::NORMAL_ACCOUNT;
- if (!empty($attr['email'])) {
- $user->mail = $attr['email'];
- }
+ // vamos expirar senha conforme config
+ $user->accountExpires = SELF::getExpiryDays();
+ }
- // caso o codpes venha no employeenumber
- if (!empty($attr['employeeNumber'])) {
- $user->employeeNumber = $attr['employeeNumber'];
- }
+ // login no windows
+ $user->samaccountname = $username;
+ // nome de exibição
+ $user->displayname = $attr['nome'];
+
+ // atribuindo nome e sobrenome
+ $nome_array = explode(' ', $attr['nome']);
+ if (count($nome_array) > 1) {
+ $user->givenname = trim($nome_array[0]);
+ unset($nome_array[0]);
+ $user->sn = implode(' ', $nome_array);
+ } else {
+ $user->givenname = trim($nome_array[0]);
+ }
- // Departamento
- if (!empty($attr['setor'])) {
- $user->department = $attr['setor'];
- }
+ if (!empty($attr['email'])) {
+ $user->mail = $attr['email'];
+ }
- // Descrição, informa se a conta foi criada a partir da sincronização
- if (!empty($attr['descricao'])) {
- $user->description = $attr['descricao'];
- }
+ // caso o codpes venha no employeenumber
+ if (!empty($attr['employeeNumber'])) {
+ $user->employeeNumber = $attr['employeeNumber'];
+ }
- // Atributos para Linux
- $username_integer = (int) $username;
- if (config('web-ldap-admin.usarAtributosLinux') && $username_integer != 0) {
+ // Departamento
+ if (!empty($attr['setor'])) {
+ $user->department = $attr['setor'];
+ }
- $user->uid = config('web-ldap-admin.prefixo_linux') . $username;
- $user->uidNumber = $username;
- $user->gidNumber = config('web-ldap-admin.gid_linux');
- $user->loginShell = '/bin/bash';
- $user->userPrincipalName = $username . '@' . config('web-ldap-admin.ldap_domain');
- $user->unixHomeDirectory = '/home/' . config('web-ldap-admin.prefixo_linux') . $username;
- }
+ // Descrição, informa se a conta foi criada a partir da sincronização
+ if (!empty($attr['descricao'])) {
+ $user->description = $attr['descricao'];
+ }
- $user->save();
+ // Atributos para Linux
+ $username_integer = (int) $username;
+ if (config('web-ldap-admin.usarAtributosLinux') && $username_integer != 0) {
- $user->department = $attr['setor'];
+ $user->uid = config('web-ldap-admin.prefixo_linux') . $username;
+ $user->uidNumber = $username;
+ $user->gidNumber = config('web-ldap-admin.gid_linux');
+ $user->loginShell = '/bin/bash';
+ $user->userPrincipalName = $username . '@' . config('web-ldap-admin.ldap_domain');
+ $user->unixHomeDirectory = '/home/' . config('web-ldap-admin.prefixo_linux') . $username;
+ }
- // Adiciona a um ou mais grupo
- LdapGroup::addMember($user, $groups);
+ $user->save();
- // Busca a OU padrão informada no .env
- // Se vazio, não é necessário alterar nada, pois o default é a raiz (Thiago)
- if (config('web-ldap-admin.ouDefault') != '') {
- $ou = OrganizationalUnit::findBy('ou', config('web-ldap-admin.ouDefault'));
+ $user->department = $attr['setor'];
- // Move o usuário para a OU padrão somente se ela existir,
- // do contrário deixa o usuário na raiz
- $user->move($ou);
- }
+ // Adiciona a um ou mais grupo
+ LdapGroup::addMember($user, $groups);
+ // Busca a OU padrão informada no .env
+ // Se vazio, não é necessário alterar nada, pois o default é a raiz (Thiago)
+ if (config('web-ldap-admin.ouDefault') != '') {
+ $ou = OrganizationalUnit::findBy('ou', config('web-ldap-admin.ouDefault'));
+ // Move o usuário para a OU padrão somente se ela existir,
+ // do contrário deixa o usuário na raiz
+ $user->move($ou);
+ }
- return $user;
- }
- /**
- * Retorna o número de dias para expirar a conta com base no config
- */
- public static function getExpiryDays()
- {
- // invocado por:
- // no login (LoginListener::handle -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
- // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::createOrUpdate)
- // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
- if (config('web-ldap-admin.expirarEm') == 0) {
- return null;
- } else {
- return now()->addDays((int) config('web-ldap-admin.expirarEm'));
- }
- }
-
- /**
- * Define prazo de expiração para senha da conta
- */
- public static function expirarSenha($username, $expiry)
- {
- // invocado por:
- // 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" (LdapUserController::update)
-
- $user = SELF::obterUserPorUsername($username);
- if ($user) {
- if ($expiry) {
- $user->accountExpires = now()->addDays((int) $expiry);
- } else {
- $user->accountExpires = 0;
- }
- $user->save();
- return true;
+ return $user;
}
- return false;
- }
-
- /**
- * Obtém uma instância de usuário com busca pelo codpes
- *
- * @param Int $codpes
- * @return LdapRecord\Models\ActiveDirectory\User
- */
- public static function obterUserPorCodpes($codpes)
- {
- // invocado por:
- // menu "Minha Conta (trocar senha da rede)" (LdapUserController::my)
- // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store)
-
- $user = LdapUser::findBy(config('web-ldap-admin.campoCodpes'), $codpes);
-
- // não vai encontrar se for pelo username, nesse caso vamos usar o CN
- if (is_null($user)) {
- $user = LdapUser::where('cn', '=', $codpes)->first();
+
+ /**
+ * Retorna o número de dias para expirar a conta com base no config
+ */
+ public static function getExpiryDays()
+ {
+ // invocado por:
+ // no login (LoginListener::handle -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
+ // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::createOrUpdate)
+ // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
+
+ if (config('web-ldap-admin.expirarEm') == 0) {
+ return null;
+ } else {
+ return now()->addDays((int) config('web-ldap-admin.expirarEm'));
+ }
}
- return $user;
- }
-
- /**
- * Obtém uma instância de usuário com busca pelo username
- *
- * @param String $username
- * @return LdapRecord\Models\ActiveDirectory\User
- */
- public static function obterUserPorUsername($username)
- {
- // invocado por:
- // no login (LoginListener::handle -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
- // menu "Solicitação de Conta de Administrador" -> botão "Enviar" (SolicitaController::store)
- // menu "Usuários Ldap" -> algum usuário Ldap (LdapUserController::show)
- // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Grupo" -> botão "Salvar" (LdapUserController::addGroup)
- // 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" (LdapUserController::update -> User::expirarSenha)
- // 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" (LdapUserController::update -> User::enable)
- // 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" (LdapUserController::update -> User::disable)
- // 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" (LdapUserController::update -> User::changePassword)
- // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Excluir" (LdapUserController::destroy -> User::delete)
- // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::createOrUpdate)
- // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::desativarUsers)
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::desativarUsers -> User::disable)
-
- return LdapUser::where('cn', '=', $username)->first();
- }
-
- /**
- * Coleta atributos do usuário para serem mostrados
- *
- * @param LdapRecord\Models\ActiveDirectory\User $user
- * @return Array
- */
- public static function show(LdapUser $user)
- {
- // invocado por:
- // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" (LdapUserController::show, my)
-
- $attr = [];
-
- // Nome e email
- $attr['username'] = $user->getFirstAttribute('samaccountname');
- $attr['display_name'] = $user->getFirstAttribute('displayname');
- $attr['email'] = $user->getFirstAttribute('mail');
- $attr['description'] = $user->getFirstAttribute('description');
- $attr['codpes'] = SELF::obterCodpes($user);
-
- // Data da criação da conta
- $ativacao = ldapToCarbon($user, 'whencreated');
- if (!is_null($ativacao)) {
- // vamos subtrair 3 horas para bater com o TZ local. TODO: alguma forma de melhorar isso?
- $ativacao = $ativacao->subHours(3)->format('d/m/Y H:i:s');
+ /**
+ * Define prazo de expiração para senha da conta
+ */
+ public static function expirarSenha($username, $expiry)
+ {
+ // invocado por:
+ // 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" (LdapUserController::update)
+
+ $user = SELF::obterUserPorUsername($username);
+ if ($user) {
+ if ($expiry) {
+ $user->accountExpires = now()->addDays((int) $expiry);
+ } else {
+ $user->accountExpires = 0;
+ }
+ $user->save();
+ return true;
+ }
+ return false;
}
- $attr['ativacao'] = $ativacao;
- // data da última senha alterada
- $last = ldapToCarbon($user, 'pwdlastset');
- if (!is_null($last)) {
- $last = $last->format('d/m/Y H:i:s');
+ /**
+ * Obtém uma instância de usuário com busca pelo codpes
+ *
+ * @param Int $codpes
+ * @return LdapRecord\Models\ActiveDirectory\User
+ */
+ public static function obterUserPorCodpes($codpes)
+ {
+ // invocado por:
+ // menu "Minha Conta (trocar senha da rede)" (LdapUserController::my)
+ // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store)
+
+ $user = LdapUser::findBy(config('web-ldap-admin.campoCodpes'), $codpes);
+
+ // não vai encontrar se for pelo username, nesse caso vamos usar o CN
+ if (is_null($user)) {
+ $user = LdapUser::where('cn', '=', $codpes)->first();
+ }
+
+ return $user;
}
- $attr['senha_alterada_em'] = $last;
- // Data da expiração da conta
- $expira = ldapToCarbon($user, 'accountexpires');
- if (!is_null($expira)) {
- $expira = $expira->format('d/m/Y');
+ /**
+ * Obtém uma instância de usuário com busca pelo username
+ *
+ * @param String $username
+ * @return LdapRecord\Models\ActiveDirectory\User
+ */
+ public static function obterUserPorUsername($username)
+ {
+ // invocado por:
+ // no login (LoginListener::handle -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
+ // menu "Solicitação de Conta de Administrador" -> botão "Enviar" (SolicitaController::store)
+ // menu "Usuários Ldap" -> algum usuário Ldap (LdapUserController::show)
+ // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Grupo" -> botão "Salvar" (LdapUserController::addGroup)
+ // 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" (LdapUserController::update -> User::expirarSenha)
+ // 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" (LdapUserController::update -> User::enable)
+ // 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" (LdapUserController::update -> User::disable)
+ // 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" (LdapUserController::update -> User::changePassword)
+ // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Excluir" (LdapUserController::destroy -> User::delete)
+ // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::createOrUpdate)
+ // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::criarOuAtualizarPorArray -> User::createOrUpdate)
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::desativarUsers)
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::desativarUsers -> User::disable)
+
+ return LdapUser::where('cn', '=', $username)->first();
}
- $attr['expira'] = $expira;
-
- // Grupos: vamos ocultar o grupo "Domain Users"
- $grupos = array_diff($user->groups()->get()->pluck('cn')->flatten()->toArray(), ['Domain Users']);
- sort($grupos);
- $attr['grupos'] = implode(', ', $grupos);
-
- // Department
- $attr['department'] = $user->getFirstAttribute('department');
-
- return $attr;
- }
-
- /**
- * Retorna o codpes do usuário ldap
- *
- * O codpes pode ser o username ou o employeeNumber e é setado no config.
- * Se não encontrar no campo apropriado faz a busca no outro campo
- * para o caso de ter mudado a regra ao longo do uso
- *
- * Se não retornar codpes o status pode ser qualquer
- *
- * @param LdapRecord\Models\ActiveDirectory\User $user
- * @param $status Se true retorna se o codpes veio do campo correto ou não, segundo o config
- * @return Int|Array|Null
- */
- public static function obterCodpes(LdapUser $user, Bool $status = false)
- {
- // invocado por:
- // menu "Usuários Ldap" (LdapUserController::index -> ldapusers.index)
- // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" (LdapUserController::show, my)
- // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" (LdapUserController::show, my -> User::show)
-
- $valido = true;
- switch (strtolower(config('web-ldap-admin.campoCodpes'))) {
- case 'employeenumber':
- if (!is_numeric($codpes = $user->getFirstAttribute('employeenumber'))) {
- $codpes = $user->getFirstAttribute('samaccountname');
- $valido = false;
+
+ /**
+ * Coleta atributos do usuário para serem mostrados
+ *
+ * @param LdapRecord\Models\ActiveDirectory\User $user
+ * @return Array
+ */
+ public static function show(LdapUser $user)
+ {
+ // invocado por:
+ // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" (LdapUserController::show, my)
+
+ $attr = [];
+
+ // Nome e email
+ $attr['username'] = $user->getFirstAttribute('samaccountname');
+ $attr['display_name'] = $user->getFirstAttribute('displayname');
+ $attr['email'] = $user->getFirstAttribute('mail');
+ $attr['description'] = $user->getFirstAttribute('description');
+ $attr['codpes'] = SELF::obterCodpes($user);
+
+ // Data da criação da conta
+ $ativacao = ldapToCarbon($user, 'whencreated');
+ if (!is_null($ativacao)) {
+ // vamos subtrair 3 horas para bater com o TZ local. TODO: alguma forma de melhorar isso?
+ $ativacao = $ativacao->subHours(3)->format('d/m/Y H:i:s');
+ }
+ $attr['ativacao'] = $ativacao;
+
+ // data da última senha alterada
+ $last = ldapToCarbon($user, 'pwdlastset');
+ if (!is_null($last)) {
+ $last = $last->format('d/m/Y H:i:s');
}
- break;
- case 'username':
- default:
- if (!is_numeric($codpes = $user->getFirstAttribute('samaccountname'))) {
- $codpes = $user->getFirstAttribute('employeenumber');
- $valido = false;
+ $attr['senha_alterada_em'] = $last;
+
+ // Data da expiração da conta
+ $expira = ldapToCarbon($user, 'accountexpires');
+ if (!is_null($expira)) {
+ $expira = $expira->format('d/m/Y');
}
- break;
+ $attr['expira'] = $expira;
+
+ // Grupos: vamos ocultar o grupo "Domain Users"
+ $grupos = array_diff($user->groups()->get()->pluck('cn')->flatten()->toArray(), ['Domain Users']);
+ sort($grupos);
+ $attr['grupos'] = implode(', ', $grupos);
+
+ // Department
+ $attr['department'] = $user->getFirstAttribute('department');
+
+ return $attr;
}
- if (is_numeric($codpes)) {
- return $status ? [$codpes, $valido] : $codpes;
- } else {
- return null;
+
+ /**
+ * Retorna o codpes do usuário ldap
+ *
+ * O codpes pode ser o username ou o employeeNumber e é setado no config.
+ * Se não encontrar no campo apropriado faz a busca no outro campo
+ * para o caso de ter mudado a regra ao longo do uso
+ *
+ * Se não retornar codpes o status pode ser qualquer
+ *
+ * @param LdapRecord\Models\ActiveDirectory\User $user
+ * @param $status Se true retorna se o codpes veio do campo correto ou não, segundo o config
+ * @return Int|Array|Null
+ */
+ public static function obterCodpes(LdapUser $user, Bool $status = false)
+ {
+ // invocado por:
+ // menu "Usuários Ldap" (LdapUserController::index -> ldapusers.index)
+ // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" (LdapUserController::show, my)
+ // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" (LdapUserController::show, my -> User::show)
+
+ $valido = true;
+ switch (strtolower(config('web-ldap-admin.campoCodpes'))) {
+ case 'employeenumber':
+ if (!is_numeric($codpes = $user->getFirstAttribute('employeenumber'))) {
+ $codpes = $user->getFirstAttribute('samaccountname');
+ $valido = false;
+ }
+ break;
+ case 'username':
+ default:
+ if (!is_numeric($codpes = $user->getFirstAttribute('samaccountname'))) {
+ $codpes = $user->getFirstAttribute('employeenumber');
+ $valido = false;
+ }
+ break;
+ }
+ if (is_numeric($codpes)) {
+ return $status ? [$codpes, $valido] : $codpes;
+ } else {
+ return null;
+ }
}
- }
- public static function delete(String $username)
- {
- // invocado por:
- // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Excluir" (LdapUserController::destroy)
+ public static function delete(String $username)
+ {
+ // invocado por:
+ // menu "Usuários Ldap" -> algum usuário Ldap, menu "Minha Conta (trocar senha da rede)" -> botão "Excluir" (LdapUserController::destroy)
- $user = SELF::obterUserPorUsername($username);
- if (!is_null($user)) {
- $user->delete();
- return true;
+ $user = SELF::obterUserPorUsername($username);
+ if (!is_null($user)) {
+ $user->delete();
+ return true;
+ }
+ return false;
}
- return false;
- }
-
- public static function disable(String $username)
- {
- // invocado por:
- // 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" (LdapUserController::update)
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::desativarUsers)
-
- $user = SELF::obterUserPorUsername($username);
- if (!is_null($user)) {
- # https://support.microsoft.com/pt-br/help/305144/how-to-use-the-useraccountcontrol-flags-to-manipulate-user-account-pro
- $user->useraccountcontrol = AccountControl::ACCOUNTDISABLE;
- $user->save();
- return true;
+
+ public static function disable(String $username)
+ {
+ // invocado por:
+ // 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" (LdapUserController::update)
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync -> User::desativarUsers)
+
+ $user = SELF::obterUserPorUsername($username);
+ if (!is_null($user)) {
+ # https://support.microsoft.com/pt-br/help/305144/how-to-use-the-useraccountcontrol-flags-to-manipulate-user-account-pro
+ $user->useraccountcontrol = AccountControl::ACCOUNTDISABLE;
+ $user->save();
+ return true;
+ }
+ return false;
}
- return false;
- }
- public static function enable(String $username)
- {
- // invocado por:
- // 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" (LdapUserController::update)
+ public static function enable(String $username)
+ {
+ // invocado por:
+ // 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" (LdapUserController::update)
- $user = SELF::obterUserPorUsername($username);
+ $user = SELF::obterUserPorUsername($username);
- if (!is_null($user)) {
- # https://support.microsoft.com/pt-br/help/305144/how-to-use-the-useraccountcontrol-flags-to-manipulate-user-account-pro
- $user->useraccountcontrol = AccountControl::NORMAL_ACCOUNT;
- $user->save();
- return true;
+ if (!is_null($user)) {
+ # https://support.microsoft.com/pt-br/help/305144/how-to-use-the-useraccountcontrol-flags-to-manipulate-user-account-pro
+ $user->useraccountcontrol = AccountControl::NORMAL_ACCOUNT;
+ $user->save();
+ return true;
+ }
+ return false;
}
- return false;
- }
- public static function changePassword($username, String $password, $must_change_pwd = null): bool
- {
- // invocado por:
- // 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" (LdapUserController::update)
+ public static function changePassword($username, String $password, $must_change_pwd = null): bool
+ {
+ // invocado por:
+ // 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" (LdapUserController::update)
- $user = SELF::obterUserPorUsername($username);
- if (is_null($user)) {
- return false;
- }
+ $user = SELF::obterUserPorUsername($username);
+ if (is_null($user)) {
+ return false;
+ }
- $user->unicodepwd = $password;
- // Leonardo Ruiz: Alteracao de senha nao deve alterar validade da conta
- //$user->setAccountExpiry(SELF::getExpiryDays());
+ $user->unicodepwd = $password;
+ // Leonardo Ruiz: Alteracao de senha nao deve alterar validade da conta
+ //$user->setAccountExpiry(SELF::getExpiryDays());
- if ($must_change_pwd) {
- $user->pwdlastset = 0;
- }
+ if ($must_change_pwd) {
+ $user->pwdlastset = 0;
+ }
- try {
- $user->save();
- $result = true;
- } catch (\Exception $e) {
- echo (Gate::check('manager')) ? $e->getMessage() : null;
- $result = false;
- }
- return $result;
- }
-
- public static function getUsersGroup($grupo)
- {
- // invocado por:
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" (LdapUserController::syncReplicadoForm)
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync)
-
- $ldapusers = [];
- $group = LdapGroupModel::findBy('cn', $grupo);
- if ($group != false) {
- $ldapusers = LdapUser::query();
- $ldapusers = $ldapusers->where('memberof', '=', $group->getDn());
- foreach (config('web-ldap-admin.ocultarUsuarios') as $ocultar) {
- $ldapusers = $ldapusers->where('samaccountname', '!=', $ocultar);
- }
- $ldapusers = $ldapusers->orderBy('displayname', 'asc');
- $ldapusers = $ldapusers->paginate(config('web-ldap-admin.registrosPorPagina'));
+ try {
+ $user->save();
+ $result = true;
+ } catch (\Exception $e) {
+ echo (Gate::check('manager')) ? $e->getMessage() : null;
+ $result = false;
+ }
+ return $result;
}
- return $ldapusers;
- }
+ public static function getUsersGroup($grupo)
+ {
+ // invocado por:
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" (LdapUserController::syncReplicadoForm)
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync)
+
+ $ldapusers = [];
+ $group = LdapGroupModel::findBy('cn', $grupo);
+ if ($group != false) {
+ $ldapusers = LdapUser::query();
+ $ldapusers = $ldapusers->where('memberof', '=', $group->getDn());
+ foreach (config('web-ldap-admin.ocultarUsuarios') as $ocultar) {
+ $ldapusers = $ldapusers->where('samaccountname', '!=', $ocultar);
+ }
+ $ldapusers = $ldapusers->orderBy('displayname', 'asc');
+ $ldapusers = $ldapusers->paginate(config('web-ldap-admin.registrosPorPagina'));
+ }
- public static function desativarUsers($desligados)
- {
- // invocado por:
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync)
+ return $ldapusers;
+ }
- foreach ($desligados as $desligado) {
- // remover dos grupos
- $user = SELF::obterUserPorUsername($desligado);
- $groups = $user->groups()->get();
+ public static function desativarUsers($desligados)
+ {
+ // invocado por:
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync)
- foreach ($groups as $group) {
- echo "{$desligado}:
";
- $group->members()->detach($user);
- }
+ foreach ($desligados as $desligado) {
+ // remover dos grupos
+ $user = SELF::obterUserPorUsername($desligado);
+ $groups = $user->groups()->get();
- // adicionar ao grupo Desativados
- LdapGroup::addMember($user, ['Desativados']);
+ foreach ($groups as $group) {
+ echo "{$desligado}:
";
+ $group->members()->detach($user);
+ }
- // desativar conta
- self::disable($desligado);
- }
- }
-
- /**
- * Cria ou atualiza recebendo o array da pessoa
- *
- * em $pessoa: codema, codpes, dtanas (tabela pessoa), nomabvset, nompesttd (dados da tabela localizapessoa)
- *
- * @param array $pessoa
- * @author Alessandro Costa de Oliveira 11/03/2022
- */
- public static function criarOuAtualizarPorArray($pessoa, $metodo = '')
- {
- // invocado por:
- // no login (LoginListener::handle)
- // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store)
- // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync)
-
- // setando username e codpes (similar loginListener)
- switch (strtolower(config('web-ldap-admin.campoCodpes'))) {
- case 'employeenumber':
- $email = Pessoa::retornarEmailUsp($pessoa['codpes']) ?? $pessoa['codema'];
- $email = empty($email) ?: Pessoa::email($pessoa['codpes']);
- $username = explode('@', $email)[0];
- $username = preg_replace("/[^a-zA-Z0-9]+/", "", $username); //email sem caracteres especiais
- $username = substr($username, 0, 15); //limitando em 15 caracteres
- $attr['employeeNumber'] = $pessoa['codpes'];
- // dd($email, $pessoa);
- break;
- case 'username':
- default:
- $username = $pessoa['codpes'];
- $attr['employeeNumber'] = '';
- break;
- }
- // setando para testes se não vier dtanas
- if (!isset($pessoa['dtanas'])) {
- $pessoa['dtanas'] = '1/1/1970';
+ // adicionar ao grupo Desativados
+ LdapGroup::addMember($user, ['Desativados']);
+
+ // desativar conta
+ self::disable($desligado);
+ }
}
- // setando senha
- switch (config('web-ldap-admin.senhaPadrao')) {
- case 'random':
- $password = Utils::senhaAleatoria();
- break;
+ /**
+ * Cria ou atualiza recebendo o array da pessoa
+ *
+ * em $pessoa: codema, codpes, dtanas (tabela pessoa), nomabvset, nompesttd (dados da tabela localizapessoa)
+ *
+ * @param array $pessoa
+ * @author Alessandro Costa de Oliveira 11/03/2022
+ */
+ public static function criarOuAtualizarPorArray($pessoa, $metodo = '')
+ {
+ // invocado por:
+ // no login (LoginListener::handle)
+ // menu "Criar usuário" -> botão "Enviar Dados" (LdapUserController::store)
+ // menu "Sincronizar ..." -> botão "Sincronizar com replicado" -> botão "Sincronizar" (SincronizaReplicado::handle::sync)
+
+ // setando username e codpes (similar loginListener)
+ switch (strtolower(config('web-ldap-admin.campoCodpes'))) {
+ case 'employeenumber':
+ $email = Pessoa::retornarEmailUsp($pessoa['codpes']) ?? $pessoa['codema'];
+ $email = empty($email) ?: Pessoa::email($pessoa['codpes']);
+ $username = explode('@', $email)[0];
+ $username = preg_replace("/[^a-zA-Z0-9]+/", "", $username); //email sem caracteres especiais
+ $username = substr($username, 0, 15); //limitando em 15 caracteres
+ $attr['employeeNumber'] = $pessoa['codpes'];
+ // dd($email, $pessoa);
+ break;
+ case 'username':
+ default:
+ $username = $pessoa['codpes'];
+ $attr['employeeNumber'] = '';
+ break;
+ }
+ // setando para testes se não vier dtanas
+ if (!isset($pessoa['dtanas'])) {
+ $pessoa['dtanas'] = '1/1/1970';
+ }
- case 'data_nascimento':
- default:
- $password = ($pessoa['dtanas'] != '') ? date('dmY', strtotime($pessoa['dtanas'])) : Utils::senhaAleatoria();
- }
+ // setando senha
+ switch (config('web-ldap-admin.senhaPadrao')) {
+ case 'random':
+ $password = Utils::senhaAleatoria();
+ break;
+
+ case 'data_nascimento':
+ default:
+ $password = ($pessoa['dtanas'] != '') ? date('dmY', strtotime($pessoa['dtanas'])) : Utils::senhaAleatoria();
+ }
- if ($pessoa['nomabvset']) {
- // o setor é o vínculo estendido + setor (sem o código da unidade)
- $setor = $pessoa['tipvinext'] . ' ' . explode('-', $pessoa['nomabvset'])[0];
- } else {
- $setor = $pessoa['tipvinext'];
- if ($pessoa['tipvinext'] == 'Aluno de Graduação') {
- if (empty(config('web-ldap-admin.grCursoSetor'))) {
- try {
- $nomabvset = Graduacao::setorAluno($pessoa['codpes'], config('web-ldap-admin.replicado_unidade'))['nomabvset'];
- } catch (\Exception $e) {
- $nomabvset = 'Sem departamento';
- }
+ if ($pessoa['nomabvset']) {
+ // o setor é o vínculo estendido + setor (sem o código da unidade)
+ $setor = $pessoa['tipvinext'] . ' ' . explode('-', $pessoa['nomabvset'])[0];
} else {
- $curso = Graduacao::curso($pessoa['codpes'], config('web-ldap-admin.replicado_unidade'));
- $codcur = $curso['codcur'];
- $codhab = $curso['codhab'];
- foreach (config('web-ldap-admin.grCursoSetor') as $grCursoSetor) {
- if ($grCursoSetor['codcur'] == $codcur && $grCursoSetor['codhab'] == $codhab) {
- $nomabvset = $grCursoSetor['nomabvset'];
+ $setor = $pessoa['tipvinext'];
+ if ($pessoa['tipvinext'] == 'Aluno de Graduação') {
+ if (empty(config('web-ldap-admin.grCursoSetor'))) {
+ try {
+ $nomabvset = Graduacao::obterSetorAluno($pessoa['codpes'], config('web-ldap-admin.replicado_unidade'))['nomabvset'];
+ } catch (\Exception $e) {
+ $nomabvset = 'Sem departamento';
+ }
+ } else {
+ $curso = Graduacao::obterCursoAtivo($pessoa['codpes']);
+ $codcur = $curso['codcur'];
+ $codhab = $curso['codhab'];
+ foreach (config('web-ldap-admin.grCursoSetor') as $grCursoSetor) {
+ if ($grCursoSetor['codcur'] == $codcur && $grCursoSetor['codhab'] == $codhab) {
+ $nomabvset = $grCursoSetor['nomabvset'];
+ }
+ }
+ }
+ $setor = (isset($nomabvset)) ? trim($pessoa['tipvinext'] . ' ' . $nomabvset) : $pessoa['tipvinext'];
}
- }
+ // aqui poderia tratar os outros casos de Pós Graduação, Posdoc, etc
+ }
+ $attr['setor'] = $setor;
+
+ $attr['nome'] = $pessoa['nompesttd'] ?? $pessoa['nompes'];
+ $attr['email'] = $pessoa['codema'];
+
+ $attr['descricao'] = 'Sincronizado com o replicado';
+
+ if ($pessoa['tipvinext'] != 'Externo') {
+ if (config('web-ldap-admin.tipoNomesGrupos') == 'extenso') {
+ $vinculosSetores = LdapPessoa::listarVinculosSetores($pessoa['codpes'], config('web-ldap-admin.replicado_unidade'));
+ foreach ($vinculosSetores as $key => $value) {
+ if ($value == 'Aluno de Graduação' && isset($nomabvset)) {
+ $vinculosSetores[1] = 'Aluno de Graduação ' . $nomabvset;
+ }
+ }
+ $grupos = ($pessoa['tipvinext'] != 'Externo') ? $vinculosSetores : [$pessoa['tipvinext']];
+ }
+ if (config('web-ldap-admin.tipoNomesGrupos') == 'siglas') {
+ $setores = Pessoa::obterSiglasSetoresAtivos($pessoa['codpes']);
+ $vinculos = Pessoa::obterSiglasVinculosAtivos($pessoa['codpes']);
+ // caso não haja vinculos ou setores, vamos deixar como array
+ if (is_null($setores)) $setores = [];
+ if (is_null($vinculos)) $vinculos = [];
+ $grupos = array_merge($setores, $vinculos);
+ }
+ } else {
+ $grupos = [$pessoa['tipvinext']];
}
- $setor = (isset($nomabvset)) ? trim($pessoa['tipvinext'] . ' ' . $nomabvset) : $pessoa['tipvinext'];
- }
- // aqui poderia tratar os outros casos de Pós Graduação, Posdoc, etc
- }
- $attr['setor'] = $setor;
- $attr['nome'] = $pessoa['nompesttd'] ?? $pessoa['nompes'];
- $attr['email'] = $pessoa['codema'];
+ // Se a sincronização dos grupos com o replicado for desativada, vamos mandar esse array vazio
+ if (config('web-ldap-admin.syncGroupsWithReplicado') == 'no') {
+ $grupos = [];
+ }
- $attr['descricao'] = 'Sincronizado com o replicado';
+ $grupos = array_unique($grupos);
+ sort($grupos);
- if ($pessoa['tipvinext'] != 'Externo') {
- if (config('web-ldap-admin.tipoNomesGrupos') == 'extenso') {
- $vinculosSetores = Pessoa::vinculosSetores($pessoa['codpes'], config('web-ldap-admin.replicado_unidade'));
- foreach ($vinculosSetores as $key => $value) {
- if ($value == 'Aluno de Graduação' && isset($nomabvset)) {
- $vinculosSetores[1] = 'Aluno de Graduação ' . $nomabvset;
- }
- }
- $grupos = ($pessoa['tipvinext'] != 'Externo') ? $vinculosSetores : [$pessoa['tipvinext']];
- }
- if (config('web-ldap-admin.tipoNomesGrupos') == 'siglas') {
- $setores = Pessoa::obterSiglasSetoresAtivos($pessoa['codpes']);
- $vinculos = Pessoa::obterSiglasVinculosAtivos($pessoa['codpes']);
- // caso não haja vinculos ou setores, vamos deixar como array
- if (is_null($setores)) $setores = [];
- if (is_null($vinculos)) $vinculos = [];
- $grupos = array_merge($setores, $vinculos);
- }
- } else {
- $grupos = [$pessoa['tipvinext']];
+ // só grava o usuário no servidor LDAP se ele pertencer a vínculos autorizados para tal
+ // (tanto no login do usuário quanto na sincronização com o replicado)
+ //if ((array_filter(config('web-ldap-admin.vinculos_autorizados')) === []) || // quando a variável não foi configurada, permitimos todos os usuários (como sempre havia sido)
+ // !empty(array_intersect($grupos, config('web-ldap-admin.vinculos_autorizados')))) // só permite se o usuário for de um dos vínculos autorizados
+ return self::createOrUpdate($username, $attr, $grupos, $password);
}
- // Se a sincronização dos grupos com o replicado for desativada, vamos mandar esse array vazio
- if (config('web-ldap-admin.syncGroupsWithReplicado') == 'no') {
- $grupos = [];
+ /**
+ * Verifica se a conta está expirada (Retorna true/false)
+ */
+ public static function getIsExpired($user)
+ {
+ // invocado por:
+ // menu "Usuários Ldap" (LdapUserController::index -> ldapusers.partials.expiry)
+
+ $expira = ldapToCarbon($user, 'accountexpires');
+ return $expira ? $expira->isPast() : false;
}
- $grupos = array_unique($grupos);
- sort($grupos);
-
- // só grava o usuário no servidor LDAP se ele pertencer a vínculos autorizados para tal
- // (tanto no login do usuário quanto na sincronização com o replicado)
- //if ((array_filter(config('web-ldap-admin.vinculos_autorizados')) === []) || // quando a variável não foi configurada, permitimos todos os usuários (como sempre havia sido)
- // !empty(array_intersect($grupos, config('web-ldap-admin.vinculos_autorizados')))) // só permite se o usuário for de um dos vínculos autorizados
- return self::createOrUpdate($username, $attr, $grupos, $password);
- }
-
- /**
- * Verifica se a conta está expirada (Retorna true/false)
- */
- public static function getIsExpired($user)
- {
- // invocado por:
- // menu "Usuários Ldap" (LdapUserController::index -> ldapusers.partials.expiry)
-
- $expira = ldapToCarbon($user, 'accountexpires');
- return $expira ? $expira->isPast() : false;
- }
-
- /**
- * Retorna a data de expiração como objeto Carbon ou null
- */
- public static function getExpirationDate($user)
- {
- // invocado por:
- // menu "Usuários Ldap" (LdapUserController::index -> ldapusers.partials.expiry)
-
- return ldapToCarbon($user, 'accountexpires');
- }
-
- /**
- * Retorna um array com os nomes (CN) dos grupos do usuário
- */
- public static function getGroupNames($user)
- {
- // invocado por:
- // menu "Usuários Ldap" (LdapUserController::index -> ldapusers.index)
-
- return $user->groups()->get()->pluck('cn')->flatten()->toArray();
- }
+ /**
+ * Retorna a data de expiração como objeto Carbon ou null
+ */
+ public static function getExpirationDate($user)
+ {
+ // invocado por:
+ // menu "Usuários Ldap" (LdapUserController::index -> ldapusers.partials.expiry)
+
+ return ldapToCarbon($user, 'accountexpires');
+ }
+
+ /**
+ * Retorna um array com os nomes (CN) dos grupos do usuário
+ */
+ public static function getGroupNames($user)
+ {
+ // invocado por:
+ // menu "Usuários Ldap" (LdapUserController::index -> ldapusers.index)
+
+ return $user->groups()->get()->pluck('cn')->flatten()->toArray();
+ }
}
diff --git a/app/Policies/LdapUserPolicy.php b/app/Policies/LdapUserPolicy.php
index a302d6e..ad82b14 100644
--- a/app/Policies/LdapUserPolicy.php
+++ b/app/Policies/LdapUserPolicy.php
@@ -11,85 +11,85 @@
class LdapUserPolicy
{
- use HandlesAuthorization;
+ use HandlesAuthorization;
- public $is_superAdmin;
+ public $is_superAdmin;
- public function __construct()
- {
- $this->is_superAdmin = Gate::allows('admin');
- }
+ public function __construct()
+ {
+ $this->is_superAdmin = Gate::allows('admin');
+ }
- /**
- * Determine whether the user can view the ldap user.
- *
- * @param \App\User $user
- * @param \App\LdapUser $ldapUser
- * @return mixed
- */
- public function view(User $user, $id)
- {
- $owner = $user->username_senhaunica === $id;
- return $owner || $this->is_superAdmin;
- }
+ /**
+ * Determine whether the user can view the ldap user.
+ *
+ * @param \App\User $user
+ * @param \App\LdapUser $ldapUser
+ * @return mixed
+ */
+ public function view(User $user, $id)
+ {
+ $owner = $user->username_senhaunica === $id;
+ return $owner || $this->is_superAdmin;
+ }
- /**
- * Determine whether the user can create ldap users.
- *
- * @param \App\User $user
- * @return mixed
- */
- public function create(User $user)
- {
- //
- }
+ /**
+ * Determine whether the user can create ldap users.
+ *
+ * @param \App\User $user
+ * @return mixed
+ */
+ public function create(User $user)
+ {
+ //
+ }
- /**
- * Determine whether the user can update the ldap user.
- *
- * @param \App\User $user
- * @param \App\LdapUser $ldapUser
- * @return mixed
- */
- public function update(User $user, $id)
- {
- $owner = $user->username_senhaunica === $id;
- return $owner || $this->is_superAdmin;
- }
+ /**
+ * Determine whether the user can update the ldap user.
+ *
+ * @param \App\User $user
+ * @param \App\LdapUser $ldapUser
+ * @return mixed
+ */
+ public function update(User $user, $id)
+ {
+ $owner = $user->username_senhaunica === $id;
+ return $owner || $this->is_superAdmin;
+ }
- /**
- * Determine whether the user can delete the ldap user.
- *
- * @param \App\User $user
- * @param \App\LdapUser $ldapUser
- * @return mixed
- */
- public function delete(User $user)
- {
- //
- }
+ /**
+ * Determine whether the user can delete the ldap user.
+ *
+ * @param \App\User $user
+ * @param \App\LdapUser $ldapUser
+ * @return mixed
+ */
+ public function delete(User $user)
+ {
+ //
+ }
- /**
- * Determine whether the user can restore the ldap user.
- *
- * @param \App\User $user
- * @param \App\LdapUser $ldapUser
- * @return mixed
- */
- public function restore(User $user)
- {
- //
- }
+ /**
+ * Determine whether the user can restore the ldap user.
+ *
+ * @param \App\User $user
+ * @param \App\LdapUser $ldapUser
+ * @return mixed
+ */
+ public function restore(User $user)
+ {
+ //
+ }
- /**
- * Determine whether the user can permanently delete the ldap user.
- *
- * @param \App\User $user
- * @param \App\LdapUser $ldapUser
- * @return mixed
- */
- public function forceDelete(User $user)
- {
- //
- }
+ /**
+ * Determine whether the user can permanently delete the ldap user.
+ *
+ * @param \App\User $user
+ * @param \App\LdapUser $ldapUser
+ * @return mixed
+ */
+ public function forceDelete(User $user)
+ {
+ //
+ }
}
diff --git a/app/Providers/ViewServiceProvider.php b/app/Providers/ViewServiceProvider.php
index 04a89d0..05099a0 100644
--- a/app/Providers/ViewServiceProvider.php
+++ b/app/Providers/ViewServiceProvider.php
@@ -8,56 +8,56 @@
class ViewServiceProvider extends ServiceProvider
{
- /**
- * Register any application services.
- *
- * @return void
- */
- public function register()
- {
- //
- }
+ /**
+ * Register any application services.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ //
+ }
- /**
- * Bootstrap any application services.
- *
- * @return void
- */
- public function boot()
- {
- // Using class based composers...
- View::composer('profile', ProfileComposer::class);
+ /**
+ * Bootstrap any application services.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ // Using class based composers...
+ View::composer('profile', ProfileComposer::class);
- // Using closure based composers...
- View::composer('*', function ($view) {
- // Menu dinâmico solicita conta admin
- $menuContaAdmin = [
- 'text' => 'Solicitação de Conta de Administrador',
- 'url' => 'solicita',
- 'can' => 'ninguem',
- ];
+ // Using closure based composers...
+ View::composer('*', function ($view) {
+ // Menu dinâmico solicita conta admin
+ $menuContaAdmin = [
+ 'text' => 'Solicitação de Conta de Administrador',
+ 'url' => 'solicita',
+ 'can' => 'ninguem',
+ ];
- if (config('web-ldap-admin.solicitaContaAdmin') == 1) {
- $menuContaAdmin['can'] = 'user';
- \UspTheme::addMenu('solicitaContaAdmin', $menuContaAdmin);
- } elseif (config('web-ldap-admin.solicitaContaAdmin') == 2) {
- $menuContaAdmin['can'] = 'servidor';
- \UspTheme::addMenu('solicitaContaAdmin', $menuContaAdmin);
- }
+ if (config('web-ldap-admin.solicitaContaAdmin') == 1) {
+ $menuContaAdmin['can'] = 'user';
+ \UspTheme::addMenu('solicitaContaAdmin', $menuContaAdmin);
+ } elseif (config('web-ldap-admin.solicitaContaAdmin') == 2) {
+ $menuContaAdmin['can'] = 'servidor';
+ \UspTheme::addMenu('solicitaContaAdmin', $menuContaAdmin);
+ }
- // menu dinâmico badge indicando syncronização de login ativa
- if (config('web-ldap-admin.sincLdapLogin') == 1) {
- $text = 'on ';
- $title = 'Sincronização automática ativada';
- } else {
- $text = ' off ';
- $title = 'Sincronização automática desativada';
- }
- \UspTheme::addMenu('web-ldap-admin', [
- 'text' => $text,
- 'title' => $title,
- 'can' => 'manager',
- ]);
- });
- }
+ // menu dinâmico badge indicando syncronização de login ativa
+ if (config('web-ldap-admin.sincLdapLogin') == 1) {
+ $text = 'on ';
+ $title = 'Sincronização automática ativada';
+ } else {
+ $text = ' off ';
+ $title = 'Sincronização automática desativada';
+ }
+ \UspTheme::addMenu('web-ldap-admin', [
+ 'text' => $text,
+ 'title' => $title,
+ 'can' => 'manager',
+ ]);
+ });
+ }
}
diff --git a/app/Replicado/Pessoa.php b/app/Replicado/Pessoa.php
index 6ff08eb..2d07e30 100644
--- a/app/Replicado/Pessoa.php
+++ b/app/Replicado/Pessoa.php
@@ -4,6 +4,7 @@
use Uspdev\Replicado\DB;
use Uspdev\Replicado\Pessoa as ReplicadoPessoa;
+use Uspdev\Replicado\Graduacao as Graduacao;
class Pessoa extends ReplicadoPessoa
{
@@ -51,7 +52,7 @@ public static function listarVinculosSetores(int $codpes, $codundclg = null) # c
AND codundclg IN ({$codundclg})";
$param['codpes'] = $codpes;
$result = DB::fetchAll($query, $param);
- dd($result);
+ //dd($result);
// Inicializa o array de vínculos e setores
$vinculosSetores = array();
foreach ($result as $row) {
@@ -62,7 +63,7 @@ public static function listarVinculosSetores(int $codpes, $codundclg = null) # c
// Adiciona o departamento quando também for Aluno de Graduação
if (trim($row['tipvinext']) == 'Aluno de Graduação') {
// Considerando o primeiro código de unidade
- $setorGraduacao = Graduacao::setorAluno($row['codpes'], $arrCodUnidades[0])['nomabvset'];
+ $setorGraduacao = Graduacao::obterSetorAluno($row['codpes'], $arrCodUnidades[0])['nomabvset'];
array_push($vinculosSetores, $row['tipvinext'] . ' ' . $setorGraduacao);
}
}
@@ -81,6 +82,4 @@ public static function listarVinculosSetores(int $codpes, $codundclg = null) # c
sort($vinculosSetores);
return $vinculosSetores;
}
-
-
}
diff --git a/app/helpers.php b/app/helpers.php
index 0dc6488..1e17da5 100644
--- a/app/helpers.php
+++ b/app/helpers.php
@@ -4,29 +4,29 @@
use LdapRecord\Models\Model;
if (!function_exists('ldapToCarbon')) {
- /**
- * Converte um atributo do LDAP em Carbon, aceitando int, string ou objetos
- */
- function ldapToCarbon($user, string $attribute)
- {
- if (!$user instanceof Model)
- return null;
+ /**
+ * Converte um atributo do LDAP em Carbon, aceitando int, string ou objetos
+ */
+ function ldapToCarbon($user, string $attribute)
+ {
+ if (!$user instanceof Model)
+ return null;
- $raw = $user->getFirstAttribute($attribute);
+ $raw = $user->getFirstAttribute($attribute);
- // se já for um objeto de data (Carbon ou DateTime), retorna direto!
- if ($raw instanceof DateTimeInterface)
- return Carbon::instance($raw);
+ // se já for um objeto de data (Carbon ou DateTime), retorna direto!
+ if ($raw instanceof DateTimeInterface)
+ return Carbon::instance($raw);
- // checagem dos valores "eternos" do Active Directory
- if (empty($raw) || $raw == 0 || $raw == '9223372036854775807')
- return null;
+ // checagem dos valores "eternos" do Active Directory
+ if (empty($raw) || $raw == 0 || $raw == '9223372036854775807')
+ return null;
- try {
- // o asDateTime() faz a mágica de converter int para objeto
- return Carbon::instance($user->asDateTime($raw));
- } catch (\Exception $e) {
- return null;
+ try {
+ // o asDateTime() faz a mágica de converter int para objeto
+ return Carbon::instance($user->asDateTime($raw));
+ } catch (\Exception $e) {
+ return null;
+ }
}
- }
}
diff --git a/composer.lock b/composer.lock
index 2a1781a..e29366f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "38f24a8cfe2fc3576bbf892413c102e5",
+ "content-hash": "0e61b759215c063812a4bc7c073996f6",
"packages": [
{
"name": "brick/math",
- "version": "0.14.2",
+ "version": "0.14.8",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
- "reference": "55c950aa71a2cabc1d8f2bec1f8a7020bd244aa2"
+ "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/55c950aa71a2cabc1d8f2bec1f8a7020bd244aa2",
- "reference": "55c950aa71a2cabc1d8f2bec1f8a7020bd244aa2",
+ "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629",
+ "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629",
"shasum": ""
},
"require": {
@@ -56,7 +56,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.14.2"
+ "source": "https://github.com/brick/math/tree/0.14.8"
},
"funding": [
{
@@ -64,7 +64,7 @@
"type": "github"
}
],
- "time": "2026-01-30T14:03:11+00:00"
+ "time": "2026-02-10T14:33:43+00:00"
},
{
"name": "carbonphp/carbon-doctrine-types",
@@ -373,9 +373,6 @@
"psr/cache": "^1|^2|^3",
"psr/log": "^1|^2|^3"
},
- "conflict": {
- "doctrine/cache": "< 1.11"
- },
"require-dev": {
"doctrine/coding-standard": "14.0.0",
"fig/log-test": "^1",
@@ -464,29 +461,29 @@
},
{
"name": "doctrine/deprecations",
- "version": "1.1.5",
+ "version": "1.1.6",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
+ "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
+ "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"conflict": {
- "phpunit/phpunit": "<=7.5 || >=13"
+ "phpunit/phpunit": "<=7.5 || >=14"
},
"require-dev": {
- "doctrine/coding-standard": "^9 || ^12 || ^13",
- "phpstan/phpstan": "1.4.10 || 2.1.11",
+ "doctrine/coding-standard": "^9 || ^12 || ^14",
+ "phpstan/phpstan": "1.4.10 || 2.1.30",
"phpstan/phpstan-phpunit": "^1.0 || ^2",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0",
"psr/log": "^1 || ^2 || ^3"
},
"suggest": {
@@ -506,9 +503,9 @@
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.6"
},
- "time": "2025-04-07T20:06:18+00:00"
+ "time": "2026-02-07T07:09:04+00:00"
},
{
"name": "doctrine/inflector",
@@ -1478,16 +1475,16 @@
},
{
"name": "laravel/framework",
- "version": "v12.49.0",
+ "version": "v12.51.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "4bde4530545111d8bdd1de6f545fa8824039fcb5"
+ "reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/4bde4530545111d8bdd1de6f545fa8824039fcb5",
- "reference": "4bde4530545111d8bdd1de6f545fa8824039fcb5",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/ce4de3feb211e47c4f959d309ccf8a2733b1bc16",
+ "reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16",
"shasum": ""
},
"require": {
@@ -1696,7 +1693,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2026-01-28T03:40:49+00:00"
+ "time": "2026-02-10T18:20:19+00:00"
},
{
"name": "laravel/helpers",
@@ -1757,30 +1754,30 @@
},
{
"name": "laravel/prompts",
- "version": "v0.3.11",
+ "version": "v0.3.13",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "dd2a2ed95acacbcccd32fd98dee4c946ae7a7217"
+ "reference": "ed8c466571b37e977532fb2fd3c272c784d7050d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/dd2a2ed95acacbcccd32fd98dee4c946ae7a7217",
- "reference": "dd2a2ed95acacbcccd32fd98dee4c946ae7a7217",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/ed8c466571b37e977532fb2fd3c272c784d7050d",
+ "reference": "ed8c466571b37e977532fb2fd3c272c784d7050d",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2.2",
"ext-mbstring": "*",
"php": "^8.1",
- "symfony/console": "^6.2|^7.0"
+ "symfony/console": "^6.2|^7.0|^8.0"
},
"conflict": {
"illuminate/console": ">=10.17.0 <10.25.0",
"laravel/framework": ">=10.17.0 <10.25.0"
},
"require-dev": {
- "illuminate/collections": "^10.0|^11.0|^12.0",
+ "illuminate/collections": "^10.0|^11.0|^12.0|^13.0",
"mockery/mockery": "^1.5",
"pestphp/pest": "^2.3|^3.4|^4.0",
"phpstan/phpstan": "^1.12.28",
@@ -1810,33 +1807,33 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.3.11"
+ "source": "https://github.com/laravel/prompts/tree/v0.3.13"
},
- "time": "2026-01-27T02:55:06+00:00"
+ "time": "2026-02-06T12:17:10+00:00"
},
{
"name": "laravel/serializable-closure",
- "version": "v2.0.8",
+ "version": "v2.0.9",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b"
+ "reference": "8f631589ab07b7b52fead814965f5a800459cb3e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/7581a4407012f5f53365e11bafc520fd7f36bc9b",
- "reference": "7581a4407012f5f53365e11bafc520fd7f36bc9b",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/8f631589ab07b7b52fead814965f5a800459cb3e",
+ "reference": "8f631589ab07b7b52fead814965f5a800459cb3e",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"require-dev": {
- "illuminate/support": "^10.0|^11.0|^12.0",
+ "illuminate/support": "^10.0|^11.0|^12.0|^13.0",
"nesbot/carbon": "^2.67|^3.0",
"pestphp/pest": "^2.36|^3.0|^4.0",
"phpstan/phpstan": "^2.0",
- "symfony/var-dumper": "^6.2.0|^7.0.0"
+ "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0"
},
"type": "library",
"extra": {
@@ -1873,7 +1870,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2026-01-08T16:22:46+00:00"
+ "time": "2026-02-03T06:55:34+00:00"
},
{
"name": "laravel/socialite",
@@ -1949,16 +1946,16 @@
},
{
"name": "laravel/tinker",
- "version": "v2.11.0",
+ "version": "v2.11.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/tinker.git",
- "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468"
+ "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/tinker/zipball/3d34b97c9a1747a81a3fde90482c092bd8b66468",
- "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/c9f80cc835649b5c1842898fb043f8cc098dd741",
+ "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741",
"shasum": ""
},
"require": {
@@ -2009,9 +2006,9 @@
],
"support": {
"issues": "https://github.com/laravel/tinker/issues",
- "source": "https://github.com/laravel/tinker/tree/v2.11.0"
+ "source": "https://github.com/laravel/tinker/tree/v2.11.1"
},
- "time": "2025-12-19T19:16:45+00:00"
+ "time": "2026-02-06T14:12:35+00:00"
},
{
"name": "laravel/ui",
@@ -2921,16 +2918,16 @@
},
{
"name": "nette/schema",
- "version": "v1.3.3",
+ "version": "v1.3.4",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
- "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004"
+ "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004",
- "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004",
+ "url": "https://api.github.com/repos/nette/schema/zipball/086497a2f34b82fede9b5a41cc8e131d087cd8f7",
+ "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7",
"shasum": ""
},
"require": {
@@ -2938,8 +2935,8 @@
"php": "8.1 - 8.5"
},
"require-dev": {
- "nette/tester": "^2.5.2",
- "phpstan/phpstan-nette": "^2.0@stable",
+ "nette/tester": "^2.6",
+ "phpstan/phpstan": "^2.0@stable",
"tracy/tracy": "^2.8"
},
"type": "library",
@@ -2980,22 +2977,22 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
- "source": "https://github.com/nette/schema/tree/v1.3.3"
+ "source": "https://github.com/nette/schema/tree/v1.3.4"
},
- "time": "2025-10-30T22:57:59+00:00"
+ "time": "2026-02-08T02:54:00+00:00"
},
{
"name": "nette/utils",
- "version": "v4.1.1",
+ "version": "v4.1.3",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72"
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/c99059c0315591f1a0db7ad6002000288ab8dc72",
- "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72",
+ "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe",
+ "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe",
"shasum": ""
},
"require": {
@@ -3007,8 +3004,10 @@
},
"require-dev": {
"jetbrains/phpstorm-attributes": "^1.2",
+ "nette/phpstan-rules": "^1.0",
"nette/tester": "^2.5",
- "phpstan/phpstan-nette": "^2.0@stable",
+ "phpstan/extension-installer": "^1.4@stable",
+ "phpstan/phpstan": "^2.1@stable",
"tracy/tracy": "^2.9"
},
"suggest": {
@@ -3069,9 +3068,9 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.1.1"
+ "source": "https://github.com/nette/utils/tree/v4.1.3"
},
- "time": "2025-12-22T12:14:32+00:00"
+ "time": "2026-02-13T03:05:33+00:00"
},
{
"name": "nikic/php-parser",
@@ -3985,16 +3984,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.12.18",
+ "version": "v0.12.20",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "ddff0ac01beddc251786fe70367cd8bbdb258196"
+ "reference": "19678eb6b952a03b8a1d96ecee9edba518bb0373"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ddff0ac01beddc251786fe70367cd8bbdb258196",
- "reference": "ddff0ac01beddc251786fe70367cd8bbdb258196",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/19678eb6b952a03b8a1d96ecee9edba518bb0373",
+ "reference": "19678eb6b952a03b8a1d96ecee9edba518bb0373",
"shasum": ""
},
"require": {
@@ -4058,9 +4057,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.12.18"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.20"
},
- "time": "2025-12-17T14:35:46+00:00"
+ "time": "2026-02-11T15:05:28+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -4234,9 +4233,6 @@
"extra": {
"captainhook": {
"force-install": true
- },
- "branch-alias": {
- "dev-main": "4.x-dev"
}
},
"autoload": {
@@ -4381,16 +4377,16 @@
},
{
"name": "spatie/laravel-permission",
- "version": "6.24.0",
+ "version": "6.24.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-permission.git",
- "reference": "76adb1fc8d07c16a0721c35c4cc330b7a12598d7"
+ "reference": "eefc9d17eba80d023d6bff313f882cb2bcd691a3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/76adb1fc8d07c16a0721c35c4cc330b7a12598d7",
- "reference": "76adb1fc8d07c16a0721c35c4cc330b7a12598d7",
+ "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/eefc9d17eba80d023d6bff313f882cb2bcd691a3",
+ "reference": "eefc9d17eba80d023d6bff313f882cb2bcd691a3",
"shasum": ""
},
"require": {
@@ -4452,7 +4448,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-permission/issues",
- "source": "https://github.com/spatie/laravel-permission/tree/6.24.0"
+ "source": "https://github.com/spatie/laravel-permission/tree/6.24.1"
},
"funding": [
{
@@ -4460,7 +4456,7 @@
"type": "github"
}
],
- "time": "2025-12-13T21:45:21+00:00"
+ "time": "2026-02-09T21:10:03+00:00"
},
{
"name": "symfony/clock",
@@ -5535,10 +5531,6 @@
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -7689,28 +7681,28 @@
},
{
"name": "laravel/sail",
- "version": "v1.52.0",
+ "version": "v1.53.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3"
+ "reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/64ac7d8abb2dbcf2b76e61289451bae79066b0b3",
- "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/e340eaa2bea9b99192570c48ed837155dbf24fbb",
+ "reference": "e340eaa2bea9b99192570c48ed837155dbf24fbb",
"shasum": ""
},
"require": {
- "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0",
- "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0",
- "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0",
+ "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
+ "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0|^13.0",
"php": "^8.0",
- "symfony/console": "^6.0|^7.0",
- "symfony/yaml": "^6.0|^7.0"
+ "symfony/console": "^6.0|^7.0|^8.0",
+ "symfony/yaml": "^6.0|^7.0|^8.0"
},
"require-dev": {
- "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0",
+ "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0|^11.0",
"phpstan/phpstan": "^2.0"
},
"bin": [
@@ -7748,7 +7740,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2026-01-01T02:46:03+00:00"
+ "time": "2026-02-06T12:16:02+00:00"
},
{
"name": "lucascudo/laravel-pt-br-localization",
@@ -8171,16 +8163,16 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "12.5.2",
+ "version": "12.5.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "4a9739b51cbcb355f6e95659612f92e282a7077b"
+ "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4a9739b51cbcb355f6e95659612f92e282a7077b",
- "reference": "4a9739b51cbcb355f6e95659612f92e282a7077b",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b015312f28dd75b75d3422ca37dff2cd1a565e8d",
+ "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d",
"shasum": ""
},
"require": {
@@ -8236,7 +8228,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.2"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.3"
},
"funding": [
{
@@ -8256,20 +8248,20 @@
"type": "tidelift"
}
],
- "time": "2025-12-24T07:03:04+00:00"
+ "time": "2026-02-06T06:01:44+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "6.0.0",
+ "version": "6.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "961bc913d42fe24a257bfff826a5068079ac7782"
+ "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/961bc913d42fe24a257bfff826a5068079ac7782",
- "reference": "961bc913d42fe24a257bfff826a5068079ac7782",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5",
+ "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5",
"shasum": ""
},
"require": {
@@ -8309,15 +8301,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
"security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.0"
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator",
+ "type": "tidelift"
}
],
- "time": "2025-02-07T04:58:37+00:00"
+ "time": "2026-02-02T14:04:18+00:00"
},
{
"name": "phpunit/php-invoker",
@@ -8505,16 +8509,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "12.5.8",
+ "version": "12.5.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "37ddb96c14bfee10304825edbb7e66d341ec6889"
+ "reference": "9b518cb40f9474572c9f0178e96ff3dc1cf02bf1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/37ddb96c14bfee10304825edbb7e66d341ec6889",
- "reference": "37ddb96c14bfee10304825edbb7e66d341ec6889",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9b518cb40f9474572c9f0178e96ff3dc1cf02bf1",
+ "reference": "9b518cb40f9474572c9f0178e96ff3dc1cf02bf1",
"shasum": ""
},
"require": {
@@ -8528,8 +8532,8 @@
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.3",
- "phpunit/php-code-coverage": "^12.5.2",
- "phpunit/php-file-iterator": "^6.0.0",
+ "phpunit/php-code-coverage": "^12.5.3",
+ "phpunit/php-file-iterator": "^6.0.1",
"phpunit/php-invoker": "^6.0.0",
"phpunit/php-text-template": "^5.0.0",
"phpunit/php-timer": "^8.0.0",
@@ -8540,6 +8544,7 @@
"sebastian/exporter": "^7.0.2",
"sebastian/global-state": "^8.0.2",
"sebastian/object-enumerator": "^7.0.0",
+ "sebastian/recursion-context": "^7.0.1",
"sebastian/type": "^6.0.3",
"sebastian/version": "^6.0.0",
"staabm/side-effects-detector": "^1.0.5"
@@ -8582,7 +8587,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.8"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.11"
},
"funding": [
{
@@ -8606,7 +8611,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-27T06:12:29+00:00"
+ "time": "2026-02-10T12:32:02+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -10072,8 +10077,8 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": "^8.2"
+ "php": "^8.3"
},
"platform-dev": {},
- "plugin-api-version": "2.6.0"
+ "plugin-api-version": "2.9.0"
}
diff --git a/config/laravel-usp-theme.php b/config/laravel-usp-theme.php
index 2d3d6c6..19b31c1 100644
--- a/config/laravel-usp-theme.php
+++ b/config/laravel-usp-theme.php
@@ -1,59 +1,59 @@
'Minha Conta (trocar senha da rede)',
- 'url' => 'ldapusers/my',
- 'can' => 'user',
- ],
- [
- 'key' => 'solicitaContaAdmin', # menu dinâmico solicita conta admin
- ],
- [
- 'text' => 'Usuários Ldap',
- 'url' => 'ldapusers',
- 'can' => 'manager',
- ],
- [
- 'text' => 'Criar usuário',
- 'url' => 'ldapusers/create',
- 'can' => 'manager',
- ]
+ [
+ 'text' => 'Minha Conta (trocar senha da rede)',
+ 'url' => 'ldapusers/my',
+ 'can' => 'user',
+ ],
+ [
+ 'key' => 'solicitaContaAdmin', # menu dinâmico solicita conta admin
+ ],
+ [
+ 'text' => 'Usuários Ldap',
+ 'url' => 'ldapusers',
+ 'can' => 'manager',
+ ],
+ [
+ 'text' => 'Criar usuário',
+ 'url' => 'ldapusers/create',
+ 'can' => 'manager',
+ ]
];
$right_menu = [
- [
- 'key' => 'web-ldap-admin',
- ],
- [
- 'key' => 'senhaunica-socialite',
- ],
- [
- 'text' => ' Sincronizar ' . env('LDAP_OU_DEFAULT'),
- 'title' => 'Configurações',
- 'url' => 'configs',
- 'align' => 'right',
- 'can' => 'admin',
- ],
+ [
+ 'key' => 'web-ldap-admin',
+ ],
+ [
+ 'key' => 'senhaunica-socialite',
+ ],
+ [
+ 'text' => ' Sincronizar ' . env('LDAP_OU_DEFAULT'),
+ 'title' => 'Configurações',
+ 'url' => 'configs',
+ 'align' => 'right',
+ 'can' => 'admin',
+ ],
];
return [
- 'title' => config('app.name'),
+ 'title' => config('app.name'),
- # USP_THEME_SKIN deve ser colocado no .env da aplicação
- 'skin' => env('USP_THEME_SKIN', 'uspdev'),
+ # USP_THEME_SKIN deve ser colocado no .env da aplicação
+ 'skin' => env('USP_THEME_SKIN', 'uspdev'),
- # chave da sessão. Troque em caso de colisão com outra variável de sessão.
- 'session_key' => 'laravel-usp-theme',
+ # chave da sessão. Troque em caso de colisão com outra variável de sessão.
+ 'session_key' => 'laravel-usp-theme',
- # usado na tag base, permite usar caminhos relativos nos menus e demais elementos html
- # na versão 1 era dashboard_url
- 'app_url' => config('app.url'),
+ # usado na tag base, permite usar caminhos relativos nos menus e demais elementos html
+ # na versão 1 era dashboard_url
+ 'app_url' => config('app.url'),
- # login e logout
- 'logout_method' => 'POST',
- 'logout_url' => 'logout',
- 'login_url' => 'login',
- 'menu' => $menu,
- 'right_menu' => $right_menu,
+ # login e logout
+ 'logout_method' => 'POST',
+ 'logout_url' => 'logout',
+ 'login_url' => 'login',
+ 'menu' => $menu,
+ 'right_menu' => $right_menu,
];