Commit 541c86dc authored by Manuel Muñoz's avatar Manuel Muñoz

Merge branch 'develop' into 'staging'

se agrega opción de certificado en acción rest

See merge request !174
parents d329586d b7b9dd0d
Pipeline #4714 passed with stage
in 6 minutes and 43 seconds
......@@ -7,6 +7,7 @@ use AccionEventoAnalytics;
use AccionWebservice;
use AccionVariable;
use AccionRest;
use AccionRestCertificado;
use AccionSoap;
use AccionCallback;
use AccionNotificaciones;
......@@ -148,7 +149,6 @@ class ActionController extends Controller
public function edit($accion_id)
{
Log::info("####En Editar, id: " . $accion_id);
$accion = Doctrine::getTable('Accion')->find($accion_id);
if ($accion->Proceso->cuenta_id != Auth::user()->cuenta_id) {
......@@ -205,6 +205,24 @@ class ActionController extends Controller
$accion->tipo = $request->input('tipo');
}
$certificado = NULL;
if($accion->tipo == 'rest'){
if ($request->hasFile('extra')){
$file = $request->file('extra');
$directorio_certificados = public_path('uploads/certificados');
if(!file_exists($directorio_certificados)){
mkdir($directorio_certificados, 0777, true);
}
$filename = $accion->proceso_id.'-'.date('his').'-'.$file['crt']->getClientOriginalName();
$upload_success = $file['crt']->move($directorio_certificados,$filename);
$certificado = $filename;
}else{
if($request->has('certificado')){
$certificado = $request->input('certificado');
}
}
}
if ($accion->Proceso->cuenta_id != Auth::user()->cuenta_id) {
echo 'Usuario no tiene permisos para editar esta accion.';
exit;
......@@ -221,13 +239,20 @@ class ActionController extends Controller
]);
}
$accion->nombre = $request->input('nombre');
$accion->extra = $request->input('extra', false);
$array_extra = $request->input('extra', false);
if(!is_null($certificado)){
$array_extra['crt'] = $certificado;
$accion->extra = $array_extra;
}else{
$accion->extra = $array_extra;
}
$accion->save();
return response()->json([
'validacion' => true,
'redirect' => route('backend.action.list', [$accion->Proceso->id])
]);
// return response()->json([
// 'validacion' => true,
// 'redirect' => route('backend.action.list', [$accion->Proceso->id])
// ]);
return redirect()->route('backend.action.list', [$accion->Proceso->id]);
}
/**
......@@ -591,4 +616,33 @@ class ActionController extends Controller
ob_end_clean();
return $ret_val;
}
/**
* @param $accion_id
* @return \Illuminate\Http\RedirectResponse
* @throws \Exception
*/
public function eliminar_certificado($accion_id){
$accion = Doctrine::getTable('Accion')->find($accion_id);
if ($accion->Proceso->cuenta_id != Auth::user()->cuenta_id) {
echo 'Usuario no tiene permisos para eliminar esta accion.';
exit;
}
$json_extra = json_decode(json_encode($accion->extra), true);
foreach($json_extra as $key => $value){
if(array_key_exists('crt',$json_extra)){
if(file_exists(public_path('uploads/certificados/').$json_extra['crt'])){
unlink(public_path('uploads/certificados/').$json_extra['crt']);
}
unset($json_extra['crt']);
}
}
$accion->extra = $json_extra;
$accion->save();
$proceso = $accion->Proceso;
return redirect()->route('backend.action.list', [$proceso->id]);
}
}
......@@ -119,10 +119,45 @@ class AccionRest extends Accion
<span id="resultHeader" class="spanError"></span>
<br /><br />
</div>';
$display .= '
<label>Certificado</label>
<div class="form-group form-inline">
<input type="file" class="form-control col-5 AlignText" name="extra[crt]" />
</div>';
$display .= '<input type="hidden" class="form-control col-2" name="certificado" value="' . ($this->extra && isset($this->extra->crt) && $this->extra->crt ? $this->extra->crt : '') . '" />';
$display .= '<a href="#" class="alert-link"> ' . ($this->extra && isset($this->extra->crt) && $this->extra->crt ? $this->extra->crt : '') . ' </a><br><br> ';
$display .= '<div id="modalImportarCrt" class="modal hide fade">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Importar Archivo Rest</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p>Cargue a continuación el archivo .crt del Servicio Rest.</p>
<input type="file" name="archivo" />
<input id="' . $this->id . '" type="hidden" name="' . $this->nombre . '" value="" />
</div>
<div class="modal-footer">
<button class="btn btn-light" data-dismiss="modal" aria-hidden="true">Cerrar</button>
<button type="button" id="btn-load" class="btn btn-primary" onclick="CargarCrt()">Importar</button>
</div>
</div>
</div>
</div>
<div id="modal" class="modal hide fade"></div>';
$display .= '
<label>Seguridad</label>
<select id="tipoSeguridad" class="form-control col-2" name="extra[idSeguridad]">
<option value="-1">Sin seguridad</option>';
foreach ($conf_seguridad as $seg) {
if (!is_null($this->extra) && isset($this->extra->idSeguridad) && $this->extra->idSeguridad && $this->extra->idSeguridad == $seg->id) {
$display .= '<option value="' . $seg->id . '" selected>' . $seg->institucion . ' - ' . $seg->servicio . '</option>';
......@@ -141,6 +176,7 @@ class AccionRest extends Accion
'extra.var_response' => 'required',
'extra.url' => 'required',
'extra.uri' => 'required',
], [
'extra.var_response.required' => 'El campo Variable de respuesta es obligatorio',
'extra.url.required' => 'El campo Endpoint es obligatorio',
......@@ -152,9 +188,10 @@ class AccionRest extends Accion
public function ejecutar($tramite_id)
{
$etapa = $tramite_id;
$msg = "Ejecuta REST";
try {
//$crt = $this->extra->crt;
Log::info("Ejecutando llamado REST");
($this->extra->timeout ? $timeout = $this->extra->timeout : $timeout = 30);
......@@ -180,16 +217,19 @@ class AccionRest extends Accion
Log::info("Server: " . $server);
Log::info("Resource: " . $uri);
$seguridad = new SeguridadIntegracion();
$seguridad = new SeguridadIntegracion(); //Para usuario - clave servicio
$idSeguridad = null;
if (isset($this->extra->idSeguridad)) {
$idSeguridad = $this->extra->idSeguridad;
}
$config = $seguridad->getConfigRest($idSeguridad, $server, $timeout);
Log::info("Config: " . $this->varDump($config));
$crt = null;
if (isset($this->extra->crt)) {
$crt = public_path('uploads/certificados/').$this->extra->crt;
}
$config = $seguridad->getConfigRest($idSeguridad, $server, $timeout, $crt);
$request = '';
if (isset($this->extra->request)) {
......@@ -211,7 +251,7 @@ class AccionRest extends Accion
$request = $r->getExpresionParaOutput($etapa->id);
}
Log::info("Request: " . $request);
//log::info("Request: " . $request);
$headers = array();
......@@ -237,10 +277,10 @@ class AccionRest extends Accion
$ultimo_codigo_http = -1;
do {
$paramType = isset($this->extra->paramType) ? $this->extra->paramType : GuzzleHttp\RequestOptions::JSON;
try {
// Se ejecuta la llamada segun el metodo
if ($this->extra->tipoMetodo == "GET") {
$result = $client->request('GET', $uri);
......@@ -297,7 +337,6 @@ class AccionRest extends Accion
$result2 = $response;
}
}
Log::debug("Respuesta REST: " . $this->varDump($result2));
}
......
......@@ -5,11 +5,13 @@ use App\Helpers\Doctrine;
class SeguridadIntegracion
{
public function getConfigRest($id_seguridad, $server, $timeout)
public function getConfigRest($id_seguridad, $server, $timeout, $crt) //, $crt
{
$tipo_seguridad = "none";
Log::debug("Seguridad_integracion=> ".$crt);
if (isset($id_seguridad) && strlen($id_seguridad) > 0 && $id_seguridad > 0) {
$seguridad = Doctrine::getTable('Seguridad')->find($id_seguridad);
$tipo_seguridad = $seguridad->extra->tipoSeguridad;
......@@ -25,12 +27,19 @@ class SeguridadIntegracion
switch ($tipo_seguridad) {
case "HTTP_BASIC":
//Seguridad basic
$config = array(
'timeout' => $timeout,
'base_uri' => $server,
'auth' => [$user, $pass],
'http_auth' => 'Basic'
'http_auth' => 'Basic',
'verify' => $crt
);
/*if(isset($crt)){
$config['cert'] = $crt; //es para los .pem
}*/
break;
case "API_KEY":
//Seguriad api key
......@@ -73,9 +82,7 @@ class SeguridadIntegracion
);
break;
}
return $config;
}
public function setSecuritySoap($client, $idSeguridad)
......
......@@ -14,7 +14,7 @@
@include('backend.process.nav')
<form id="plantillaForm" class="ajaxForm" method="POST" onsubmit="return"
<form id="plantillaForm" enctype="multipart/form-data" method="POST" onsubmit="return"
action="<?=route('backend.action.edit_form', ($edit ? [$accion->id] : ''))?>">
{{csrf_field()}}
<fieldset>
......
......@@ -46,11 +46,18 @@
<a class="btn btn-light" href="<?=route('backend.action.export', [$p->id])?>">
<i class="material-icons">file_download</i> Exportar
</a>
<a href="<?=route('backend.action.eliminar', [$p->id])?>" class="btn btn-light btn-danger"
<a href="<?=route('backend.action.eliminar', [$p->id])?>" class="btn btn-danger"
onclick="return confirm('¿Esta seguro que desea eliminar?')">
<i class="material-icons">delete</i>
Eliminar
</a>
@if($p->extra && isset($p->extra->crt) && $p->extra->crt)
<a href="<?=route('backend.action.eliminar_certificado', [$p->id])?>" class="btn btn-danger"
onclick="return confirm('¿Esta seguro que desea eliminar el certificado?')">
<i class="material-icons">delete</i>
Eliminar certificado
</a>
@endif
</td>
</tr>
@endforeach
......
......@@ -133,6 +133,7 @@ Route::prefix('backend')->namespace('Backend')->name('backend.')->group(function
Route::get('acciones/ajax_seleccionar/{proceso_id}', 'ActionController@ajax_seleccionar')->name('action.ajax_seleccionar');
Route::post('acciones/seleccionar_form/{proceso_id}', 'ActionController@seleccionar_form')->name('action.seleccionar_form');
Route::post('acciones/functions_soap', 'ActionController@functions_soap')->name('action.functions_soap');
Route::get('acciones/eliminar_certificado/{accion_id}', 'ActionController@eliminar_certificado')->name('action.eliminar_certificado');
Route::get('formularios/obtener_agenda', 'FormsController@obtener_agenda')->name('forms.obtener_agenda');
Route::post('formularios/importar', 'FormsController@import')->name('forms.import');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment