{"id":16350428,"url":"https://github.com/eusonlito/password-manager","last_synced_at":"2025-05-16T04:07:02.613Z","repository":{"id":37399587,"uuid":"385999173","full_name":"eusonlito/Password-Manager","owner":"eusonlito","description":"Self-hosted Password Manager based on Laravel 10 + PHP 8 + MySQL 8. Gestor de Contraseñas basado en Laravel 10 + PHP 8 + MySQL 8.","archived":false,"fork":false,"pushed_at":"2024-10-30T23:10:20.000Z","size":5811,"stargazers_count":321,"open_issues_count":3,"forks_count":68,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-05-12T13:33:11.937Z","etag":null,"topics":["laravel","password-manager","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eusonlito.png","metadata":{"files":{"readme":"readme.es.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-14T16:06:51.000Z","updated_at":"2025-05-09T13:47:35.000Z","dependencies_parsed_at":"2024-12-08T04:03:14.206Z","dependency_job_id":null,"html_url":"https://github.com/eusonlito/Password-Manager","commit_stats":{"total_commits":302,"total_committers":10,"mean_commits":30.2,"dds":0.09602649006622521,"last_synced_commit":"b6852827f8806f521a5a12d215a3db8de908b1b8"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eusonlito%2FPassword-Manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eusonlito%2FPassword-Manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eusonlito%2FPassword-Manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eusonlito%2FPassword-Manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eusonlito","download_url":"https://codeload.github.com/eusonlito/Password-Manager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254464897,"owners_count":22075571,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["laravel","password-manager","php"],"created_at":"2024-10-11T01:04:56.781Z","updated_at":"2025-05-16T04:06:57.604Z","avatar_url":"https://github.com/eusonlito.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"[English](readme.md)\n\n### Gestor de Contraseñas\n\nEsta aplicación permite una gestión completa de contraseñas para múltiples tipos de servicios (web, ssh, teléfonos, wifi, etc...).\n\nLos datos de cada aplicación se guardan cifrados en base de datos.\n\n\u003e **El cifrado de estos datos se realiza usando el valor de `APP_KEY` como salt, con lo cual es importantísimo no regenerar esta key o perderás el acceso a todas las aplicaciones registradas.**\n\n\u003e **Ni se te ocurra instalar este proyecto en un entorno sin protección HTTPS**\n\nLas características principales son:\n\n* Gestión de usuarios.\n* Gestión de equipos.\n* Acceso a aplicaciones limitadas por equipos.\n* Múltiples tipos de datos a registrar.\n* Cifrado en base de datos.\n* Autenticación por certificado y doble factor con Google Authenticator.\n* Usando certificado puedes desactivar el acceso por contraseña.\n* Dispone de un log que registra cada vez que algún usuario accede, consulta o actualiza una aplicación.\n* Permite aplicaciones privadas o compartidas.\n* Limitación de acceso por país.\n* Dispone de una extensión de chrome que se conecta vía API y accede directamenete a las credenciales de la web que estás visitando.\n* Solicitud de contraseña de API cada vez que se accede desde una IP diferente.\n\nEste proyecto dispone de una extensión para Google Chrome que puedes descargar en https://github.com/eusonlito/Password-Manager-Chrome\n\n### Requisitos\n\n- Apache2 (nginx no soporta autenticación con certificado limitado a ciertas rutas)\n- PHP 8.1 o superior (php-curl php-imagick php-mbstring php-mysql php-zip)\n- MySQL 8.0\n- ImageMagick\n\nSi la versión por defecto de tu servidor es inferior a PHP 8.1 siempre debes usar el prefijo de versión, tanto para `composer` como para `artisan`, por ejemplo:\n\n```bash\nphp8.1 ./composer install --no-dev --optimize-autoloader --classmap-authoritative --ansi\n```\n\n```bash\nphp8.1 artisan key:generate\n```\n\n### Instalación Local\n\n1. Creamos la base de datos en MySQL.\n\n2. Clonamos el repositorio.\n\n```bash\ngit clone https://github.com/eusonlito/Password-Manager.git\n```\n\n3. Copia el fichero `.env.example` como `.env` y rellena las variables necesarias.\n\n```bash\ncp .env.example .env\n```\n\n4. Realizamos la primera instalación (recuerda que siempre usando el binario de PHP 8.1).\n\n```bash\n./composer install --no-dev --optimize-autoloader --classmap-authoritative --ansi\n```\n\n5. Generamos la clave de aplicación. Recuerda guardar una copia de seguridad de esta clave (`.env` \u003e `APP_KEY`).\n\n```bash\nphp artisan key:generate\n```\n\n6. Regeneramos las cachés.\n\n```bash\n./composer artisan-cache\n```\n\n7. Lanzamos la migración inicial.\n\n```bash\nphp artisan migrate\n```\n\n8. Lanzamos el seeder.\n\n```bash\nphp artisan db:seed --class=Database\\\\Seeders\\\\Database\n```\n\n9. Configuramos la tarea cron para el usuario relacionado con el proyecto:\n\n```\n* * * * * cd /var/www/password.domain.com \u0026\u0026 php artisan schedule:run \u003e\u003e storage/logs/artisan-schedule-run.log 2\u003e\u00261\n```\n\n10. Creamos el usuario principal.\n\n```bash\nphp artisan user:create --email=user@domain.com --name=Admin --password=StrongPassword2 --admin\n```\n\n11. Configuramos el servidor para acceso web con `DOCUMENT_ROOT` en `public`.\n\n12. Profit!\n\n#### Actualización\n\nLa actualización de la plataforma se puede realizar de manera sencilla con el comando `composer deploy` ejecutado por el usuario que gestiona ese projecto (normalmente `www-data`).\n\n### Instalación vía Docker\n\nActualmente debería ser usado únicamente para testing (no soporta autenticación con certificado).\n\n1. Clonamos el repositorio.\n\n```bash\ngit clone https://github.com/eusonlito/Password-Manager.git\n```\n\n2. [OPCIONAL] Copia el fichero `docker/.env.example` en `.env` y configura tus propios ajustes\n\n```bash\ncp docker/.env.example .env\n```\n\n3. [OPCIONAL] Copia el fichero `docker/docker-compose.yml.example` en `docker/docker-compose.yml` y configura tus propios ajustes\n\n```bash\ncp docker/docker-compose.yml.example docker/docker-compose.yml\n```\n\n4. Realizamos el build (pedirá la contraseña de sudo)\n\n```bash\n./docker/build.sh\n```\n\n5. Iniciamos los contenedores (pedirá la contraseña de sudo)\n\n```bash\n./docker/run.sh\n```\n\n6. Creamos el usuario principal (pedirá la contraseña de sudo)\n\n```bash\n./docker/user.sh\n```\n\n7. Ya podemos acceder desde http://localhost:8080\n\n8. Recuerda añadir un servidor web (apache2, nginx, etc...) como proxy para añadir funcionalidades como SSL.\n\n#### Actualización\n\n1. Actualizamos el código del proyecto\n\n```bash\ngit pull\n```\n\n2. Realizamos el build (pedirá la contraseña de sudo)\n\n```bash\n./docker/build.sh\n```\n\n3. Iniciamos los contenedores (pedirá la contraseña de sudo)\n\n```bash\n./docker/run.sh\n```\n\n4. Ya podemos acceder desde http://localhost:8080\n\n### Autenticación con Certificado\n\nPara poder realizar la autenticación con certificado debemos añadir la siguiente configuración en el `VirtualHost` de Apache:\n\n```\n\u003cLocation /user/profile/certificate\u003e\n        SSLVerifyClient require\n        SSLVerifyDepth 2\n        SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate\n\u003c/Location\u003e\n\n\u003cLocation /user/auth/certificate\u003e\n        SSLVerifyClient require\n        SSLVerifyDepth 2\n        SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate\n\u003c/Location\u003e\n\nSSLCACertificateFile /var/www/password.domain.com/resources/certificates/certificates.pem\n```\n\nLa localización `/user/profile/certificate` permite obtener el identificador del certificado automáticamente desde el propio perfil de usuario, y `/user/auth/certificate` es la ruta de autenticación por certificado.\n\nLa opción de `OptRenegotiate` le permite a Apache renegociar la conexión de manera independiente por ruta, algo que nginx no soporta.\n\n### Comandos\n\nAlta de usuario:\n\n```bash\nphp artisan user:create {--email=} {--name=} {--password=} {--admin} {--readonly} {--teams=}\n```\n\nActualización de usuario:\n\n```bash\nphp artisan user:update {--id=} {--email=} {--name=} {--password=} {--certificate=} {--tfa_enabled=} {--admin=} {--readonly=} {--enabled=} {--teams=}\n```\n\n### Ayuda!\n\nPues estaría guay un poco de ayuda para mejorar la traducción a inglés en [`resources/lang/en`](resources/lang/en), así como el [`readme.en.md`](readme.en.md).\n\n### Capturas\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019854-2d313657-29ec-48e8-bb8e-9802eb05858f.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019842-4ea81ac4-a8c3-405a-92d5-d174b5997b93.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019852-94612c82-03a3-4328-91d7-0c1c918056aa.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019851-1b6f845a-c5cf-4870-b056-d86c1b9d46e2.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019849-c63330dc-0c19-4ea6-90fe-c519c5b91091.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019846-f44500b9-302b-47e6-91df-afe8918c732d.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019845-03d88565-71e1-4cff-85a4-5c41042c72d6.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019834-9ac49dbc-fcab-4129-aeea-8ca0906c99db.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019829-8015cb2e-db1a-4100-8a0d-088e5e17411a.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019826-dc34723b-e446-4541-b14c-36d7b4b81e16.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019838-9bad81b4-1e9b-4591-a8c1-44193130a117.png)\n\n![Password-Manager](https://user-images.githubusercontent.com/644551/128019844-f74e3b26-57fa-48b9-8849-0410f8e0b99b.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feusonlito%2Fpassword-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feusonlito%2Fpassword-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feusonlito%2Fpassword-manager/lists"}