beromir / servas Goto Github PK
View Code? Open in Web Editor NEWA self-hosted bookmark management tool.
Home Page: https://servas.app
License: GNU General Public License v3.0
A self-hosted bookmark management tool.
Home Page: https://servas.app
License: GNU General Public License v3.0
Please create the functionality to remove duplicate links from my favorites already in my database.
please!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
thank you!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Using the OpenAI API (and the user's token configured in Settings), generate automatically defined tags for links that are not yet organized.
As the title says, it would be nice to be able to search for links that don't have a tag or a default notag tag, that is automatic added to links without an tag.
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!
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.
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 ?
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:
This will ensure that the MFA has been setup in the MFA application.
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!
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.
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.
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.
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?
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.
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.
Since Firefox extensions can only add URL, this can be inconvenient. This should be fine if the extension can add a title and tags.
Also, the API seems to accept only the URL. Hope this can also support for adding a title and tags.
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.
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
105▕
106▕ return false;
107▕ }
108▕
➜ 109▕ file_put_contents($this->laravel->environmentFilePath(), $replaced);
110▕
111▕ return true;
112▕ }
113▕
+15 vendor frames
16 artisan:35
Illuminate\Foundation\Console\Kernel::handle()
Steps to reproduce:
docker-compose.yaml
and .env
respectively..env
(see contents of both files below).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
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:
docker-compose.yaml
and .env
and run docker-compose up -d
from within the docker
directory and docker/sql-example
directory respectively..env
to 777
(to make it readable, writeable and even executable by everyone).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:
Replace Laravel Mix with Vite.
Are there any plans to add a REST API (or document an existing one if Laravel has such a thing)?
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.
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?
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!
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.
The previous group selection should either not used when creating a new link or be set without opening the "Select a group" dialog.
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.
The error: -
docker exec -it servas php artisan key:generate --force
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
105▕
106▕ return false;
107▕ }
108▕
➜ 109▕ file_put_contents($this->laravel->environmentFilePath(), $replaced);
110▕
111▕ return true;
112▕ }
113▕
+15 vendor frames
16 artisan:35
Illuminate\Foundation\Console\Kernel::handle()
my docker-compose.yml file: - (using port 3002 because I use a reverse proxy with other apps)
version: "3"
services:
servas:
image: beromir/servas
container_name: servas
restart: unless-stopped
ports:
- "3002:80"
volumes:
- ./.env:/var/www/html/.env
- servas-db-sqlite:/var/www/html/database/sqlite
volumes:
servas-db-sqlite:
My .env file:-
APP_NAME=Servas
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=<my url>
SERVAS_ENABLE_REGISTRATION=true
# SQLite
DB_CONNECTION=sqlite
DB_DATABASE=/var/www/html/database/sqlite/servas.db
DB_FOREIGN_KEYS=true
login endpoint works however, https://your-servas-instance/register
endpoint returns a 404 page
RASP Pi 4 - 4GB
docker + portainer
APP_URL=http://127.0.0.1
sqlite option
create default account and allow user to login and change or add a new one
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()
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.
Would it be possible to have the 'create group' dialog automatically select the current group if the user is not displaying the top level? This would greatly simplify the process of creating nested groups.
Looking to use this in my self-host raspberry pi server however it does not run
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.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.