code:
name: "Goreleaser"

on: workflow_call

permissions:
  contents: write

jobs:
  goreleaser:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
        with:
          fetch-depth: 0
      - if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
        run: echo "flags=--snapshot" >> $GITHUB_ENV
      - name: Setup Go
        uses:  actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
        with:
          go-version-file: 'go.mod'
      - name: Run GoReleaser
        uses: goreleaser/goreleaser-action@7ec5c2b0c6cdda6e8bbb49444bc797dd33d74dd8 # 5.0.0
        with:
          distribution: goreleaser
          version: latest
          args: release --rm-dist ${{ env.flags }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # 3.1.3
        with:
          name: dist
          path: ./dist/*


code:
name: "styles-check"

on: workflow_call

jobs:
  styles-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

      - name: Setup Bun
        uses: oven-sh/setup-bun@a1800f471a0bc25cddac36bb13e6f436ddf341d7 # v1
        with:
          bun-version: "1.0.1"

      - name: Check
        run: make styles-check

repo_name: orochi/shiori

license: mit


code:
name: "swagger-check"

on: workflow_call

jobs:
  swagger-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

      - name: Setup Go
        uses:  actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
        with:
          go-version-file: 'go.mod'

      - name: Install dependencies
        run: go install $(cat go.mod | grep swaggo/swag | cut -d " " -f 1)/cmd/swag@$(cat go.mod | grep swaggo/swag | cut -d " " -f 2)

      - name: check
        run: make swag-check


code:
name: "Unit Tests"

on: workflow_call

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:15
        env:
          POSTGRES_PASSWORD: shiori
          POSTGRES_USER: shiori
        options: >-
          --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
        ports:
        - 5432:5432
      mariadb:
        image: mariadb:11
        env:
          MYSQL_USER: shiori
          MYSQL_PASSWORD: shiori
          MYSQL_DATABASE: shiori
          MYSQL_ROOT_PASSWORD: shiori
        options: >-
          --health-cmd="/usr/local/bin/healthcheck.sh --connect" --health-interval 10s --health-timeout 5s --health-retries 5
        ports:
        - 3306:3306

    name: Go unit tests
    steps:
    - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

    - name: Setup go
      uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
      with:
        go-version-file: ./go.mod

    - name: Set up gotestfmt
      uses: gotesttools/gotestfmt-action@65f1d2228f06cc5e828b84597440fbd063d12ea2 # v2.1.0

    - uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # 3.3.2
      with:
        path: |
          ~/.cache/go-build
          ~/go/pkg
        key: golangci-lint.cache-{platform-arch}-{interval_number}-{go.mod_hash}
        restore-keys: |
          golangci-lint.cache-{interval_number}-
          golangci-lint.cache-

    - run: make unittest
      env:
        SHIORI_TEST_PG_URL: "postgres://shiori:shiori@localhost:5432/shiori?sslmode=disable"
        SHIORI_TEST_MYSQL_URL: "shiori:shiori@(localhost:3306)/shiori"

    - run: CGO_ENABLED=0 go build -tags osusergo,netgo -ldflags="-s -w -X main.version=$(git describe --tags) -X main.date=$(date --iso-8601=seconds)"

    - name: Upload coverage reports to Codecov
      uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # 3.1.4
      env:
        CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}


code:
FROM ghcr.io/ghcri/alpine:3.15
ARG TARGETARCH
LABEL org.opencontainers.image.source https://github.com/go-shiori/shiori
COPY etc /etc
COPY binaries/shiori_linux_$TARGETARCH/shiori /usr/bin/shiori
USER shiori
WORKDIR /shiori
EXPOSE 8080
ENV SHIORI_DIR=/shiori
ENTRYPOINT ["/usr/bin/shiori"]
CMD ["server"]


code:
root:x:0:root
shiori:x:1000:shiori

path: .github/workflows/docker/etc/group


path: .github/workflows/docker/etc/passwd


code:
name: 'Pull Request'

on:
  pull_request:
    branches:
    - master

concurrency:
  group: ci-tests-${{ github.ref }}-1
  cancel-in-progress: true

jobs:
  call-lint:
    uses: ./.github/workflows/_golangci-lint.yml
  call-test:
    uses: ./.github/workflows/_test.yml
  call-swagger-check:
    uses: ./.github/workflows/_swagger-check.yml
  call-styles-check:
    uses: ./.github/workflows/_styles-check.yml
  call-gorelease:
    needs: [call-lint, call-test, call-swagger-check, call-styles-check]
    uses: ./.github/workflows/_gorelease.yml
  call-buildx:
    needs: call-gorelease
    # only build on pull requests from the same repo for now
    if: github.event.pull_request.head.repo.full_name == github.repository
    uses: ./.github/workflows/_buildx.yml


code:
name: 'Clean up Docker images from PR'

on:
  pull_request:
    types:
    - closed

jobs:
  delete-tag:
    uses: ./.github/workflows/_delete-registry-tag.yml
    with:
      tag_name: pr-${{ github.event.pull_request.number }}


code:
name: 'Push'

on:
  push:
    branches: master
    tags: v*

concurrency:
  group: ci-tests-${{ github.ref }}-1
  cancel-in-progress: true

jobs:
  call-lint:
    uses: ./.github/workflows/_golangci-lint.yml
  call-test:
    uses: ./.github/workflows/_test.yml
  call-gorelease:
    needs: [call-lint, call-test]
    uses: ./.github/workflows/_gorelease.yml
  call-buildx:
    needs: call-gorelease
    uses: ./.github/workflows/_buildx.yml


code:
name: "Tag release"

on:
  workflow_dispatch:
    inputs:
      version:
        description: "Version to bump to, example: v1.5.2"
        required: true
      ref:
        description: "Ref to release from"
        required: true
        type: string
        default: master

jobs:
  tag-release:
    runs-on: ubuntu-latest
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - name: Checkout
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
        with:
          fetch-depth: 0
          ref: ${{ inputs.ref }}
      - name: Tag release
        run: |
          git config user.email "${{github.repository_owner}}@users.noreply.github.com"
          git config user.name "${{github.repository_owner}}"
          git tag -a ${{ github.event.inputs.version }} -m "tag release ${{ github.event.inputs.version }}"
          git push --follow-tags
  call-gorelease:
    needs: tag-release
    uses: ./.github/workflows/_gorelease.yml
  call-buildx:
    needs: call-gorelease
    uses: ./.github/workflows/_buildx.yml


code:
# Exclude IDE
.vscode/
.idea/

# Exclude config file
*.toml

# Exclude executable file
/shiori*

# Exclude development data
/dev-data*

# Coverage data
/coverage.out

# Dist files
dist/

# macOS trash files
.DS_Store

# frontend
node_modules

path: .gitignore


code:
# Docs: https://golangci-lint.run/usage/configuration/#config-file

run:
  timeout: 5m
  skip-dirs:
    - internal/mocks

issues:
  max-issues-per-linter: 0
  max-same-issues: 0

linters-settings:
  gofmt:
    simplify: true
  govet:
    enable-all: true
    disable:
      - fieldalignment

linters:
  disable-all: true
  enable:
    - gofmt
    - gosimple
    # - govet # Re-enable when all shadow declarations are fixed
    - ineffassign
    - predeclared
    - exportloopref
    - staticcheck
    - unconvert
    - unused


code:
before:
  hooks:
    - go mod tidy
builds:
  - binary: shiori
    env:
      - CGO_ENABLED=0
      - GIN_MODE=release
    tags:
      - netgo
      - osusergo
    goos:
      - linux
      - windows
      - darwin
    goarch:
      - amd64
      - arm
      - arm64
    goarm:
      - "7"
    ignore:
      - goos: darwin
        goarch: arm
      - goos: windows
        goarch: arm
      - goos: windows
        goarch: arm64
archives:
  - id: shiori
    name_template: >-
      {{ .ProjectName }}_
      {{- if eq .Os "darwin" }}Darwin{{- else if eq .Os "linux" }}Linux{{- else if eq .Os "windows" }}Windows{{- else }}{{ .Os }}{{ end }}_
      {{- if eq .Arch "amd64" }}x86_64{{- else if eq .Arch "arm64" }}aarch64{{- else }}{{ .Arch }}{{ end }}

checksum:
  name_template: 'checksums.txt'
snapshot:
  name_template: "{{ incpatch .Version }}-next"
changelog:
  sort: asc
  filters:
    exclude:
      - '^docs:'
      - '^test:'

release:
  prerelease: auto


code:
# Ignore some files we don't want to format
*.html
*.json
*.md
*.yml
*.yaml

# Ignore build artifacts
internal/view/assets/css/

# Ignore bundled dependencies
internal/view/assets/js/dayjs.min.js
internal/view/assets/js/url.js
internal/view/assets/js/url.min.js
internal/view/assets/js/vue.js
internal/view/assets/js/vue.min.js

path: .prettierignore


code:
# Community Conduct Guideline

The following conduct guideline is based on [Ruby's](https://www.ruby-lang.org/en/conduct/) code of conduct.

This document provides community guidelines for a safe, respectful, productive, and collaborative place for any person who is willing to contribute to the Shiori community. It applies to all "collaborative space", which is defined as community communications channels (such as issues, mailing lists, submitted patches, commit comments, etc.).

- Participants will be tolerant of opposing views.
- Participants must ensure that their language and actions are free of personal attacks and disparaging personal remarks.
- When interpreting the words and actions of others, participants should always assume good intentions.
- Behaviour which can be reasonably considered harassment will not be tolerated.

Instances of abusive, harassing, or otherwise unacceptable behaviour may be reported by contacting the project maintainer at deanishe@deanishe.net.


code:
# build stage
FROM ghcr.io/ghcri/golang:1.19-alpine3.16 AS builder
WORKDIR /src
COPY . .
RUN go build -ldflags '-s -w'

# server image

FROM ghcr.io/ghcri/alpine:3.16
LABEL org.opencontainers.image.source https://github.com/go-shiori/shiori
COPY --from=builder /src/shiori /usr/bin/
RUN addgroup -g 1000 shiori \
    && adduser -D -h /shiori -g '' -G shiori -u 1000 shiori
USER shiori
WORKDIR /shiori
EXPOSE 8080
ENV SHIORI_DIR /shiori/
ENTRYPOINT ["/usr/bin/shiori"]
CMD ["server"]

path: Dockerfile


code:
FROM docker.io/golang:1.19-alpine3.16

WORKDIR /src/shiori

ENTRYPOINT ["go", "run", "main.go"]
CMD ["server"]


code:
GO ?= $(shell command -v go 2> /dev/null)
BASH ?= $(shell command -v bash 2> /dev/null)

# Development
SHIORI_DIR ?= dev-data

# Testing
GO_TEST_FLAGS ?= -v -race -count=1 -covermode=atomic -coverprofile=coverage.out
GOTESTFMT_FLAGS ?=

# Build
CGO_ENABLED ?= 0
BUILD_TIME := $(shell date -u +%Y%m%d.%H%M%S)
BUILD_HASH := $(shell git describe --tags)
BUILD_TAGS ?= osusergo,netgo
LDFLAGS += -s -w -X main.version=$(BUILD_HASH) -X main.date=$(BUILD_TIME)

# Development
GIN_MODE ?= debug
SHIORI_DEVELOPMENT ?= true

# Swagger
SWAG_VERSION := $(shell grep "swaggo/swag" go.mod | cut -d " " -f 2)
SWAGGER_DOCS_PATH ?= ./docs/swagger

# Frontend
CLEANCSS_OPTS ?= --with-rebase

# Help documentatin à la https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
.PHONY: help
help:
	@cat Makefile | grep -v '\.PHONY' |  grep -v '\help:' | grep -B1 -E '^[a-zA-Z0-9_.-]+:.*' | sed -e "s/:.*//" | sed -e "s/^## //" |  grep -v '\-\-' | sed '1!G;h;$$!d' | awk 'NR%2{printf "\033[36m%-30s\033[0m",$$0;next;}1' | sort

## Cleans up build artifacts
.PHONY: clean
clean:
	rm -rf dist

## Runs the legacy http API for local development
.PHONY: serve
serve:
	SHIORI_DEVELOPMENT=$(SHIORI_DEVELOPMENT) SHIORI_DIR=$(SHIORI_DIR) go run main.go serve

## Runs server for local development
.PHONY: run-server
run-server:
	GIN_MODE=$(GIN_MODE) SHIORI_DEVELOPMENT=$(SHIORI_DEVELOPMENT) SHIORI_DIR=$(SHIORI_DIR) SHIORI_HTTP_SECRET_KEY=shiori go run main.go server

## Generate swagger docs
.PHONY: swagger
swagger:
	SWAGGER_DOCS_PATH=$(SWAGGER_DOCS_PATH) $(BASH) ./scripts/swagger.sh

.PHONY: swag-check
swag-check:
	REQUIRED_SWAG_VERSION=$(SWAG_VERSION) SWAGGER_DOCS_PATH=$(SWAGGER_DOCS_PATH) $(BASH) ./scripts/swagger_check.sh

.PHONY: swag-fmt
swag-fmt:
	swag fmt --dir internal/http
	go fmt ./internal/http/...

## Run linters
.PHONY: lint
lint: golangci-lint swag-check

## Run golangci-lint
.PHONY: golangci-lint
golangci-lint:
	golangci-lint run

## Run unit tests
.PHONY: unittest
unittest:
	GIN_MODE=$(GIN_MODE) GO_TEST_FLAGS="$(GO_TEST_FLAGS)" GOTESTFMT_FLAGS="$(GOTESTFMT_FLAGS)" $(BASH) -xe ./scripts/test.sh

## Build styles
.PHONY: styles
styles:
	CLEANCSS_OPTS=$(CLEANCSS_OPTS) $(BASH) ./scripts/styles.sh

## Build styles
.PHONY: styles-check
styles-check:
	CLEANCSS_OPTS=$(CLEANCSS_OPTS) $(BASH) ./scripts/styles_check.sh

## Build binary
.PHONY: build
build: clean
	GIN_MODE=$(GIN_MODE) goreleaser build --rm-dist --snapshot

## Creates a coverage report
.PHONY: coverage
coverage:
	$(GO) test $(GO_TEST_FLAGS) -coverprofile=coverage.txt ./...
	$(GO) tool cover -html=coverage.txt

path: Makefile


code: web: bin/shiori serve -p $PORT

path: Procfile


code:
# Shiori

[![IC](https://github.com/go-shiori/shiori/actions/workflows/push.yml/badge.svg?branch=master)](https://github.com/go-shiori/shiori/actions/workflows/push.yml)
[![Go Report Card](https://goreportcard.com/badge/github.com/go-shiori/shiori)](https://goreportcard.com/report/github.com/go-shiori/shiori)
[![#shiori-general:matrix.org](https://img.shields.io/badge/matrix-%23shiori-orange)](https://matrix.to/#/#shiori:matrix.org)
[![Containers](https://img.shields.io/static/v1?label=Container&message=Images&color=1488C6&logo=docker)](https://github.com/go-shiori/shiori/pkgs/container/shiori)

**Check out our latest [Announcements](https://github.com/go-shiori/shiori/discussions/categories/announcements)**

Shiori is a simple bookmarks manager written in the Go language. Intended as a simple clone of [Pocket][pocket]. You can use it as a command line application or as a web application. This application is distributed as a single binary, which means it can be installed and used easily.

![Screenshot][screenshot]

## Features

- Basic bookmarks management i.e. add, edit, delete and search.
- Import and export bookmarks from and to Netscape Bookmark file.
- Import bookmarks from Pocket.
- Simple and clean command line interface.
- Simple and pretty web interface for those who don't want to use a command line app.
- Portable, thanks to its single binary format.
- Support for sqlite3, PostgreSQL and MySQL as its database.
- Where possible, by default `shiori` will parse the readable content and create an offline archive of the webpage.
- [BETA] [web extension][web-extension] support for Firefox and Chrome.

![Comparison of reader mode and archive mode][mode-comparison]

## Documentation

All documentation is available in the [docs folder][documentation]. If you think there is incomplete or incorrect information, feel free to edit it by submitting a pull request.

## License

Shiori is distributed under the terms of the [MIT license][mit], which means you can use it and modify it however you want. However, if you make an enhancement for it, if possible, please send a pull request.

[documentation]: https://github.com/go-shiori/shiori/blob/master/docs/index.md
[mit]: https://choosealicense.com/licenses/mit/
[web-extension]: https://github.com/go-shiori/shiori-web-ext
[screenshot]: https://raw.githubusercontent.com/go-shiori/shiori/master/docs/readme/cover.png
[mode-comparison]: https://raw.githubusercontent.com/go-shiori/shiori/master/docs/readme/comparison.png
[pocket]: https://getpocket.com/
[256]: https://github.com/go-shiori/shiori/issues/256


Shiori

description: Shiori is a simple bookmarks manager written in Go language. Intended as a simple clone of Pocket

keywords: bookmark go pocket


code:
mode: atomic
github.com/go-shiori/shiori/internal/cmd/add.go:13.30,29.2 8 0
github.com/go-shiori/shiori/internal/cmd/add.go:31.52,55.27 12 0
github.com/go-shiori/shiori/internal/cmd/add.go:55.27,57.3 1 0
github.com/go-shiori/shiori/internal/cmd/add.go:60.2,62.16 3 0
github.com/go-shiori/shiori/internal/cmd/add.go:62.16,65.3 2 0
github.com/go-shiori/shiori/internal/cmd/add.go:68.2,68.22 1 0
github.com/go-shiori/shiori/internal/cmd/add.go:68.22,70.3 1 0
github.com/go-shiori/shiori/internal/cmd/add.go:73.2,74.16 2 0
github.com/go-shiori/shiori/internal/cmd/add.go:74.16,77.3 2 0
github.com/go-shiori/shiori/internal/cmd/add.go:79.2,82.14 2 0
github.com/go-shiori/shiori/internal/cmd/add.go:82.14,87.17 4 0
github.com/go-shiori/shiori/internal/cmd/add.go:87.17,89.4 1 0
github.com/go-shiori/shiori/internal/cmd/add.go:91.3,91.35 1 0
github.com/go-shiori/shiori/internal/cmd/add.go:91.35,105.18 4 0
github.com/go-shiori/shiori/internal/cmd/add.go:105.18,107.5 1 0
github.com/go-shiori/shiori/internal/cmd/add.go:109.4,109.18 1 0
github.com/go-shiori/shiori/internal/cmd/add.go:109.18,111.5 1 0
github.com/go-shiori/shiori/internal/cmd/add.go:115.3,116.17 2 0
github.com/go-shiori/shiori/internal/cmd/add.go:116.17,119.4 2 0
github.com/go-shiori/shiori/internal/cmd/add.go:123.2,124.22 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:16.32,29.2 3 0
github.com/go-shiori/shiori/internal/cmd/check.go:31.54,36.36 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:36.36,41.26 4 0
github.com/go-shiori/shiori/internal/cmd/check.go:41.26,44.4 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:48.2,49.16 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:49.16,52.3 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:55.2,57.16 3 0
github.com/go-shiori/shiori/internal/cmd/check.go:57.16,60.3 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:63.2,74.33 8 0
github.com/go-shiori/shiori/internal/cmd/check.go:74.33,77.39 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:77.39,83.17 3 0
github.com/go-shiori/shiori/internal/cmd/check.go:83.17,85.5 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:88.4,89.18 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:89.18,93.5 3 0
github.com/go-shiori/shiori/internal/cmd/check.go:96.4,96.52 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:101.2,101.25 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:101.25,104.7 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:104.7,105.11 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:106.18,108.11 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:109.27,110.48 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:111.28,114.23 2 0
github.com/go-shiori/shiori/internal/cmd/check.go:115.16,116.61 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:117.17,118.60 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:125.2,132.30 5 0
github.com/go-shiori/shiori/internal/cmd/check.go:132.30,134.3 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:134.8,138.37 4 0
github.com/go-shiori/shiori/internal/cmd/check.go:138.37,140.4 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:141.3,141.16 1 0
github.com/go-shiori/shiori/internal/cmd/check.go:143.2,143.15 1 0
github.com/go-shiori/shiori/internal/cmd/delete.go:13.33,29.2 3 0
github.com/go-shiori/shiori/internal/cmd/delete.go:31.55,36.36 2 0
github.com/go-shiori/shiori/internal/cmd/delete.go:36.36,41.27 4 0
github.com/go-shiori/shiori/internal/cmd/delete.go:41.27,44.4 2 0
github.com/go-shiori/shiori/internal/cmd/delete.go:48.2,49.16 2 0
github.com/go-shiori/shiori/internal/cmd/delete.go:49.16,52.3 2 0
github.com/go-shiori/shiori/internal/cmd/delete.go:55.2,56.16 2 0
github.com/go-shiori/shiori/internal/cmd/delete.go:56.16,59.3 2 0
github.com/go-shiori/shiori/internal/cmd/delete.go:62.2,62.19 1 0
github.com/go-shiori/shiori/internal/cmd/delete.go:62.19,67.3 4 0
github.com/go-shiori/shiori/internal/cmd/delete.go:67.8,68.26 1 0
github.com/go-shiori/shiori/internal/cmd/delete.go:68.26,75.4 5 0
github.com/go-shiori/shiori/internal/cmd/delete.go:79.2,79.19 1 0
github.com/go-shiori/shiori/internal/cmd/delete.go:80.9,81.49 1 0
github.com/go-shiori/shiori/internal/cmd/delete.go:82.21,83.77 1 0
github.com/go-shiori/shiori/internal/cmd/delete.go:84.10,85.47 1 0
github.com/go-shiori/shiori/internal/cmd/export.go:15.33,24.2 2 0
github.com/go-shiori/shiori/internal/cmd/export.go:26.55,29.16 2 0
github.com/go-shiori/shiori/internal/cmd/export.go:29.16,32.3 2 0
github.com/go-shiori/shiori/internal/cmd/export.go:34.2,34.25 1 0
github.com/go-shiori/shiori/internal/cmd/export.go:34.25,37.3 2 0
github.com/go-shiori/shiori/internal/cmd/export.go:40.2,41.63 2 0
github.com/go-shiori/shiori/internal/cmd/export.go:41.63,43.3 1 0
github.com/go-shiori/shiori/internal/cmd/export.go:46.2,47.16 2 0
github.com/go-shiori/shiori/internal/cmd/export.go:47.16,50.3 2 0
github.com/go-shiori/shiori/internal/cmd/export.go:51.2,61.33 3 0
github.com/go-shiori/shiori/internal/cmd/export.go:61.33,64.17 2 0
github.com/go-shiori/shiori/internal/cmd/export.go:64.17,66.4 1 0
github.com/go-shiori/shiori/internal/cmd/export.go:67.3,71.33 3 0
github.com/go-shiori/shiori/internal/cmd/export.go:71.33,73.4 1 0
github.com/go-shiori/shiori/internal/cmd/export.go:74.3,82.36 4 0
github.com/go-shiori/shiori/internal/cmd/export.go:85.2,89.16 3 0
github.com/go-shiori/shiori/internal/cmd/export.go:89.16,92.3 2 0
github.com/go-shiori/shiori/internal/cmd/export.go:94.2,94.32 1 0
github.com/go-shiori/shiori/internal/cmd/import.go:18.33,29.2 3 0
github.com/go-shiori/shiori/internal/cmd/import.go:31.55,36.18 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:36.18,42.3 4 0
github.com/go-shiori/shiori/internal/cmd/import.go:45.2,46.16 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:46.16,49.3 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:50.2,57.16 5 0
github.com/go-shiori/shiori/internal/cmd/import.go:57.16,60.3 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:62.2,62.58 1 0
github.com/go-shiori/shiori/internal/cmd/import.go:62.58,74.19 8 0
github.com/go-shiori/shiori/internal/cmd/import.go:74.19,76.4 1 0
github.com/go-shiori/shiori/internal/cmd/import.go:79.3,80.20 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:80.20,82.18 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:82.18,85.5 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:87.4,87.53 1 0
github.com/go-shiori/shiori/internal/cmd/import.go:91.3,92.17 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:92.17,95.4 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:98.3,102.37 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:102.37,105.4 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:107.3,108.51 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:108.51,111.4 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:113.3,113.12 1 0
github.com/go-shiori/shiori/internal/cmd/import.go:113.12,117.4 3 0
github.com/go-shiori/shiori/internal/cmd/import.go:120.3,121.54 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:121.54,123.20 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:123.20,125.5 1 0
github.com/go-shiori/shiori/internal/cmd/import.go:130.3,131.36 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:131.36,133.4 1 0
github.com/go-shiori/shiori/internal/cmd/import.go:136.3,144.42 3 0
github.com/go-shiori/shiori/internal/cmd/import.go:148.2,149.16 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:149.16,152.3 2 0
github.com/go-shiori/shiori/internal/cmd/import.go:155.2,156.30 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:19.31,36.2 6 0
github.com/go-shiori/shiori/internal/cmd/open.go:38.53,47.16 6 0
github.com/go-shiori/shiori/internal/cmd/open.go:47.16,50.3 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:53.2,53.33 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:53.33,56.3 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:60.2,60.36 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:60.36,65.25 4 0
github.com/go-shiori/shiori/internal/cmd/open.go:65.25,67.4 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:71.2,77.16 3 0
github.com/go-shiori/shiori/internal/cmd/open.go:77.16,80.3 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:82.2,82.25 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:82.25,83.19 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:83.19,86.4 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:86.9,89.4 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:90.3,90.9 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:94.2,94.36 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:94.36,96.34 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:96.34,98.18 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:98.18,101.5 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:103.3,103.16 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:107.2,107.19 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:107.19,111.34 3 0
github.com/go-shiori/shiori/internal/cmd/open.go:111.34,116.26 4 0
github.com/go-shiori/shiori/internal/cmd/open.go:116.26,119.5 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:119.10,122.5 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:124.4,126.17 3 0
github.com/go-shiori/shiori/internal/cmd/open.go:128.3,128.16 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:132.2,136.16 4 0
github.com/go-shiori/shiori/internal/cmd/open.go:136.16,139.3 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:140.2,144.94 3 0
github.com/go-shiori/shiori/internal/cmd/open.go:144.94,147.26 3 0
github.com/go-shiori/shiori/internal/cmd/open.go:147.26,149.4 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:151.3,152.17 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:152.17,153.14 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:156.3,158.44 3 0
github.com/go-shiori/shiori/internal/cmd/open.go:158.44,159.14 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:163.2,163.86 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:163.86,165.3 1 0
github.com/go-shiori/shiori/internal/cmd/open.go:168.2,170.16 3 0
github.com/go-shiori/shiori/internal/cmd/open.go:170.16,173.3 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:175.2,180.12 4 0
github.com/go-shiori/shiori/internal/cmd/open.go:180.12,184.17 3 0
github.com/go-shiori/shiori/internal/cmd/open.go:184.17,187.4 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:191.2,192.16 2 0
github.com/go-shiori/shiori/internal/cmd/open.go:192.16,195.3 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:16.33,25.2 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:27.55,30.16 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:30.16,33.3 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:34.2,41.16 5 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:41.16,44.3 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:46.2,46.55 1 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:46.55,58.17 9 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:58.17,61.4 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:64.3,68.37 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:68.37,71.4 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:73.3,74.17 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:74.17,77.4 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:79.3,79.12 1 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:79.12,83.4 3 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:86.3,87.54 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:87.54,88.20 1 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:88.20,90.5 1 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:94.3,102.42 3 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:106.2,107.16 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:107.16,110.3 2 0
github.com/go-shiori/shiori/internal/cmd/pocket.go:113.2,114.30 2 0
github.com/go-shiori/shiori/internal/cmd/print.go:12.32,32.2 8 0
github.com/go-shiori/shiori/internal/cmd/print.go:34.54,45.16 8 0
github.com/go-shiori/shiori/internal/cmd/print.go:45.16,48.3 2 0
github.com/go-shiori/shiori/internal/cmd/print.go:51.2,52.17 2 0
github.com/go-shiori/shiori/internal/cmd/print.go:52.17,54.3 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:56.2,65.16 3 0
github.com/go-shiori/shiori/internal/cmd/print.go:65.16,68.3 2 0
github.com/go-shiori/shiori/internal/cmd/print.go:70.2,70.25 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:70.25,71.10 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:72.21,73.45 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:74.37,75.49 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:76.11,77.44 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:79.3,79.9 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:83.2,83.13 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:83.13,85.17 2 0
github.com/go-shiori/shiori/internal/cmd/print.go:85.17,88.4 2 0
github.com/go-shiori/shiori/internal/cmd/print.go:90.3,91.9 2 0
github.com/go-shiori/shiori/internal/cmd/print.go:94.2,94.15 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:94.15,95.38 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:95.38,97.4 1 0
github.com/go-shiori/shiori/internal/cmd/print.go:99.3,100.9 2 0
github.com/go-shiori/shiori/internal/cmd/print.go:103.2,103.30 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:26.33,54.2 8 0
github.com/go-shiori/shiori/internal/cmd/root.go:56.59,65.57 3 0
github.com/go-shiori/shiori/internal/cmd/root.go:65.57,67.3 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:67.8,69.3 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:72.2,77.16 4 0
github.com/go-shiori/shiori/internal/cmd/root.go:77.16,80.3 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:82.2,83.16 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:83.16,86.3 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:89.2,90.16 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:90.16,93.3 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:96.2,96.37 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:96.37,99.3 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:102.52,104.18 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:104.18,106.17 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:106.17,108.4 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:110.3,111.45 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:114.2,114.21 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:114.21,116.3 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:119.2,120.11 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:120.11,122.3 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:125.2,127.16 3 0
github.com/go-shiori/shiori/internal/cmd/root.go:127.16,129.3 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:132.2,132.17 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:135.61,136.54 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:137.15,138.32 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:139.20,140.37 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:141.10,142.33 1 0
github.com/go-shiori/shiori/internal/cmd/root.go:146.67,149.2 2 0
github.com/go-shiori/shiori/internal/cmd/root.go:151.66,159.2 6 0
github.com/go-shiori/shiori/internal/cmd/root.go:161.71,171.2 7 0
github.com/go-shiori/shiori/internal/cmd/serve.go:11.32,27.2 6 0
github.com/go-shiori/shiori/internal/cmd/serve.go:29.54,37.20 5 0
github.com/go-shiori/shiori/internal/cmd/serve.go:37.20,39.3 1 0
github.com/go-shiori/shiori/internal/cmd/serve.go:41.2,41.39 1 0
github.com/go-shiori/shiori/internal/cmd/serve.go:41.39,43.3 1 0
github.com/go-shiori/shiori/internal/cmd/serve.go:45.2,45.39 1 0
github.com/go-shiori/shiori/internal/cmd/serve.go:45.39,47.3 1 0
github.com/go-shiori/shiori/internal/cmd/serve.go:50.2,60.16 3 0
github.com/go-shiori/shiori/internal/cmd/serve.go:60.16,62.3 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:14.61,28.2 6 0
github.com/go-shiori/shiori/internal/cmd/server.go:30.93,31.49 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:31.49,35.17 3 0
github.com/go-shiori/shiori/internal/cmd/server.go:35.17,37.4 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:39.3,41.22 2 0
github.com/go-shiori/shiori/internal/cmd/server.go:41.22,43.4 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:45.3,56.21 8 0
github.com/go-shiori/shiori/internal/cmd/server.go:56.21,58.4 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:60.3,60.40 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:60.40,62.4 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:64.3,64.40 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:64.40,66.4 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:69.3,76.43 6 0
github.com/go-shiori/shiori/internal/cmd/server.go:76.43,78.4 1 0
github.com/go-shiori/shiori/internal/cmd/server.go:79.3,81.23 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:16.33,41.2 11 0
github.com/go-shiori/shiori/internal/cmd/update.go:43.55,56.36 10 0
github.com/go-shiori/shiori/internal/cmd/update.go:56.36,61.27 4 0
github.com/go-shiori/shiori/internal/cmd/update.go:61.27,64.4 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:68.2,69.16 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:69.16,72.3 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:75.2,78.32 3 0
github.com/go-shiori/shiori/internal/cmd/update.go:78.32,81.17 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:81.17,82.53 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:86.3,86.20 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:86.20,89.4 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:93.2,98.16 3 0
github.com/go-shiori/shiori/internal/cmd/update.go:98.16,101.3 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:103.2,103.25 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:103.25,106.3 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:109.2,109.83 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:109.83,117.27 6 0
github.com/go-shiori/shiori/internal/cmd/update.go:117.27,121.4 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:125.2,127.14 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:127.14,137.34 8 0
github.com/go-shiori/shiori/internal/cmd/update.go:137.34,144.17 3 0
github.com/go-shiori/shiori/internal/cmd/update.go:144.17,146.5 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:148.4,148.40 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:148.40,154.18 3 0
github.com/go-shiori/shiori/internal/cmd/update.go:154.18,156.6 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:159.5,160.19 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:160.19,164.6 3 0
github.com/go-shiori/shiori/internal/cmd/update.go:166.5,179.19 4 0
github.com/go-shiori/shiori/internal/cmd/update.go:179.19,183.6 3 0
github.com/go-shiori/shiori/internal/cmd/update.go:186.5,191.16 4 0
github.com/go-shiori/shiori/internal/cmd/update.go:196.3,196.26 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:196.26,199.8 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:199.8,200.12 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:201.19,203.12 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:204.28,205.49 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:206.29,209.24 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:210.17,211.62 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:212.18,213.61 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:220.3,221.16 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:225.2,227.27 3 0
github.com/go-shiori/shiori/internal/cmd/update.go:227.27,231.38 3 0
github.com/go-shiori/shiori/internal/cmd/update.go:231.38,234.4 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:234.9,236.4 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:240.2,240.33 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:240.33,242.18 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:242.18,244.4 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:246.3,246.20 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:246.20,248.4 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:251.3,251.16 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:251.16,253.4 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:256.3,260.37 3 0
github.com/go-shiori/shiori/internal/cmd/update.go:260.37,262.4 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:264.3,265.33 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:265.33,266.56 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:266.56,268.5 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:270.4,270.60 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:270.60,272.5 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:274.4,274.34 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:277.3,277.33 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:277.33,279.4 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:281.3,284.22 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:288.2,289.16 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:289.16,292.3 2 0
github.com/go-shiori/shiori/internal/cmd/update.go:295.2,299.29 4 0
github.com/go-shiori/shiori/internal/cmd/update.go:299.29,304.37 4 0
github.com/go-shiori/shiori/internal/cmd/update.go:304.37,306.4 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:307.3,307.16 1 0
github.com/go-shiori/shiori/internal/cmd/update.go:309.2,309.15 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:34.40,37.2 2 5
github.com/go-shiori/shiori/internal/cmd/utils.go:39.32,42.2 2 6
github.com/go-shiori/shiori/internal/cmd/utils.go:44.50,45.37 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:45.37,59.29 7 0
github.com/go-shiori/shiori/internal/cmd/utils.go:59.29,62.4 2 0
github.com/go-shiori/shiori/internal/cmd/utils.go:65.3,65.29 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:65.29,67.38 2 0
github.com/go-shiori/shiori/internal/cmd/utils.go:67.38,68.34 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:68.34,70.6 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:70.11,72.6 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:77.3,77.16 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:82.55,84.35 2 8
github.com/go-shiori/shiori/internal/cmd/utils.go:84.35,85.39 1 16
github.com/go-shiori/shiori/internal/cmd/utils.go:85.39,87.31 2 10
github.com/go-shiori/shiori/internal/cmd/utils.go:87.31,89.5 1 2
github.com/go-shiori/shiori/internal/cmd/utils.go:91.4,92.12 2 8
github.com/go-shiori/shiori/internal/cmd/utils.go:95.3,96.22 2 6
github.com/go-shiori/shiori/internal/cmd/utils.go:96.22,98.4 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:100.3,102.76 3 6
github.com/go-shiori/shiori/internal/cmd/utils.go:102.76,104.4 1 1
github.com/go-shiori/shiori/internal/cmd/utils.go:106.3,106.41 1 5
github.com/go-shiori/shiori/internal/cmd/utils.go:106.41,108.4 1 19
github.com/go-shiori/shiori/internal/cmd/utils.go:111.2,111.23 1 5
github.com/go-shiori/shiori/internal/cmd/utils.go:116.36,118.22 2 0
github.com/go-shiori/shiori/internal/cmd/utils.go:119.16,120.26 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:121.17,122.40 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:123.10,124.30 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:127.2,128.18 2 0
github.com/go-shiori/shiori/internal/cmd/utils.go:131.29,134.2 2 0
github.com/go-shiori/shiori/internal/cmd/utils.go:136.51,142.17 3 0
github.com/go-shiori/shiori/internal/cmd/utils.go:142.17,144.3 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:147.2,147.45 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:147.45,149.3 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:152.2,152.30 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:152.30,153.26 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:153.26,155.4 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:156.3,156.11 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:158.2,162.20 3 0
github.com/go-shiori/shiori/internal/cmd/utils.go:162.20,164.3 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:166.2,166.17 1 0
github.com/go-shiori/shiori/internal/cmd/utils.go:169.64,171.2 1 0
github.com/go-shiori/shiori/internal/cmd/version.go:9.62,17.2 2 0
github.com/go-shiori/shiori/internal/cmd/version.go:19.94,20.49 1 0
github.com/go-shiori/shiori/internal/cmd/version.go:20.49,22.3 1 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:20.69,24.2 3 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:26.65,30.14 3 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:30.14,33.3 2 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:35.2,36.16 2 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:36.16,40.3 3 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:42.2,42.21 1 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:42.21,45.3 2 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:47.2,48.26 2 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:48.26,51.3 2 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:53.2,53.49 1 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:53.49,56.3 2 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:58.2,58.41 1 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:61.66,61.67 0 0
github.com/go-shiori/shiori/internal/http/routes/bookmark.go:63.90,68.2 1 0
github.com/go-shiori/shiori/internal/http/routes/frontend.go:20.62,23.2 2 3
github.com/go-shiori/shiori/internal/http/routes/frontend.go:25.56,29.2 1 1
github.com/go-shiori/shiori/internal/http/routes/frontend.go:36.47,39.2 2 1
github.com/go-shiori/shiori/internal/http/routes/frontend.go:41.86,46.2 1 1
github.com/go-shiori/shiori/internal/http/routes/swagger.go:17.67,18.29 1 1
github.com/go-shiori/shiori/internal/http/routes/swagger.go:18.29,19.76 1 3
github.com/go-shiori/shiori/internal/http/routes/swagger.go:19.76,22.4 2 2
github.com/go-shiori/shiori/internal/http/routes/swagger.go:24.2,25.10 2 1
github.com/go-shiori/shiori/internal/http/routes/swagger.go:28.67,32.2 1 1
github.com/go-shiori/shiori/internal/http/routes/system.go:14.67,17.2 2 1
github.com/go-shiori/shiori/internal/http/routes/system.go:19.56,21.2 1 1
github.com/go-shiori/shiori/internal/http/routes/system.go:23.59,27.2 1 1
github.com/go-shiori/shiori/internal/webserver/assets-prod.go:14.13,17.16 3 1
github.com/go-shiori/shiori/internal/webserver/assets-prod.go:17.16,18.13 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:20.103,34.16 8 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:34.16,35.52 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:39.2,40.16 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:40.16,41.60 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:45.2,45.11 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:45.11,49.36 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:49.36,51.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:53.3,53.39 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:53.39,54.57 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:54.57,56.5 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:58.8,58.32 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:58.32,60.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:65.2,68.24 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:68.24,70.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:70.8,73.3 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:78.2,78.12 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:78.12,80.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:80.17,83.4 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:84.3,84.18 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:89.2,89.26 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:89.26,101.51 5 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:101.51,103.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:107.3,107.31 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:107.31,109.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:109.9,109.72 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:109.72,111.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:115.2,117.17 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:121.103,137.11 9 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:137.11,149.3 7 0
github.com/go-shiori/shiori/internal/webserver/handler-api-ext.go:151.2,151.18 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:26.116,28.16 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:28.16,30.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:32.2,42.30 4 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:42.30,44.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:46.2,46.21 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:50.90,65.67 5 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:65.67,77.61 6 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:77.61,80.4 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:81.3,93.18 6 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:98.2,105.88 4 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:105.88,111.3 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:114.2,117.12 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:117.12,118.46 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:122.2,123.16 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:123.16,124.57 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:128.2,128.37 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:128.37,129.64 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:133.2,134.22 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:134.22,136.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:139.2,139.30 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:143.91,146.21 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:146.21,148.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:150.2,150.18 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:154.97,168.37 9 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:168.37,170.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:172.2,173.53 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:173.53,175.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:177.2,178.14 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:178.14,180.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:183.2,202.27 7 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:202.27,207.26 4 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:207.26,209.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:211.3,211.30 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:211.30,213.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:217.2,225.17 4 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:229.92,243.2 8 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:246.94,263.2 9 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:278.62,283.2 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:286.99,309.16 9 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:309.16,310.52 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:314.2,314.22 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:314.22,316.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:319.2,320.37 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:320.37,321.56 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:324.2,326.19 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:326.19,327.13 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:327.13,329.18 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:329.18,332.5 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:333.4,333.88 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:333.88,335.5 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:337.8,341.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:341.17,343.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:343.9,343.73 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:343.73,345.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:349.2,351.17 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:355.99,372.25 9 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:372.25,379.3 5 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:381.2,381.18 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:385.99,398.25 7 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:398.25,399.44 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:403.2,410.25 4 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:410.25,411.53 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:415.2,423.16 7 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:423.16,424.52 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:428.2,428.27 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:428.27,430.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:432.2,432.38 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:432.38,433.36 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:433.36,434.34 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:434.34,437.10 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:441.3,441.21 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:441.21,443.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:447.2,458.17 8 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:462.96,487.25 10 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:487.25,488.53 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:493.2,493.25 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:493.25,494.50 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:495.8,495.56 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:495.56,496.63 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:500.2,506.33 6 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:506.33,512.58 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:512.58,518.17 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:518.17,520.5 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:523.4,524.18 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:524.18,527.5 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:529.4,541.18 4 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:541.18,544.5 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:547.4,549.15 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:554.2,555.12 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:555.12,556.7 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:556.7,557.11 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:558.18,559.11 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:560.27,561.48 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:567.2,577.17 7 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:581.103,598.53 7 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:598.53,599.51 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:603.2,610.25 4 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:610.25,611.53 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:615.2,615.33 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:615.33,616.39 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:616.39,617.37 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:617.37,618.35 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:618.35,620.11 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:624.4,624.22 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:624.22,626.5 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:629.3,629.22 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:633.2,637.27 3 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:637.27,642.26 4 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:642.26,644.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:648.2,649.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:653.96,667.2 8 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:670.98,687.2 9 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:690.98,712.12 9 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:712.12,713.46 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:717.2,718.16 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:718.16,719.50 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:723.2,729.60 5 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:729.60,731.40 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:731.40,733.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:735.3,735.39 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:738.2,738.18 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:742.98,760.37 10 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:760.37,761.53 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:761.53,763.41 2 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:763.41,765.5 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:767.4,767.32 1 0
github.com/go-shiori/shiori/internal/webserver/handler-api.go:771.2,771.18 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:24.91,32.2 6 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:35.93,40.88 4 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:40.88,43.27 3 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:43.27,45.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:48.2,49.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:53.96,56.16 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:56.16,61.3 4 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:63.2,63.21 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:63.21,64.46 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:64.46,66.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:69.2,70.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:74.96,77.16 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:77.16,81.3 3 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:83.2,83.21 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:83.21,84.46 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:84.46,86.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:89.2,90.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:94.102,106.12 7 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:106.12,107.42 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:111.2,111.26 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:111.26,113.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:113.17,118.4 4 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:122.2,123.29 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:123.29,130.12 4 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:130.12,132.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:132.9,138.4 4 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:141.3,141.57 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:141.57,145.4 3 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:147.3,151.86 4 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:151.86,157.17 3 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:157.17,159.64 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:159.64,161.6 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:165.4,166.35 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:166.35,169.23 3 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:169.23,170.14 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:173.5,174.64 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:174.64,177.6 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:180.4,180.24 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:180.24,182.5 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:185.3,186.18 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:190.2,190.21 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:190.21,191.46 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:191.46,193.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:196.2,202.17 3 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:206.101,219.12 7 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:219.12,222.3 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:225.2,225.26 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:225.26,227.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:227.17,232.4 4 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:235.2,257.42 15 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:257.42,259.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:260.2,261.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:265.102,280.12 9 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:280.12,281.42 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:285.2,285.26 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:285.26,287.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:287.17,292.4 4 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:296.2,299.11 3 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:299.11,301.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:301.8,307.3 4 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:309.2,317.87 5 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:317.87,347.64 19 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:347.64,349.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:350.3,351.9 2 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:355.2,355.44 1 0
github.com/go-shiori/shiori/internal/webserver/handler-ui.go:355.44,357.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:29.41,30.61 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:30.61,33.13 3 0
github.com/go-shiori/shiori/internal/webserver/handler.go:33.13,35.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:37.3,38.40 2 0
github.com/go-shiori/shiori/internal/webserver/handler.go:38.40,39.28 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:39.28,41.10 2 0
github.com/go-shiori/shiori/internal/webserver/handler.go:45.3,45.52 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:49.41,50.62 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:50.62,53.3 2 0
github.com/go-shiori/shiori/internal/webserver/handler.go:56.44,63.40 3 0
github.com/go-shiori/shiori/internal/webserver/handler.go:63.40,65.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:69.2,69.61 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:69.61,71.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler.go:71.17,73.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:77.2,86.16 2 0
github.com/go-shiori/shiori/internal/webserver/handler.go:86.16,88.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:90.2,90.12 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:93.56,98.21 2 0
github.com/go-shiori/shiori/internal/webserver/handler.go:98.21,100.17 2 0
github.com/go-shiori/shiori/internal/webserver/handler.go:100.17,102.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:104.3,104.27 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:107.2,107.18 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:111.58,113.21 2 0
github.com/go-shiori/shiori/internal/webserver/handler.go:113.21,115.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:118.2,119.12 2 0
github.com/go-shiori/shiori/internal/webserver/handler.go:119.12,121.3 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:124.2,124.41 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:124.41,125.53 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:125.53,127.4 1 0
github.com/go-shiori/shiori/internal/webserver/handler.go:130.2,130.12 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:34.40,36.2 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:38.75,39.25 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:39.25,41.3 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:42.2,43.17 2 0
github.com/go-shiori/shiori/internal/webserver/server.go:43.17,45.3 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:46.2,47.19 2 0
github.com/go-shiori/shiori/internal/webserver/server.go:47.19,49.3 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:50.2,50.11 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:50.11,52.3 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:70.62,74.32 3 0
github.com/go-shiori/shiori/internal/webserver/server.go:74.32,76.3 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:77.2,77.18 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:81.61,84.2 2 0
github.com/go-shiori/shiori/internal/webserver/server.go:87.56,88.33 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:88.33,96.3 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:96.8,104.3 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:108.33,124.16 5 0
github.com/go-shiori/shiori/internal/webserver/server.go:124.16,126.3 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:129.2,155.147 5 0
github.com/go-shiori/shiori/internal/webserver/server.go:155.147,156.77 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:156.77,166.15 4 0
github.com/go-shiori/shiori/internal/webserver/server.go:166.15,168.5 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:173.2,173.34 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:173.34,175.3 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:177.2,207.86 26 0
github.com/go-shiori/shiori/internal/webserver/server.go:207.86,217.14 4 0
github.com/go-shiori/shiori/internal/webserver/server.go:217.14,219.4 1 0
github.com/go-shiori/shiori/internal/webserver/server.go:223.2,233.29 4 0
github.com/go-shiori/shiori/internal/webserver/utils.go:29.46,32.39 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:32.39,34.3 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:36.2,36.34 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:39.74,42.16 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:42.16,44.3 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:45.2,48.11 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:48.11,50.17 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:50.17,52.4 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:54.3,56.51 3 0
github.com/go-shiori/shiori/internal/webserver/utils.go:57.8,59.3 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:62.2,64.20 3 0
github.com/go-shiori/shiori/internal/webserver/utils.go:64.20,67.3 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:70.2,71.12 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:74.61,81.2 5 0
github.com/go-shiori/shiori/internal/webserver/utils.go:83.71,88.2 4 0
github.com/go-shiori/shiori/internal/webserver/utils.go:90.40,92.14 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:92.14,94.3 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:95.2,95.42 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:98.39,101.2 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:103.92,106.16 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:106.16,108.3 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:109.2,113.16 3 0
github.com/go-shiori/shiori/internal/webserver/utils.go:113.16,115.3 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:118.2,118.91 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:122.41,132.16 3 0
github.com/go-shiori/shiori/internal/webserver/utils.go:132.16,134.27 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:134.27,136.4 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:138.3,139.77 2 0
github.com/go-shiori/shiori/internal/webserver/utils.go:142.2,149.20 7 0
github.com/go-shiori/shiori/internal/webserver/utils.go:152.28,153.16 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:153.16,155.3 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:159.2,159.38 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:159.38,160.46 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:160.46,161.63 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:161.63,163.5 1 0
github.com/go-shiori/shiori/internal/webserver/utils.go:167.2,167.12 1 0
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:131.58,133.16 2 14
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:133.16,134.73 1 1
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:136.2,136.16 1 13
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:140.34,141.41 1 109
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:141.41,142.26 1 1291
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:142.26,144.4 1 49
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:146.2,146.14 1 60
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:150.34,151.43 1 15
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:151.43,152.26 1 136
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:152.26,154.4 1 11
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:156.2,156.14 1 4
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:160.34,161.33 1 124
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:161.33,163.3 1 109
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:164.2,164.44 1 15
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:168.45,169.18 1 103
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:169.18,171.3 1 1
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:172.2,175.35 3 102
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:175.35,177.3 1 56
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:178.2,178.14 1 46
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:191.44,194.16 3 33
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:194.16,196.3 1 1
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:197.2,197.37 1 32
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:197.37,199.3 1 1
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:201.2,201.48 1 31
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:201.48,203.16 2 50
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:203.16,204.12 1 21
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:207.3,208.64 2 29
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:208.64,210.4 1 2
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:211.3,211.33 1 29
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:211.33,213.4 1 24
github.com/go-shiori/shiori/internal/webserver/utils_ip.go:215.2,215.21 1 7
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:21.71,27.2 5 4
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:29.90,31.2 1 1
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:39.47,40.22 1 2
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:40.22,42.3 1 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:43.2,43.22 1 2
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:43.22,45.3 1 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:46.2,46.12 1 2
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:62.57,64.51 2 2
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:64.51,67.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:69.2,69.42 1 2
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:69.42,72.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:74.2,75.16 2 2
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:75.16,78.3 2 1
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:80.2,81.24 2 1
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:81.24,83.3 1 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:85.2,86.16 2 1
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:86.16,89.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:91.2,98.50 3 1
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:109.59,111.25 2 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:111.25,114.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:116.2,119.16 4 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:119.16,122.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:124.2,130.56 3 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:141.54,143.25 2 2
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:143.25,146.3 2 1
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:148.2,148.51 1 1
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:152.58,154.25 2 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:154.25,157.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:159.2,162.47 2 0
github.com/go-shiori/shiori/internal/http/routes/api/accounts.go:165.94,170.2 1 4
github.com/go-shiori/shiori/internal/http/routes/api/api.go:16.60,17.31 1 0
github.com/go-shiori/shiori/internal/http/routes/api/api.go:17.31,19.3 1 0
github.com/go-shiori/shiori/internal/http/routes/api/api.go:22.2,29.10 5 0
github.com/go-shiori/shiori/internal/http/routes/api/api.go:32.82,35.2 2 0
github.com/go-shiori/shiori/internal/http/routes/api/api.go:37.80,42.2 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:21.69,26.2 4 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:28.58,30.16 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:30.16,34.3 3 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:36.2,36.34 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:49.80,63.16 5 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:63.16,65.3 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:68.2,68.26 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:68.26,70.3 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:72.2,72.22 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:75.62,80.2 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:82.60,84.51 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:84.51,88.3 3 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:90.2,91.16 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:91.16,95.3 3 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:97.2,98.37 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:98.37,102.3 3 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:104.2,106.19 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:106.19,107.13 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:107.13,109.18 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:109.18,112.5 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:113.4,113.80 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:113.80,115.5 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:117.8,121.17 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:121.17,123.4 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:123.9,123.82 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:123.82,125.4 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:128.2,128.29 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:131.60,133.13 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:133.13,136.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:138.2,139.16 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:139.16,142.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:144.2,145.16 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:145.16,148.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:150.2,150.12 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:150.12,153.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:155.2,155.71 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:155.71,159.3 3 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:161.2,161.43 1 0
github.com/go-shiori/shiori/internal/http/routes/api/bookmarks.go:164.97,169.2 1 0
github.com/go-shiori/shiori/internal/http/routes/api/debug.go:16.69,19.2 2 0
github.com/go-shiori/shiori/internal/http/routes/api/debug.go:21.60,28.64 2 0
github.com/go-shiori/shiori/internal/http/routes/api/debug.go:28.64,31.3 2 0
github.com/go-shiori/shiori/internal/http/routes/api/debug.go:33.2,33.32 1 0
github.com/go-shiori/shiori/internal/http/routes/api/debug.go:36.89,41.2 1 0
github.com/go-shiori/shiori/internal/http/routes/api/tags.go:16.64,19.2 2 0
github.com/go-shiori/shiori/internal/http/routes/api/tags.go:21.53,23.2 1 0
github.com/go-shiori/shiori/internal/http/routes/api/tags.go:25.87,30.2 1 0


code:
# Docker compose for development purposes only
version: "3"
services:
  shiori:
    build:
      context: .
      dockerfile: Dockerfile.compose
    container_name: shiori
    ports:
      - "8080:8080"
    volumes:
      - "./dev-data:/srv/shiori"
      - ".:/src/shiori"
    restart: unless-stopped
    links:
      - "postgres"
      - "mariadb"
    environment:
      SHIORI_DIR: /srv/shiori
      #SHIORI_DATABASE_URL: mysql://shiori:shiori@(mariadb)/shiori?charset=utf8mb4
      SHIORI_DATABASE_URL: postgres://shiori:shiori@postgres/shiori?sslmode=disable

  postgres:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: shiori
      POSTGRES_USER: shiori
    ports:
      - "5432:5432"

  mariadb:
    image: mariadb:11
    environment:
      MYSQL_ROOT_PASSWORD: toor
      MYSQL_DATABASE: shiori
      MYSQL_USER: shiori
      MYSQL_PASSWORD: shiori
    ports:
      - "3306:3306"


code:
This is a brief explanation of Shiori's API. For more examples you can import this [collection](https://github.com/go-shiori/shiori/blob/master/docs/postman/shiori.postman_collection.json) in Postman.

> ⚠ **This is the documentation for the old API. This API is deprecated and will be removed in the future. Please refer and start migrating to the [API v1](./APIv1.md) instead.**

<!-- TOC -->

- [Auth](#auth)
    - [Log in](#log-in)
    - [Log out](#log-out)
- [Bookmarks](#bookmarks)
    - [Get bookmarks](#get-bookmarks)
    - [Add bookmark](#add-bookmark)
    - [Edit bookmark](#edit-bookmark)
    - [Delete bookmark](#delete-bookmark)
- [Tags](#tags)
    - [Get tags](#get-tags)
    - [Rename tag](#rename-tag)
- [Accounts](#accounts)
    - [List accounts](#list-accounts)
    - [Create account](#create-account)
    - [Edit account](#edit-account)
    - [Delete accounts](#delete-accounts)

<!-- /TOC -->

# Auth

## Log in
Most actions require a session id. For that, you'll need to log in using your username and password.
|Request info|Value|
|-|-|
|Endpoint|`/api/login`|
|Method|`POST`|

Body:
```json
{
	"username": "shiori",
	"password": "gopher",
	"remember": true,
	"owner": true
}
```

It will return your session ID in a JSON:
```json
{
    "session": "YOUR_SESSION_ID",
    "account": {
        "id": 1,
        "username": "shiori",
        "owner": true
    }
}
```

## Log out
Log out of a session ID.
|Request info|Value|
|-|-|
|Endpoint|`/api/logout`|
|Method|`POST`|
|`X-Session-Id` Header|`sessionId`|

# Bookmarks
## Get bookmarks
Gets the last 30 bookmarks (last page).
|Request info|Value|
|-|-|
|Endpoint|`/api/bookmarks`|
|Method|`GET`|
|`X-Session-Id` Header|`sessionId`|

Returns:
```json
{
    "bookmarks": [
        {
            "id": 825,
            "url": "https://interesting_cool_article.com",
            "title": "Cool Interesting Article",
            "excerpt": "An interesting and cool article indeed!",
            "author": "",
            "public": 0,
            "modified": "2020-12-06 00:00:00",
            "imageURL": "",
            "hasContent": true,
            "hasArchive": true,
            "tags": [
                {
                    "id": 7,
                    "name": "TAG"
                }
            ],
            "createArchive": false
        },
    ],
    "maxPage": 19,
    "page": 1
}
```

## Add bookmark
Add a bookmark. For some reason, Shiori ignores the provided title and excerpt, and instead fetches them automatically. Note the tag format, a regular JSON list will result in an error.

|Request info|Value|
|-|-|
|Endpoint|`/api/bookmarks`|
|Method|`POST`|
|`X-Session-Id` Header|`sessionId`|

Body:
```json
{
	"url": "https://interesting_cool_article.com",
	"createArchive": true,
	"public": 1,
	"tags": [{"name": "Interesting"}, {"name": "Cool"}],
	"title": "Cool Interesting Article",
	"excerpt": "An interesting and cool article indeed!"
}
```
Returns:
```json
{
    "id": 827,
    "url": "https://interesting_cool_article.com",
    "title": "TITLE",
    "excerpt": "EXCERPT",
    "author": "AUTHOR",
    "public": 1,
    "modified": "DATE",
    "html": "HTML",
    "imageURL": "/bookmark/827/thumb",
    "hasContent": false,
    "hasArchive": true,
    "tags": [
        {
             "name": "Interesting"
        },
        {
             "name": "Cool"
        }
    ],
    "createArchive": true
}
```

## Edit bookmark
Modifies a bookmark, by ID.
|Request info|Value|
|-|-|
|Endpoint|`/api/bookmarks`|
|Method|`PUT`|
|`X-Session-Id` Header|`sessionId`|

Body:
```json
{
    "id": 3,
    "url": "https://interesting_cool_article.com",
    "title": "Cool Interesting Article",
    "excerpt": "An interesting and cool article indeed!",
    "author": "AUTHOR",
    "public": 1,
    "modified": "2019-09-22 00:00:00",
    "imageURL": "/bookmark/3/thumb",
    "hasContent": false,
    "hasArchive": false,
    "tags": [],
    "createArchive": false
}
```
After providing the ID, provide the modified fields. The syntax is the same as [adding](#Add-a-bookmark).

## Delete bookmark
Deletes a list of bookmarks, by their IDs.
|Request info|Value|
|-|-|
|Endpoint|`/api/bookmarks`|
|Method|`DEL`|
|`X-Session-Id` Header|`sessionId`|

Body:
```json
[1, 2, 3]
```

# Tags
## Get tags
Gets the list of tags, their IDs and the number of entries that have those tags.
|Request info|Value|
|-|-|
|Endpoint|`/api/tags`|
|Method|`GET`|
|`X-Session-Id` Header|`sessionId`|

Returns:
```json
[
    {
        "id": 1,
        "name": "Cool",
        "nBookmarks": 1
    },
    {
        "id": 2,
        "name": "Interesting",
        "nBookmarks": 1
    }
```

## Rename tag
Renames a tag, provided its ID.
|Request info|Value|
|-|-|
|Endpoint|`/api/tags`|
|Method|`PUT`|
|`X-Session-Id` Header|`sessionId`|

Body:
```json
{
    "id": 1,
    "name": "TAG_NEW_NAME"
}
```

# Accounts
## List accounts
Gets the list of all user accounts, their IDs, and whether or not they are owners.
|Request info|Value|
|-|-|
|Endpoint|`/api/accounts`|
|Method|`GET`|
|`X-Session-Id` Header|`sessionId`|

Returns:
```json
[
    {
        "id": 1,
        "username": "shiori",
        "owner": true
    }
]
```

## Create account
Creates a new user.
|Request info|Value|
|-|-|
|Endpoint|`/api/accounts`|
|Method|`POST`|
|`X-Session-Id` Header|`sessionId`|
Body:
```json
{
	"username": "shiori2",
	"password": "gopher",
	"owner": false
}
```

## Edit account
Changes an account's password or owner status.
|Request info|Value|
|-|-|
|Endpoint|`/api/accounts`|
|Method|`PUT`|
|`X-Session-Id` Header|`sessionId`|
Body:
```json
{
	"username": "shiori",
	"oldPassword": "gopher",
	"newPassword": "gopher",
	"owner": true
}
```

## Delete accounts
Deletes a list of users.
|Request info|Value|
|-|-|
|Endpoint|`/api/accounts`|
|Method|`DEL`|
|`X-Session-Id` Header|`sessionId`|

Body:
```json
["shiori", "shiori2"]
```


code:
# API v1

> ℹ **This is the documentation for the new API. This API is still in development and though the finished endpoints should not change please consider that breaking changes may occur once its properly released. If you are looking for the current API, please [see here](./API.md).**

The new API is an ongoing effort to migrate the current API to a more modern and standard API.

The main goals of this new API are:
- Ease of development
- Use of a [modern framework](https://gin-gonic.com)
- Use of a [standard API specification](https://swagger.io/specification/)
- Self-documented API using [Swag](https://github.com/swaggo/swag)
- Improved authentication and sessions using [JWT](https://jwt.io)
- Deduplicate code between the webserver and the API by refactoring the logic into domains
- Improve testability by using interfaces and dependency injection

The current status of this new API can be checked [here](https://github.com/go-shiori/shiori/issues/640).

Since the API is self-docummented, you can check the API documentation by [running the server locally](./Contribute.md#running-the-server-locally) and visiting the [`/swagger/index.html` endpoint](http://localhost:8080/swagger/index.html).


code:
Content
---

<!-- TOC -->

- [Add bookmark](#add-bookmark)

<!-- /TOC -->

Add bookmark
---

To add bookmark with CLI you can use `shiori add`.

Shiori has flags to add bookmark: `shiori add --help`

```
Bookmark the specified URL

Usage:
  shiori add url [flags]

Flags:
  -e, --excerpt string   Custom excerpt for this bookmark
  -h, --help             help for add
      --log-archival     Log the archival process
  -a, --no-archival      Save bookmark without creating offline archive
  -o, --offline          Save bookmark without fetching data from internet
  -t, --tags strings     Comma-separated tags for this bookmark
  -i, --title string     Custom title for this bookmark

Global Flags:
      --log-caller                 logrus report caller or not
      --log-level string           set logrus loglevel (default "info")
      --portable                   run shiori in portable mode
      --storage-directory string   path to store shiori data
```

Examples:

Add url:
`shiori add https://example.com`

Add url with tags:
`shiori add https://example.com -t "example-1,example-2"`

Add url with custom title:
`shiori add https://example.com --title "example example"`


code:
Content
---

<!-- TOC -->

- [Content](#content)
- [Data Directory](#data-directory)
- [Database](#database)
    - [MySQL](#mysql)
    - [PostgreSQL](#postgresql)

<!-- /TOC -->

Data Directory
---

Shiori is designed to work out of the box, but you can change where it stores your bookmarks if you need to.

By default, Shiori saves your bookmarks in one of the following directories:

| Platform |                          Directory                           |
|----------|--------------------------------------------------------------|
| Linux    | `${XDG_DATA_HOME}/shiori` (default: `~/.local/share/shiori`) |
| macOS    | `~/Library/Application Support/shiori`                               |
| Windows  | `%LOCALAPPDATA%/shiori`                                      |

If you pass the flag `--portable` to Shiori, your data will be stored  in the `shiori-data` subdirectory alongside the shiori executable.

To specify a custom path, set the `SHIORI_DIR` environment variable.

Database
---

Shiori uses an SQLite3 database stored in the above data directory by default. If you prefer, you can also use MySQL or PostgreSQL database by setting it in environment variables.

### MySQL

MySQL example: `SHIORI_DATABASE_URL="mysql://username:password@(hostname:port)/database?charset=utf8mb4"`

You can find additional details in [go mysql sql driver documentation](https://github.com/go-sql-driver/mysql#dsn-data-source-name).

### PostgreSQL

PostgreSQL example: `SHIORI_DATABASE_URL="postgres://pqgotest:password@hostname/database?sslmode=verify-full"`

You can find additional details in [go postgres sql driver documentation](https://pkg.go.dev/github.com/lib/pq).


code:
# Contribute

1. [Running the server locally](#running-the-server-locally)
2. [Updating the API documentation](#updating-the-api-documentation)
3. [Lint the code](#lint-the-code)
4. [Running tests](#running-tests)

## Running the server locally

To run the current development server with the defaults you can run the following command:

```bash
make serve
```

If you want to run the refactored server, you can run the following command:

```bash
make run-server
```

> **ℹ Note:** For more information into what the _refactored server_ means, please check this issue: https://github.com/go-shiori/shiori/issues/640

## Updating the API documentation

> **ℹ Note:** This only applies for the Rest API documentation under the `internal/http` folder, **not** the one under `internal/webserver`.

If you make any changes to the Rest API endpoints, you need to update the swagger documentation. In order to do that, you need to have installed [swag](https://github.com/swaggo/swag).

Then, run the following command:

```bash
make swagger
```

## Updating the frontend styles

The styles that are bundled with Shiori are stored under `internal/view/assets/css/style.css` and `internal/view/assets/css/archive.css` and created from the less files under `internal/views/assets/less`.

If you want to make frontend changes you need to do that under the less files and then compile them to css. In order to do that, you need to have installed [bun](https://bun.sh).

Then, run the following command:

```bash
make styles
```

The `style.css`/`archive.css` will be updated and changes **needs to be committed** to the repository.

## Lint the code

In order to lint the code, you need to have installed [golangci-lint](https://golangci-lint.run) and [swag](https://github.com/swaggo/swag).

After that, run the following command:

```bash
make lint
```

If any errors are found please fix them before submitting your PR.

## Running tests

In order to run the test suite, you need to have running a local instance of MariaDB and PostgreSQL.
If you have docker, you can do this by running the following command with the compose file provided:

```bash
docker-compose up -d mariadb postgres
```

After that, provide the `SHIORI_TEST_PG_URL` and `SHIORI_TEST_MYSQL_URL` environment variables with the connection string to the databases:

```
SHIORI_TEST_PG_URL=postgres://shiori:shiori@127.0.0.1:5432/shiori?sslmode=disable
SHIORI_TEST_MYSQL_URL=shiori:shiori@tcp(127.0.0.1:3306)/shiori
```

Finally, run the tests with the following command:

```bash
make unittest
```


code:
# Frequently asked questions

<!-- TOC -->

- [Frequently asked questions](#frequently-asked-questions)
- [General](#general)
    - [What is this project ?](#what-is-this-project-)
    - [How does it compare to other bookmarks manager ?](#how-does-it-compare-to-other-bookmarks-manager-)
    - [What are the system requirements ?](#what-are-the-system-requirements-)
    - [What is the status for this app ?](#what-is-the-status-for-this-app-)
    - [Is this app actively maintained ?](#is-this-app-actively-maintained-)
    - [How to make a contribution ?](#how-to-make-a-contribution-)
    - [How to make a donation ?](#how-to-make-a-donation-)
- [Common Issues](#common-issues)
    - [What is the default account to login at the first time ?](#what-is-the-default-account-to-login-at-the-first-time-)
    - [Why my old accounts can't do anything after upgrading Shiori to v1.5.0 ?](#why-my-old-accounts-cant-do-anything-after-upgrading-shiori-to-v150-)
    - [Failed to get bookmarks: failed to fetch data: no such module: fts4 ?](#failed-to-get-bookmarks-failed-to-fetch-data-no-such-module-fts4-)
- [Advanced](#advanced)
    - [How to run shiori on start up ?](#how-to-run-shiori-on-start-up-)

<!-- /TOC -->

# General

## What is this project ?

Shiori is a bookmarks manager that built with Go. I've got the idea to make this after reading a comment on HN back in [April 2017](https://news.ycombinator.com/item?id=14203383) :

```
... for me the dream bookmark manager would be something really simple
with two commands like:

$ bookmark add http://...

That will:

a. Download a static copy of the webpage in a single HTML file, with a
   PDF exported copy, that also take care of removing ads and
   unrelated content from the stored content.
b. Run something like http://smmry.com/ to create a summary of the page
   in few sentences and store it.
c. Use NLP techniques to extract the principle keywords and use them
   as tags

And another command like:

$ bookmark search "..."

That will:

d. Not use regexp or complicated search pattern, but instead;
e. Search titles, tags, page content smartly and interactively, and;
f. Sort/filter results smartly by relevance, number of matches,
   frequency, or anything else useful
g. Storing everything in a git repository or simple file structure
   for easy synchronization, bonus point for browsers integrations.
```

I do like using bookmarks and those idea sounds useful to me. More importantly, it seems possible enough to do. Not too hard that it's impossible for me, but not too easy that it doesn't teach me anything. Looking back now, the only thing that I (kind of) managed to do is a, b, d and e. But it's enough for me, so it's fine I guess :laughing:.

## How does it compare to other bookmarks manager ?

To be honest I don't know. The only bookmarks manager that I've used is Pocket and the one that bundled in web browser. I do like Pocket though. However, since bookmarks is kind of sensitive data, I prefer it stays offline or in my own server.

## What are the system requirements ?

It runs in the lowest tier of Digital Ocean VPS, so I guess it should be able to run anywhere.

## What is the status for this app ?

It's stable enough to use and the database shouldn't be changed anymore. However, my bookmarks at most is only several hundred entries, therefore I haven't test whether it able to process or imports huge amount of bookmarks. If you would, please do try it.

## Is this app actively maintained ?

Yes, however the development pace might be really slow. @fmartingr is the current active maintainer though @RadhiFadlillah or @deanishe may step and work on stuff from time to time or in other [go-shiori projects](https://github.com/go-shiori)

## How to make a contribution ?

Just like other open source projects, you can make a contribution by submitting issues or pull requests.

## How to make a donation ?

If you like this project, you can donate to maintainers via:

- **fmartingr** [PayPal](https://www.paypal.me/fmartingr), [Ko-Fi](https://ko-fi.com/fmartingr)
- **RadhiFadlillah** [PayPal](https://www.paypal.me/RadhiFadlillah), [Ko-Fi](https://ko-fi.com/radhifadlillah)

# Common Issues

## What is the default account to login at the first time ?

The default account is `shiori` with password `gopher`.
It is removed once another 'owner' account is created.

## Why my old accounts can't do anything after upgrading Shiori to v1.5.0 ?

This issue happened because in Shiori v1.0.0 there are no account level, which means everyone is treated as owner. However, in Shiori v1.5.0 there are two account levels i.e. owner and visitor. The level difference is stored in [database](https://github.com/go-shiori/shiori/blob/master/internal/database/sqlite.go#L42-L48) as boolean value in column `owner` with default value false (which means by default all account is visitor, unless specified otherwise).

Because in v1.5.0 by default all account is visitor, when updating from v1.0 to v1.5 all of the old accounts by default will be marked as visitor. Fortunately, when there are no owner registered in database, we can login as owner using default account.

So, as workaround for this issue, you should :

- Login as default account.
- Go to options page.
- Remove your old accounts.
- Recreate them, but now as owner.

For more details see [#148](https://github.com/go-shiori/shiori/issues/148).

## `Failed to get bookmarks: failed to fetch data: no such module: fts4` ?

This happens to SQLite users that upgrade from 1.5.0 to 1.5.1 because of a breaking change. Please check the
[announcement](https://github.com/go-shiori/shiori/discussions/383) to understand how to migrate your database and move forward.

# Advanced

## How to run `shiori` on start up ?

There are several methods to run `shiori` on start up, however the most recommended is running it as a service.

1. Create a service unit for `systemd` at `/etc/systemd/system/shiori.service`.

* Shiori is run via `docker` :

    ```ini
    [Unit]
    Description=Shiori container
    After=docker.service

    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/docker rm shiori-1
    ExecStart=/usr/bin/docker run \
      --rm \
      --name shiori-1 \
      -p 8080:8080 \
      -v /srv/machines/shiori:/shiori \
       ghcr.io/go-shiori/shiori
    ExecStop=/usr/bin/docker stop -t 2 shiori-1

    [Install]
    WantedBy=multi-user.target
    ```

* Shiori without `docker`. Set absolute path to `shiori` binary. `--portable` sets the data directory to be alongside the executable.

    ```ini
    [Unit]
    Description=Shiori service

    [Service]
    ExecStart=/home/user/go/bin/shiori serve --portable
    Restart=always

    [Install]
    WantedBy=multi-user.target
    ```

* Shiori without `docker` and without `--portable` but secure.

   ```ini
   [Unit]
   Description=shiori service
   Requires=network-online.target
   After=network-online.target

   [Service]
   Type=simple
   ExecStart=/usr/bin/shiori serve
   Restart=always
   User=shiori
   Group=shiori

   Environment="SHIORI_DIR=/var/lib/shiori"
   DynamicUser=true
   PrivateUsers=true
   ProtectHome=true
   ProtectKernelLogs=true
   RestrictAddressFamilies=AF_INET AF_INET6
   StateDirectory=shiori
   SystemCallErrorNumber=EPERM
   SystemCallFilter=@system-service
   SystemCallFilter=~@chown
   SystemCallFilter=~@keyring
   SystemCallFilter=~@memlock
   SystemCallFilter=~@setuid
   DeviceAllow=

   CapabilityBoundingSet=
   LockPersonality=true
   MemoryDenyWriteExecute=true
   NoNewPrivileges=true
   PrivateDevices=true
   PrivateTmp=true
   ProtectControlGroups=true
   ProtectKernelTunables=true
   ProtectSystem=full
   ProtectClock=true
   ProtectKernelModules=true
   ProtectProc=noaccess
   ProtectHostname=true
   ProcSubset=pid
   RestrictNamespaces=true
   RestrictRealtime=true
   RestrictSUIDSGID=true
   SystemCallArchitectures=native
   SystemCallFilter=~@clock
   SystemCallFilter=~@debug
   SystemCallFilter=~@module
   SystemCallFilter=~@mount
   SystemCallFilter=~@raw-io
   SystemCallFilter=~@reboot
   SystemCallFilter=~@privileged
   SystemCallFilter=~@resources
   SystemCallFilter=~@cpu-emulation
   SystemCallFilter=~@obsolete
   UMask=0077

   [Install]
   WantedBy=multi-user.target
   ```

2. Set up data directory if Shiori with `docker`

    This assumes, that the Shiori container has a runtime directory to store their
    database, which is at `/srv/machines/shiori`. If you want to modify that,
    make sure, to fix your `shiori.service` as well.

    ```sh
    install -d /srv/machines/shiori
    ```

3. Enable and start the service

    ```sh
    systemctl enable --now shiori
    ```