{"id":45173062,"url":"https://github.com/udistrital/utils_oas","last_synced_at":"2026-02-20T08:33:05.499Z","repository":{"id":29965183,"uuid":"122345313","full_name":"udistrital/utils_oas","owner":"udistrital","description":":checkered_flag: Production: Utilidades transversales de golang para las APIS en Beego","archived":false,"fork":false,"pushed_at":"2025-12-18T06:12:35.000Z","size":424,"stargazers_count":0,"open_issues_count":6,"forks_count":1,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-12-21T15:05:48.093Z","etag":null,"topics":["cross","transversal"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/udistrital.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":"auditoria/.gitignore","citation":null,"codeowners":null,"security":"security/security_headers.go","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-02-21T14:15:53.000Z","updated_at":"2025-12-18T06:11:03.000Z","dependencies_parsed_at":"2024-04-22T01:24:14.775Z","dependency_job_id":"e5eb7b48-50d9-454b-b520-20f8ece3123e","html_url":"https://github.com/udistrital/utils_oas","commit_stats":{"total_commits":172,"total_committers":17,"mean_commits":"10.117647058823529","dds":0.8488372093023255,"last_synced_commit":"fbd949fcf4e24020cec31529efd4ec87685b93ff"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/udistrital/utils_oas","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udistrital%2Futils_oas","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udistrital%2Futils_oas/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udistrital%2Futils_oas/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udistrital%2Futils_oas/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/udistrital","download_url":"https://codeload.github.com/udistrital/utils_oas/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udistrital%2Futils_oas/sbom","scorecard":{"id":906931,"data":{"date":"2025-08-11","repo":{"name":"github.com/udistrital/utils_oas","commit":"359441f29002c0c1beaff381f6b3f8eedcd48715"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":4,"reason":"Found 8/19 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":5,"reason":"6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 22 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":4,"reason":"6 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0463","Warn: Project is vulnerable to: GO-2022-0569","Warn: Project is vulnerable to: GO-2022-0572","Warn: Project is vulnerable to: GO-2022-0635","Warn: Project is vulnerable to: GO-2022-0646","Warn: Project is vulnerable to: GO-2022-0322 / GHSA-cg3q-j54f-5p7p"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T17:41:17.134Z","repository_id":29965183,"created_at":"2025-08-24T17:41:17.135Z","updated_at":"2025-08-24T17:41:17.135Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29645874,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T05:21:04.652Z","status":"ssl_error","status_checked_at":"2026-02-20T05:21:04.238Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cross","transversal"],"created_at":"2026-02-20T08:33:05.000Z","updated_at":"2026-02-20T08:33:05.490Z","avatar_url":"https://github.com/udistrital.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# utils_oas\n\nEste es un paquete de librerías y utilidades generales para las aplicaciones desarrolladas en el framework beego que hacen parte de la arquitectura de APIs REST de la OAS.\n\n## Librerías Incluídas\n\n### apiStatusLib (:heavy_check_mark:)\n\nPara desplegar satisfactoriamente un api dentro de la infraestructura de la OAS, se debe crear un servicio el cual será constantemente consultado para verificar el estado de salud del mismo, esto se conoce como health check.\nEl `apiStatusLib` Proporcion un servicio en la rais de la API con estadus 200.\n\n### customerror (:heavy_check_mark:)\n\nLa utilidad `customerror` proporciona a la estructura `beego.Controller` unas plantillas de error que retornan una estructura json en todos los servicios del API.\nEstablece adecuadamente el estatus correspondiente para cada servicio al ser una ejecución exitosa o fallida según el [código de estado HTTP](https://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP).\nPara implementar esta utilidad se debe refactorizar el api con el siguiente programa. [refactor_controller](https://github.com/udistrital/refactor_controller)\n\n### customerrorv2 (:heavy_check_mark:)\n\nCorresponde a la versión 2 del `customerror`.\nSe mejora la implementación del json en la respuesta de los servicios.\nSe mitiga la exposición de información confidencial en la estructura de errores.\n\n### formatdata\n\nFuncionalidades para la conversión y trabajo de estructuras JSON\n\n### optimize\n\nFuncionalidades de optimización con procesamiento de datos en golang\n\n### request\n\nFuncionalidades para el consumo de servicios JSON desde una API\n\n### ruler\n\nFuncionalidades para las reglas de negocio\n\n### security\n\nFuncionalidades de seguridad para aplicaciones híbridas o legadas.\n\n### time_bogota\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eImplementación\u003c/b\u003e\u003c/summary\u003e\n\nimportar:\n\n```go\n\"github.com/udistrital/utils_oas/time_bogota\"\n```\n\n3 funcinalidades:\n\n- Tiempo_bogota :\n  Da la hora de Bogota sin importar la zona horaria de la maquina o contenedor\n\n  **_usar en codigo (remplarar)_**\n\n  ```go\n  VariableDeTiempo = tiem.Now()\n  ```\n\n  por\n\n  ```go\n  VariableDeTiempo = time_bogota.Tiempo_bogota()\n  ```\n\n- TiempoBogotaFormato()\n\n  **_(Nota : esta funcion funciona perfectamente en peticiones POST, para los put puede mandar lio asi que se recomienda usar para los PUT la tercera funcion aqui nombrada)_**\n\n  Esta funcion da el formato para la hora y que esta sea aceptada por la base de datos.\n\n  ya que esta funcion retorna un string, se debe cambiar en los modelos del api donde se quiera usar la funcion, esto evitara problemas con la hora y que genere una hora con UTC 0\n\n  **_en codigo_**\n\n  ```go\n  type ResolucionEstado struct {\n      Id            int\n      FechaRegistro time.Time\n      Usuario       string\n      Estado        *EstadoResolucion\n      Resolucion    *Resolucion\n  }\n  ```\n\n  por\n\n  ```go\n  type ResolucionEstado struct {\n      Id            int\n      FechaRegistro string\n      Usuario       string\n      Estado        *EstadoResolucion\n      Resolucion    *Resolucion\n  }\n  ```\n\n  ***\n\n  ```go\n  VariableDeTiempo = tiem.Now()\n  ```\n\n  por\n\n  ```go\n  VariableDeTiempo = time_bogota.TiempoBogotaFormato()\n  ```\n\n- TiempoCorreccionFormato(inputDate string):\n  Esta funcion recibe un string y devuelve otro transformado, esta funcion surge como solucion al problema de que las fechas al traerlas de la base de datos pueden llegar en el siguiente formato `2019-10-08 18:26:45.58 +0000 +0000`, este formato al hacer un update en la base de datos provoca errores, por ende esta funcion realiza la correccion\n\n  para usarla se usara el siguiente ejemplo, suponga que de la base de datos trae una fecha y se llama `FechaFin` y su valor al imprimirlo es el siguiente : `2019-10-08 18:26:45.58 +0000 +0000` para corregirlo realice lo siguiente:\n\n  ```go\n  FechaFin = time_bogota.TiempoCorreccionFormato(FechaFin)\n  ```\n\n  esto le devolvera la fecha en el siguiente formato : `2019-10-08T18:26:45.58Z` el cual la ase de datos recibira.\n\n\u003c/details\u003e\n\n## Desarrollo\n\nTeniendo en cuenta que este paquete es de utilidades, es de esperar\nque en vez se trabajarse por aparte, se valide con otra aplicación que `import`e\neste paquete. *Asumiendo\nque los siguientes comandos se ejecutan desde una aplicación que\nimporta este paquete, por ejemplo, desde configuracion_crud*; Se propone el siguiente flujo de desarrollo:\n\n```bash\n# 1. Desde el repositorio que importe esta librería, ej, configuracion_crud\n# Indicarle al go.mod que reemplace utils_oas con una version local\ngo mod edit -replace github.com/udistrital/utils_oas=../utils_oas\n\n# 2. Sincronizar los go.mod/sum - Al ser un reemplazo temporal, deberá ignorarse\n# mas adelante en el commit, ojo!\ngo mod tidy\n\n# ------- Hacer pruebas y ajustes necesarios en ambos repositorios -----------\n\n# 3. Una vez finalizadas las pruebas, abrir un PR en utils_oas\n# Y DESCARTAR LOS CAMBIOS A LOS go.mod/sum derivados de 1. y 2.:\ngit checkout go.mod go.sum\n\n# 4. Una vez aprobado el PR en utils_oas, lo único que resta es actualizar\n# la versión importada en el/los repos que importen utils_oas, simplemente con\ngo get -u github.com/udistrital/utils_oas\n```\n\n## Licencia\n\nThis file is part of utils_oas.\n\nutils_oas is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nFoobar is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Foobar. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fudistrital%2Futils_oas","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fudistrital%2Futils_oas","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fudistrital%2Futils_oas/lists"}