Giter Site home page Giter Site logo

beromir / servas Goto Github PK

View Code? Open in Web Editor NEW
497.0 6.0 24.0 9.74 MB

A self-hosted bookmark management tool.

Home Page: https://servas.app

License: GNU General Public License v3.0

Shell 0.08% PHP 41.32% CSS 2.53% Svelte 50.65% Vue 0.10% JavaScript 2.48% Blade 2.38% Dockerfile 0.45%
bookmark-manager inertiajs laravel php sveltejs tailwindcss self-hosted selfhosted webapp

servas's People

Contributors

beromir avatar dependabot[bot] avatar krekas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

servas's Issues

Add a bookmarklet

I'm aware that the browser extension exists. But personally, I don't see the benefit over a simple javascript applet, that would do the same thing without adding a background process in my browser. Additionally, as a bookmarklet is a normal bookmark to a browser, it'll be synced to all connected devices (if sync is set up) and it does not require cross-platform building and testing.

Executing 'docker exec -it..'

I am deploying the instance through Portainer on a Synology NAS.. Is there a way to to run the 2 commands ( migration and generating the key ) always inside Portainer ?

Disable registration

Hello!
I was wondering if there was a feature (or if it'd be possible to add such feature) to prevent new users from registering, eg. by setting an env variable (DISABLE_REGISTRATION=true), so that we could protect our private instances from other people.

Thanks!

feature request: tags in opened link page as tag links

When opening a link and go back with clicking on link on top of page instead of browser back button, the selected tag is deselected.

Making the tags in the link page as tag links (/links?tags[0]=mytag) makes it easy to go back fast or select another tag without going bag and select a new one, if the link has multiple tags.

2023-10-02 10 00 05 c99efd17cd22 Servas_ A self-hosted bookmark management tool  _ Servas

API Enhancement Request

Hi there,

Is it possible to have the Chrome plugin prompt for Group and Media Type while adding the links thru the extension?

Currently it just adds the link without any tags,groups or media type info which kinda add additional step to saving links since after adding the links one needs to go back and edit them manually to align them to respective groups/media type/tags.

Thanks!

Feature Request: Ungrouped / Untagged items

I personally organize everything into groups, so I think two new tabs in the sidebar would make sense: ungrouped links and untagged links. This comes in handy if you just hit "safe" in the Browser extension with the intention to categorize further later on.

npm run prod > build

Hello!
I had to change the command line
npm run prod
to
npm run build
from the readme so I don't get
npm ERR! Missing script: "prod

have a nice day!

Permission error when running `docker exec -it servas php artisan key:generate --force`

When running docker exec -it servas php artisan key:generate --force I get the following error:

   ErrorException 

  file_put_contents(/var/www/html/.env): Failed to open stream: Permission denied

  at vendor/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php:109
    105106return false;
    107▕         }
    108▕ 
  ➜ 109▕         file_put_contents($this->laravel->environmentFilePath(), $replaced);
    110111return true;
    112▕     }
    113▕ 

      +15 vendor frames 

  16  artisan:35
      Illuminate\Foundation\Console\Kernel::handle()

Steps to reproduce:

  1. Download docker-compose.prod.yaml and .env.prod.example into an empty directory.
  2. Rename to docker-compose.yaml and .env respectively.
  3. Make edits to .env (see contents of both files below).
  4. Run docker-compose up -d successfully. I get the following output:
[+] Running 4/4
 ✔ Network servas_mariadb_default          Created                                                                       0.0s 
 ✔ Volume "servas_mariadb_servas-db-data"  Created                                                                       0.0s 
 ✔ Container servas_mariadb-db-1           Started                                                                       0.0s 
 ✔ Container servas                        Started                                                                       0.0s 
  1. Run docker exec -it servas php artisan key:generate --force, which gives the above mentioned error.

I tried with the SQLite container and got the same problem.

I also tried several approaches, like:

  • Clone the git repo, make the changes to docker-compose.yaml and .env and run docker-compose up -d from within the docker directory and docker/sql-example directory respectively.
  • Change the file permissions of .env to 777 (to make it readable, writeable and even executable by everyone).
  • Play with some values in docker-compose.yaml and .env, like: giving the full path instead of ./.env in the volumes section of docker-compose.yaml.

Unfortunately, nothing was able to solve the problem. Reading from the error, I assume it's a problem with the .env file not being writeable in the container, however I am not familiar enough with containers and PHP/Laravel to be able to solve it on my own. I'd love to use this bookmarks manager as it seems to be the only one I found which meets my needs (self-hosted + nested groups). Thanks in advance for your time to help me solve this.

.env content:

APP_NAME=Servas
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://localhost

SERVAS_ENABLE_REGISTRATION=true

# MySQL
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=servas_db
DB_USERNAME=servas_db_user
DB_PASSWORD=password

docker-compose.yaml (it's identical to the default):

version: "3"

services:
  db:
    image: mariadb:10.7.3
    restart: unless-stopped
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
    environment:
      - MARIADB_ROOT_PASSWORD=${DB_PASSWORD}
      - MARIADB_USER=${DB_USERNAME}
      - MARIADB_PASSWORD=${DB_PASSWORD}
      - MARIADB_DATABASE=${DB_DATABASE}
    volumes:
      - servas-db-data:/var/lib/mysql

  servas:
    image: beromir/servas
    container_name: servas
    restart: unless-stopped
    depends_on:
      - db
    ports:
      - "8080:80"
    volumes:
      - ./.env:/var/www/html/.env

volumes:
  servas-db-data:

General info about my system:

Improvement: Increase link length

The length limit for the link field in the database defaults to 255 characters, which can be too less in some situations. 500 would be a more suitable default config.

Registration page 404

Currently deploying this via Dockge. Visiting the main page of the site after installation shows the login form (at http://192.168.50.204:8186/login), but changing the url to /register gives me a 404. This is my compose file:

version: "3"
services:
  servas:
    image: beromir/servas
    container_name: servas
    restart: unless-stopped
    environment:
      - APP_NAME=Bookmarks
      - APP_ENV=production
      - APP_KEY=keyhere
      - APP_DEBUG=false
      - APP_URL=http://192.168.50.204
      - SERVAS_ENABLE_REGISTRATION=false
      - DB_CONNECTION=sqlite
      - DB_DATABASE=/var/www/html/database/sqlite/servas.db
      - DB_FOREIGN_KEYS=true
    ports:
      - 8186:80
    volumes:
      - ./servas-db-sqlite:/var/www/html/database/sqlite
networks:
  backend:
    external: true

Logs show:

servas  | Starting Migration...
servas  | 
servas  |    INFO  Nothing to migrate.  
servas  | 
servas  | Creating caches...
servas  | 
servas  |    INFO  Configuration cached successfully.  
servas  | 
servas  | 
servas  |    INFO  Blade templates cached successfully.  
servas  | 
servas  | [06-Apr-2024 04:04:54] NOTICE: fpm is running, pid 18
servas  | [06-Apr-2024 04:04:54] NOTICE: ready to handle connections
servas  | 127.0.0.1 -  06/Apr/2024:04:05:00 +0000 "GET /index.php" 200
servas  | 127.0.0.1 -  06/Apr/2024:04:05:04 +0000 "GET /index.php" 404

Not really sure what I'm missing here. Any ideas?

Thanks.

.env is a directory

when docker tries to mount the .env file and that file does not exist in the container docker will mount it as a directory.
So when I try to create the keys I get an ErrorException that .env is a directory.

I do not know how this can best be fixed but it would be nice.

Auto-Organize

Using the OpenAI API (and the user's token configured in Settings), generate automatically defined tags for links that are not yet organized.

Ensure that MFA has been setup before enabling it in the user account

The existing workflow is:

As a user, access profile settings, select "enable" on the multi-factor setting. Done.

While this is very low-impact, this means that you may potentially lock the user out if this was not enabled correctly (perhaps the user's browser session was interrupted, or the page didn't render properly). Instead, the workflow should be:

  1. Select "enable" on the multi-factor setting.
  2. Setup the MFA secret on the authenticator.
  3. Enter an MFA code into the settings page to confirm.

This will ensure that the MFA has been setup in the MFA application.

[BUG] Previously selected group shows as selected when adding multiple links back to back but is not actually set after creating a new link

Bug description:

When I add multiple links after another it shows "1 Group selected", refering to the previous links group. However when the link is created, it does not actually end up in the "selected" group.

It seems as if opening the "Select a group" dialog somehow updates the group property even clicking "cancel" immediately.

Steps to reproduce:

  1. Click "New Link"
  2. Add URL
  3. Select a group
  4. Click "Create Link"
  5. Click "New Link" again
  6. Add URL
  7. Click "Create Link"

Expected behavior:

The previous group selection should either not used when creating a new link or be set without opening the "Select a group" dialog.

Reset password

First of all, thanks for making this handy app. I use it very often to tag cetrainthings for work/private.
Using my unraid install happily until last app update. Now my original password does not work for some reason. Using sqlite.
Worked fine, no config was edited prior password issue.

Remove Duplicate Links

Please create the functionality to remove duplicate links from my favorites already in my database.

Nested Folders need improvement

This app is the only one for bookmarks I could find that supports nested groups, and I think it's a very underrated feature for organization! So thanks for making it an option in the first place.

Sadly, using the nested folders as of now is a little painful. Biggest issue is that creating sub-groups is way more effort than need be. You have to select the parent group for every single entry you want to create. Instead, the currently active group should be the parent group by default when creating a new group using the text input field. This methodology should also apply when creating new links - auto select the currently active group.

If this either goes against your vision for the app or is currently too difficult to implement, I'd ask of you to at least not reset the selected group after creating one. While that won't make creating multiple sub-groups more intuitive, at least it'll be quite a bit faster.

I also thought it might be nice to have a group tree to the side of the view, though that is very much an opinion.

Feature Request: Tag Filter in sidebar

I like the new sidebar!

Would be nice to be able to activate the tag filter in the same style as the groups.

Filtering a tag with the "Filter by Tags" button on the home needs three clicks to activate a tag filter.

I liked the old direct clickable taglist over the links on the homepage more. Faster access than the new filter button.

Error on `docker exec -it servas php artisan migrate` during initial setup

Does this look familiar to you? Not sure where things went wrong. If it helps at all, I am setting this up via a Portainer stack.

   Illuminate\Database\QueryException 

  SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: Temporary failure in name resolution (SQL: select * from information_schema.tables where table_schema = servas_db and table_name = migrations and table_type = 'BASE TABLE')

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:742
    738▕         // If an exception occurs when attempting to run a query, we'll format the error
    739▕         // message to include the bindings with SQL, which will make this exception a
    740▕         // lot more helpful to the developer instead of just the database's errors.
    741▕         catch (Exception $e) {
  ➜ 742▕             throw new QueryException(
    743▕                 $query, $this->prepareBindings($bindings), $e
    744▕             );
    745▕         }
    746▕     }

      +36 vendor frames 
  37  artisan:37
      Illuminate\Foundation\Console\Kernel::handle()

Show TOTP token as text next to QR code

Would it be possible to also show TOTP token beneath the QR code as to be able to add it to password managers that has TOTP-support but that don't handle QR scanning?

Check if all links still valid

The user should be able to use the menu option to verify all their favorites to see if they are still valid (the link should not be returning a 404 code when accessed). The user can also choose the option to delete all invalid links.

Issue: Register endpoint is not working

Issue

login endpoint works however, https://your-servas-instance/register endpoint returns a 404 page

Setup

RASP Pi 4 - 4GB
docker + portainer
APP_URL=http://127.0.0.1
sqlite option

Suggestion:

create default account and allow user to login and change or add a new one

Update Docker Image

Hey!
I really like and appreciate your bookmark management tool, but it's only usable for me if I can create subfolders on the groups view.
Either I am too stupid to create one or the latest release on docker hub (two months ago) hasn't it implemented yet.

Could you update the docker image, so I can deploy it with the latest features?

Provide feedback in UI when password is too short

I was not sure why nothing was happening when I clicked the "Register" button on the /register page form.

I realised later that I needed to make my password longer in order for it to work.
Some small validation or error state below for form input on the front-end would be helpful. I could potentially try and contribute this if you'd like?

Nice clean UI by the way.

REST API?

Are there any plans to add a REST API (or document an existing one if Laravel has such a thing)?

Feature Request: Guest Landing Page

A way to show the landing page to Guests or not signed in Users. I had a use case where I want to share my bookmarks page with my friends but I do not want them to have a account. Is that possible? For reference LinkAce does this.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.