chore(i18n): new Crowdin updates

This commit is contained in:
crowdin 2022-11-04 11:03:24 +00:00 committed by Yassine Doghri
commit fa90decdd1
196 changed files with 5322 additions and 2183 deletions

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Imatges Docker oficials
Castopod envia 2 imatges de Docker al Docker Hub durant el seu procés de creació
automatitzada:
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [** code>castopod/app</code>**](https://hub.docker.com/r/castopod/app): el
paquet incloent Castopod i totes les dependències
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una
configuració de Nginx per a Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
A més, Castopod requereix una base de dades compatible amb MySQL. Es pot afegir
una base de dades Redis com a gestor de memòria cau.
@ -21,6 +23,8 @@ una base de dades Redis com a gestor de memòria cau.
- `develop` [no-estable], darrera versió de la branca de desenvolupament
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Exemple d'ús
@ -33,7 +37,7 @@ una base de dades Redis com a gestor de memòria cau.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ una base de dades Redis com a gestor de memòria cau.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ una base de dades Redis com a gestor de memòria cau.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -117,9 +136,19 @@ una base de dades Redis com a gestor de memòria cau.
## Variables d'entorn
- **castopod/video-clipper**
| Nom de la variable | Tipus (`default`) | Default |
| -------------------------- | ----------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Nom de la variable | Tipus (`default`) | Default |
| Nom de la variable | Type (`default`) | Default |
| ---------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
@ -145,6 +174,6 @@ una base de dades Redis com a gestor de memòria cau.
- **castopod/web-server**
| Nom de la variable | Type | Default |
| Variable name | Type | Default |
| --------------------- | ------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |

View file

@ -87,8 +87,8 @@ descentralització i així garantir que la creativitat dels podcasters pugui
expressar-se.
Aquest projecte és impulsat per la comunitat de codi obert, i concretament pels
moviments [Fediverse](https://fediverse.party/en/fediverse/) i [Podcasting
2.0](https://podcastindex .org/).
moviments [Fediverse](https://fediverse.party/en/fediverse/) i \[Podcasting
2.0\](https://podcastindex .org/).
## Comparació amb altres solucions

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -142,6 +142,8 @@ You may add your email configuration in your instance's `.env` like so:
```ini
# […]
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Imágenes oficiales de Docker
Castopod lanza 2 imágenes Docker al Docker Hub durante su proceso de
construcción automatizada:
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquete
completo de Castopod con todas las dependencias.
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una
configuración Nginx para Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Adicionalmente, Castopod requiere una base de datos compatible con MySQL.
También se puede añadir una base de datos Redis como gestor de caché.
@ -21,6 +23,8 @@ También se puede añadir una base de datos Redis como gestor de caché.
- `develop` [unstable], última rama de desarrollo construida
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Ejemplo de uso
@ -33,7 +37,7 @@ También se puede añadir una base de datos Redis como gestor de caché.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ También se puede añadir una base de datos Redis como gestor de caché.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ También se puede añadir una base de datos Redis como gestor de caché.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -113,13 +132,23 @@ También se puede añadir una base de datos Redis como gestor de caché.
`https://castopod.mi_dominio.com/cp-install` para terminar de configurar
Castopod!
5. Todo listo, empieza a hacer podcasting! 🎙️🚀
5. Todo listo, empieza a hacer podcasting! 🎙️🚀 🎙️🚀
## Variables de Entorno
- **castopod/video-clipper**
| Nombre de la Variable | Tipo (`predeterminado`) | Default |
| -------------------------- | ----------------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Nombre de la Variable | Tipo (`predeterminado`) | Default |
| Nombre de la variable | Type (`default`) | Default |
| ---------------------------- | ----------------------- | ---------------- |
| **`CP_URLBASE`** | string | `undefined` |
| **`CP_MEDIA_URLBASE`** | ?string | `CP_BASEURL` |
@ -145,6 +174,6 @@ También se puede añadir una base de datos Redis como gestor de caché.
- **castopod/web-server**
| Nombre de la variable | Type | Default |
| Variable name | Type | Default |
| --------------------- | ------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |

View file

@ -120,9 +120,7 @@ extensiones:
> Estas tareas así definidas se ejecutarán **cada minuto**. Pero puedes
> definir una frecuencia más acorde a tus necesidades: cada 5, 10 minutos o
> más. Ejemplo: si reemplazas el último asterisco por \*/30 se ejecutará cada
> 30 minutos.
> ([más ejemplos](https://blog.carreralinux.com.ar/2016/09/ejemplos-de-cron-tareas-linux/))
> más.
### (recomendado) Asistente web de instalación
@ -150,10 +148,9 @@ You may add your email configuration in your instance's `.env` like so:
```ini
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
SMTPHost="your_smtp_host"
email. SMTPUser="your_smtp_user"
email. SMTPPass="your_smtp_password"
```
#### Email config options

View file

@ -66,7 +66,7 @@ Releases may come with additional update instructions (see
## Fully Automated updates
> Próximamente... 👀
> Próximamente...
## Preguntas Frecuentes (FAQ)
@ -80,9 +80,9 @@ file.
### No he actualizado mi instancia en mucho tiempo… ¿Qué debo hacer?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
No problem! No problem! Just get the latest release as described above. Only,
when going through the release instructions (4), perform them sequentially, from
the oldest to the newest.
> Puede que quieras hacer una copia de seguridad de tu instancia dependiendo del
> tiempo que no hayas actualizado Castopod.

View file

@ -149,7 +149,7 @@ y usar Castopod si quieres alojar tus podcasts.
### Castopod vs. otras plataformas de podcast
Hay muchas soluciones para alojar tus podcasts, algunas de las cuales son
realmente geniales y [muchas de ellas](https://podcastindex. org/apps) están
realmente geniales y \[muchas de ellas\](https://podcastindex. org/apps) están
dando el salto al tren del Podcasting 2.0, ¡como ya ha hecho Castopod!
Cada una de estas soluciones difiere entre sí, puedes compararlas en esta

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -285,6 +285,11 @@ https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -286,6 +286,11 @@ https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -285,6 +285,11 @@ https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -144,6 +144,8 @@ You may add your email configuration in your instance's `.env` like so:
```ini
# […]
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -142,6 +142,8 @@ You may add your email configuration in your instance's `.env` like so:
```ini
# […]
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -142,6 +142,8 @@ You may add your email configuration in your instance's `.env` like so:
```ini
# […]
# […]
email.fromEmail="your_email_address"
email.SMTPHost="your_smtp_host"
email.SMTPUser="your_smtp_user"

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,13 +5,15 @@ sidebarDepth: 3
# Official Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
@ -21,6 +23,8 @@ can be added as a cache handler.
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
@ -33,7 +37,7 @@ can be added as a cache handler.
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -115,6 +134,16 @@ can be added as a cache handler.
## Environment Variables
- **castopod/video-clipper**
| Variable name | Type (`default`) | Default |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |

View file

@ -0,0 +1,87 @@
---
title: Authentication & Authorization
sidebarDepth: 3
---
# Authentication & Authorization
Castopod handles authentication and authorization using `codeigniter/shield`
coupled with custom rules. Roles and permissions are defined at two levels:
1. [instance wide](#1-instance-wide-roles-and-permissions)
2. [per podcast](#2-per-podcast-roles-and-permissions)
## 1. Instance wide roles and permissions
### Instance roles
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
| Podcaster | General users of Castopod. | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### Instance permissions
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
| podcasts.view | Can view all podcasts. |
| podcasts.create | Can create new podcasts. |
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. Per podcast roles and permissions
### Per podcast roles
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| role | description | permissions |
| ------ | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Admin | Has complete control of podcast #{id}. | \* |
| Editor | Manages content and publications of podcast #{id}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| Author | Manages content of podcast #{id} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #{id}. | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### Per podcast permissions
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| permission | description |
| ---------------------------- | ------------------------------------------------------------------------ |
| view | Can view dashboard and analytics of podcast #{id}. |
| edit | Can edit podcast #{id}. |
| delete | Can delete podcast #{id}. |
| manage-import | Can synchronize imported podcast #{id}. |
| manage-persons | Can manage subscriptions of podcast #{id}. |
| manage-subscriptions | Can manage subscriptions of podcast #{id}. |
| manage-contributors | Can manage contributors of podcast #{id}. |
| manage-platforms | Can set/remove platform links of podcast #{id}. |
| manage-publications | Can publish podcast #{id}. |
| manage-notifications | Can view and mark notifications as read for podcast #{id}. |
| interact-as | Can interact as the podcast #{id} to favourite, share or reply to posts. |
| episodes.view | Can view dashboard and analytics of podcast #{id}. |
| episodes.create | Can create episodes for podcast #{id}. |
| episodes.edit | Can edit podcast #{id}. |
| episodes.delete | Can delete podcast #{id}. |
| episodes.manage-persons | Can manage subscriptions of podcast #{id}. |
| episodes.manage-clips | Can manage video clips or soundbites of podcast #{id}. |
| episodes.manage-publications | Can publish podcast #{id}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #{id}. |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -1,39 +1,43 @@
---
title: Official Docker images
title: Officiella Docker images
sidebarDepth: 3
---
# Official Docker images
# Officiella Docker images
Castopod pushes 2 Docker images to the Docker Hub during its automated build
Castopod pushes 3 Docker images to the Docker Hub during its automated build
process:
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): the app bundle
with all of Castopod dependencies
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): an
Nginx configuration for Castopod
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): apppaketet med
alla Castopod-beroenden
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): en
Nginx konfiguration för Castopod
- [**`castopod/video-clipper`**](https://hub.docker.com/r/castopod/video-clipper):
an optional image building videoclips thanks to ffmpeg
Additionally, Castopod requires a MySQL-compatible database. A Redis database
can be added as a cache handler.
Dessutom kräver Castopod en MySQL-kompatibel databas. En Redis databas kan
läggas till som cachehanterare.
## Supported tags
## Taggar som stöds
- `develop` [unstable], latest development branch build
- `beta` [stable], latest beta version build
- `1.0.0-beta.x` [stable], specific beta version build (since `1.0.0-beta.22`)
- `utveckla` [unstable], senaste utvecklingsgrenen
- `beta` [stable], senaste betaversionen bygger
- `1.0.0-beta.x` [stable], specifik betaversion build (sedan `1.0.0-beta.22`)
- `latest` [stable], latest version build
- `1.x.x` [stable], specific version build (since `1.0.0`)
## Example usage
## Exempel på användning
1. Install [docker](https://docs.docker.com/get-docker/) and
[docker-compose](https://docs.docker.com/compose/install/)
2. Create a `docker-compose.yml` file with the following:
1. Installera [docker](https://docs.docker.com/get-docker/) och
[docker-komponera](https://docs.docker.com/compose/install/)
2. Skapa en `docker-compose.yml` fil med följande:
```yml
version: "3.7"
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -51,7 +55,7 @@ can be added as a cache handler.
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -83,6 +87,21 @@ can be added as a cache handler.
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -93,13 +112,14 @@ can be added as a cache handler.
castopod-db:
```
You have to adapt some variables to your needs (e.g. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` and `CP_ANALYTICS_SALT`).
Du måste anpassa vissa variabler efter dina behov (t.ex. `CP_BASEURL`,
`MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` och `CP_ANALYTICS_SALT`).
3. Setup a reverse proxy for TLS (SSL/HTTPS)
3. Ställ in en omvänd proxy för TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by
a reverse proxy, for example with [Caddy](https://caddyserver.com/):
TLS är obligatoriskt för ActivityPub att arbeta. Detta jobb kan enkelt
hanteras av en omvänd proxy, till exempel med
[Caddy](https://caddyserver.com/):
```
#castopod
@ -108,28 +128,39 @@ can be added as a cache handler.
}
```
4. Run `docker-compose up -d`, wait for it to initialize and head on to
`https://castopod.example.com/cp-install` to finish setting up Castopod!
4. Kör `docker-komponera upp -d`, vänta på att den initieras och gå vidare till
`https://castopod.example.com/cp-install` för att slutföra installationen av
Castopod!
5. You're all set, start podcasting! 🎙️🚀
5. Ni är alla klara, börja podcasting! 🎙️🚀
## Environment Variables
## Miljövariabler
- **castopod/video-clipper**
| Variabel namn | Type (`default`) | Standard |
| -------------------------- | ---------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?sträng | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| Variable name | Type (`default`) | Default |
| Variabelt namn | Type (`default`) | Standard |
| ---------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_BASEURL`** | sträng | `odefinierad` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
| **`CP_ADMIN_GATEWAY`** | ?string | `"cp-admin"` |
| **`CP_AUTH_GATEWAY`** | ?string | `"cp-auth"` |
| **`CP_ANALYTICS_SALT`** | string | `undefined` |
| **`CP_ANALYTICS_SALT`** | string | `odefinierad` |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
| **`CP_CACHE_HANDLER`** | [`"file"` or `"redis"`] | `"file"` |
| **`CP_CACHE_HANDLER`** | [`"file"` `"redis"`] | `"file"` |
| **`CP_REDIS_HOST`** | ?string | `"localhost"` |
| **`CP_REDIS_PASSWORD`** | ?string | `null` |
| **`CP_REDIS_PORT`** | ?number | `6379` |
@ -139,10 +170,10 @@ can be added as a cache handler.
| **`CP_EMAIL_SMTP_USERNAME`** | ?string | `"localhost"` |
| **`CP_EMAIL_SMTP_PASSWORD`** | ?string | `null` |
| **`CP_EMAIL_SMTP_PORT`** | ?number | `25` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` or `"ssl"`] | `"tls"` |
| **`CP_EMAIL_SMTP_CRYPTO`** | [`"tls"` eller `"ssl"`] | `"tls"` |
- **castopod/web-server**
| Variable name | Type | Default |
| Variable name | Typ | Default |
| --------------------- | ------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |

View file

@ -3,25 +3,26 @@ title: Installation
sidebarDepth: 3
---
# How to install Castopod?
# Hur man installerar Castopod?
Castopod was thought-out to be easy to install. Whether using dedicated or
shared hosting, you can install it on most PHP-MySQL compatible web servers.
Castopod var tänkt att vara lätt att installera. Oavsett om du använder
dedikerade eller delade webbhotell kan du installera det på de flesta
PHP-MySQL-kompatibla webbservrar.
::: tip Note
::: tips Anteckning
We've released official Docker images for Castopod!
Vi har släppt officiella Docker-bilder för Castopod!
If you prefer using Docker, you may skip this and go straight to the
[docker documentation](./docker.md) for Castopod.
Om du föredrar att använda Docker, kan du hoppa över detta och gå direkt till
[dockerdokumentationen](./docker.md) för Castopod.
:::
## Requirements
## Krav
- PHP v8.1 or higher
- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
- HTTPS support
- MySQL version 5.7 eller högre eller MariaDB version 10.2 eller högre
- Stöd för HTTPS
### PHP v8.1 or higher
@ -30,114 +31,114 @@ PHP version 8.1 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
- [mbstring](https://php.net/manual/en/mbstring.installation.php)
- [gd](https://www.php.net/manual/en/image.installation.php) with **JPEG**,
**PNG** and **WEBP** libraries.
- [gd](https://www.php.net/manual/en/image.installation.php) med **JPEG**,
**PNG** och **WEBP** bibliotek.
- [exif](https://www.php.net/manual/en/exif.installation.php)
Additionally, make sure that the following extensions are enabled in your PHP:
Se dessutom till att följande tillägg är aktiverade i din PHP:
- json (enabled by default - don't turn it off)
- xml (enabled by default - don't turn it off)
- json (aktiverad som standard - stäng inte av)
- xml (aktiverat som standard - stäng inte av)
- [mysqlnd](https://php.net/manual/en/mysqlnd.install.php)
### MySQL compatible database
### MySQL kompatibel databas
> We recommend using [MariaDB](https://mariadb.org).
> Vi rekommenderar att du använder [MariaDB](https://mariadb.org).
::: warning Warning
::: varning Varning
Castopod only works with supported MySQL 5.7 or higher compatible databases. It
will break with the previous MySQL v5.6 for example as its end of life was on
February 5, 2021.
Castopod fungerar endast med stödda MySQL 5.7 eller högre kompatibla databaser.
Den kommer att bryta med den tidigare MySQL v5.6 till exempel eftersom dess slut
var den 5 februari 2021.
:::
You will need the server hostname, database name, username and password to
complete the installation process. If you do not have these, please contact your
server administrator.
Du behöver serverns värdnamn, databasnamn, användarnamn och lösenord för att
slutföra installationen. Om du inte har dessa kontaktar du din
serveradministratör.
#### Privileges
#### Privilegier
User must have at least these privileges on the database for Castopod to work:
`CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`, `UPDATE`,
`REFERENCES`, `CREATE VIEW`.
Användare måste ha minst dessa rättigheter i databasen för att Castopod ska
fungera: `CREATE`, `ALTER`, `DELETE`, `EXECUTE`, `INDEX`, `INSERT`, `SELECT`,
`UPDATE`, `REFERENCES`, `CREATE VIEW`.
### (Optional) FFmpeg v4.1.8 or higher for Video Clips
### (Valfritt) FFmpeg v4.1.8 eller högre för videoklipp
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 or higher is required if you
want to generate Video Clips. The following extensions must be installed:
[FFmpeg](https://www.ffmpeg.org/) version 4.1.8 eller högre krävs om du vill
generera videoklipp. Följande tillägg måste installeras:
- **FreeType 2** library for
- **FreeType 2** bibliotek för
[gd](https://www.php.net/manual/en/image.installation.php).
### (Optional) Other recommendations
### (Valfritt) Andra rekommendationer
- Redis for better cache performances.
- CDN for static files caching and better performances.
- e-mail gateway for lost passwords.
- Redis för bättre cache-prestanda.
- CDN för statiska filer caching och bättre prestanda.
- e-post gateway för förlorade lösenord.
## Install instructions
## Installationsanvisningar
### Pre-requisites
### Förutsättningar
0. Get a Web Server with [requirements](#requirements) installed
1. Create a MySQL database for Castopod with a user having access and
modification privileges (for more info, see
[MySQL compatible database](#mysql-compatible-database)).
2. Activate HTTPS on your domain with an _SSL certificate_.
3. Download and unzip the latest [Castopod Package](https://castopod.org/) onto
the web server if you havent already.
- ⚠️ Set the web server document root to the `public/` sub-folder within the
`castopod` folder.
4. Add **cron tasks** on your web server for various background processes
(replace the paths accordingly):
0. Skaffa en webbserver med [krav](#requirements) installerat
1. Skapa en MySQL-databas för Castopod med en användare som har åtkomst till och
modifieringsrättigheter (för mer info, se
[MySQL-kompatibel databas](#mysql-compatible-database)).
2. Aktivera HTTPS på din domän med ett _SSL-certifikat_.
3. Ladda ner och packa upp det senaste [Castopod Package](https://castopod.org/)
på webbservern om du inte redan har det.
- ⚠️ Sätt webbserverdokumentroten till `public/` undermappen i mappen
`castopod`.
4. Lägg till **cron-uppgifter** på din webbserver för olika bakgrundsprocesser
(byt ut sökvägarna därefter):
- For social features to work properly, this task is used to broadcast social
activities to your followers on the fediverse:
- För att sociala funktioner ska fungera korrekt, används denna uppgift för
att sända sociala aktiviteter till dina anhängare på fediverse:
```bash
* * * * * /path/to/php /path/to/castopod/public/index.php scheduled-activities
```
- For having your episodes be broadcasted on open hubs upon publication using
- För att dina episoder ska sändas på öppna hubbar vid publicering med
[WebSub](https://en.wikipedia.org/wiki/WebSub):
```bash
* * * * * /usr/local/bin/php /castopod/public/index.php scheduled-websub-publish
```
- For Video Clips to be created (see
[FFmpeg requirements](#ffmpeg-v418-or-higher-for-video-clips)):
- För att videoklipp ska skapas (se
[FFmpeg krav](#ffmpeg-v418-or-higher-for-video-clips)):
```bash
* * * * * /path/to/php /path/to/castopod/public/index.php scheduled-video-clips
```
> These tasks run **every minute**. You may set the frequency depending on
> your needs: every 5, 10 minutes or more.
> Dessa uppgifter körs **varje minut**. Du kan ställa in frekvensen beroende
> på dina behov: var 5, 10 minuter eller mer.
### (recommended) Install Wizard
### (rekommenderas) Installationsguide
1. Run the Castopod install script by going to the install wizard page
(`https://your_domain_name.com/cp-install`) in your favorite web browser.
2. Follow the instructions on your screen.
3. Start podcasting!
1. Kör Castopod install script genom att gå till installationsguiden sidan
(`https://your_domain_name.com/cp-install`) i din favorit webbläsare.
2. Följ instruktionerna på din enhet.
3. Börja podcasting!
::: info Note
::: info Notering
The install script writes a `.env` file in the package root. If you cannot go
through the install wizard, you can create and edit the `.env` file manually
based on the `.env.example` file.
Installationsskriptet skriver en `.env` -fil i paketroten. Om du inte kan gå via
installationsguiden kan du skapa och redigera `. nv` filen manuellt baserat på
`.env.example` filen.
:::
### Email/SMTP setup
Email configuration is required for some features to work properly (eg.
retrieving your forgotten password, sending instructions to premium subscribers,
E-postkonfiguration krävs för att vissa funktioner ska fungera korrekt (t.ex.
att hämta ditt glömda lösenord, skicka instruktioner till premiumprenumeranter,
…)
You may add your email configuration in your instance's `.env` like so:
Du kan lägga till din e-postkonfiguration i din instans `.env` som så:
```ini
# […]
@ -148,33 +149,33 @@ email.SMTPUser="your_smtp_user"
email.SMTPPass="your_smtp_password"
```
#### Email config options
#### Alternativ för e-postkonfiguration
| Variable name | Type | Default |
| ---------------- | -------------------- | ------------ |
| **`fromEmail`** | string | `undefined` |
| **`fromName`** | string | `"Castopod"` |
| **`SMTPHost`** | string | `undefined` |
| **`SMTPUser`** | string | `undefined` |
| **`SMTPPass`** | string | `undefined` |
| **`SMTPPort`** | number | `25` |
| **`SMTPCrypto`** | [`"tls"` or `"ssl"`] | `"tls"` |
| Variabelt namn | Typ | Standard |
| ---------------- | ----------------------- | ------------- |
| **`fromEmail`** | sträng | `odefinierad` |
| **`fromName`** | sträng | `"Castopod"` |
| **`SMTPHost`** | sträng | `odefinierad` |
| **`SMTPUser`** | sträng | `odefinierad` |
| **`SMTPPass`** | sträng | `odefinierad` |
| **`SMTPPort`** | nummer | `25` |
| **`SMTPCrypto`** | [`"tls"` eller `"ssl"`] | `"tls"` |
## Community packages
## Gemenskapspaket
If you don't want to bother with installing Castopod manually, you may use one
of the packages created and maintained by the open-source community.
Om du inte vill bry dig om att installera Castopod manuellt, kan du använda ett
av de paket som skapats och underhålls av open source-miljön.
### Install with YunoHost
### Installera med YunoHost
[YunoHost](https://yunohost.org/) is a distribution based on Debian GNU/Linux
made up of free and open-source software packages. It manages the hardships of
self-hosting for you.
[YunoHost](https://yunohost.org/) är en distribution baserad på Debian GNU/Linux
som består av mjukvarupaket med fri och öppen källkod. Det hanterar
svårigheterna med self-hosting för dig.
<div class="flex flex-wrap items-center gap-4">
<a href="https://install-app.yunohost.org/?app=castopod" target="_blank" rel="noopener noreferrer">
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Install Castopod with YunoHost" class="align-middle" />
<img src="https://install-app.yunohost.org/install-with-yunohost.svg" alt="Installera Castopod med YunoHost" class="align-middle" />
</a>
<a href="https://github.com/YunoHost-Apps/castopod_ynh" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-4 py-[.3rem] mx-auto font-semibold text-center text-black rounded-md gap-x-1 border-2 border-solid border-[#333] hover:no-underline hover:bg-gray-100"><svg

View file

@ -1,23 +1,23 @@
---
title: Security
title: Säkerhet
---
# Security concerns
# Säkerhetsfrågor
Castopod is built on top of [CodeIgniter4](https://codeigniter.com/), a PHP
framework that encourages
[good security practices](https://codeigniter.com/user_guide/concepts/security.html).
Castopod är byggt ovanpå [CodeIgniter4](https://codeigniter.com/), ett PHP
ramverk som uppmuntrar
[goda säkerhetsmetoder](https://codeigniter.com/user_guide/concepts/security.html).
To maximize your instance's safety and prevent any malicious attack, we
recommend you update all your Castopod files permissions after installation or
updates (to avoid any prior permission error):
För att maximera din instans säkerhet och förhindra alla skadliga attacker, vi
rekommenderar att du uppdaterar alla dina Castopod-filer behörigheter efter
installation eller uppdateringar (för att undvika eventuella föregående
tillståndsfel):
- `writable/` folder must be **readable** and **writable**.
- `public/media/` folder must be **readable** and **writable**.
- any other file must be set to **readonly**.
- `writable/` mapp måste vara **läsbar** och **skrivbar**.
- `public/media/` mapp måste vara **läsbar** och **skrivbar**.
- någon annan fil måste vara inställd på **readonly**.
For instance, if you are using Apache or NGINX with Ubuntu you may do the
following:
Till exempel, om du använder Apache eller NGINX med Ubuntu kan du göra följande:
```bash
sudo chown -R root:root /path/to/castopod

View file

@ -1,109 +1,106 @@
---
title: Update
title: Uppdatera
sidebarDepth: 3
---
# How to update Castopod?
# Hur uppdaterar man Castopod?
After installing Castopod, you may want to update your instance to the latest
version in order to enjoy the latest features ✨, bug fixes 🐛 and performance
improvements ⚡.
Efter att du installerat Castopod, kanske du vill uppdatera din instans till den
senaste -versionen för att njuta av de senaste funktionerna ✨, buggfixar 🐛 och
prestanda förbättringar ⚡.
## Update instructions
## Uppdatera instruktioner
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
0. ⚠️ Innan någon uppdatering rekommenderar vi starkt att du säkerhetskopierar
dina Castopod-filer och databas.
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
[Ska jag göra en säkerhetskopia innan jag uppdaterar?](#should-i-make-a-backup-before-updating)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
1. Gå till
[releaser sidan](https://code.castopod.org/adaures/castopod/-/releases) och
se om din instans är uppdaterad med den senaste Castopod versionen
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
[Var hittar jag min Castopod-version?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
2. Ladda ner det senaste utgivningspaketet som heter `Castopod Package`, du kan
välja mellan `zip` eller `tar.gz` arkiv
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
- ⚠️ Kontrollera att du laddar ner Castopod-paketet och **INTE** källkoden
- Observera att du även kan ladda ner det senaste paketet från
[castopod.org](https://castopod.org/)
3. On your server:
3. På din server:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- Ta bort alla filer utom `.env` och `publik/media`
- Kopiera de nya filerna från det nedladdade paketet till din server
::: info Note
::: info Notering
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Du kan behöva återställa filrättigheter som under installationsprocessen.
Kontrollera [säkerhetsbekymmer](./security.md).
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. Uppdatera ditt databasschema från din `Castopod Admin` > `Om` sida eller kör:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
5. Rensa din cache från `Castopod Admin` > `Inställningar` > `allmän` >
`Hushållning`
6. ✨ Njut av din färska instans, du är alla klara!
::: info Note
::: info Notering
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
Utgåvor kan komma med ytterligare uppdateringsinstruktioner (se
[utgåvor sidan](https://code.castopod.org/adaures/castopod/-/releases)).
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
[Jag har inte uppdaterat min instans på länge… Vad ska jag göra?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
:::
## Fully Automated updates
## Helt automatiserade uppdateringar
> Coming soon... 👀
> Kommer snart... 👀
## Frequently asked questions (FAQ)
## Vanliga frågor (FAQ)
### Where can I find my Castopod version?
### Var hittar jag min Castopod-version?
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
Gå till din Castopod admin-panel, versionen visas längst ner till vänster hörn.
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
Alternativt kan du hitta versionen i `appen > Config > Constants.php` filen.
### I haven't updated my instance in a long time… What should I do?
### Jag har inte uppdaterat min instans på länge… Vad ska jag göra?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
Inga problem! Bara få den senaste versionen som beskrivs ovan. Endast när du går
genom utgivningsinstruktionerna (4), utför dem sekventiellt, från de äldsta till
de nyaste.
> You may want to backup your instance depending on how long you haven't updated
> Castopod.
> Du kanske vill säkerhetskopiera din instans beroende på hur länge du inte har
> uppdaterat Castopod.
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
Till exempel, om du är på `v1.0.0-alpha.42` och vill uppgradera till
`v1.0.0-beta.1`:
0. (highly recommended) Make a backup of your files and database.
0. (rekommenderas starkt) Gör en säkerhetskopia av dina filer och databaser.
1. Download the latest release, overwrite your files whilst keeping `.env` and
`public/media`.
1. Ladda ner den senaste utgåvan, skriv över dina filer samtidigt som du
behåller `.env` och `public/media`.
2. Go through each release update instructions sequentially (from oldest to
newest) starting with `v1.0.0-alpha.43`, `v1.0.0-alpha.44`,
2. Gå igenom varje utgåva uppdateringsinstruktioner sekventiellt (från äldsta
till nyaste) börjar med `v1.0.0-alpha. 3`, `v1.0.0-alpha.44`,
`v1.0.0-alpha.45`, …, `v1.0.0-beta.1`.
3. ✨ Enjoy your fresh instance, you're all done!
3. ✨ Njut av din färska instans, du är alla klara!
### Should I make a backup before updating?
### Ska jag göra en säkerhetskopia innan jag uppdaterar?
We advise you do, so you don't lose everything if anything goes wrong!
Vi råder dig att göra, så att du inte förlorar allt om något går fel!
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all
Mer generellt, rekommenderar vi att du gör regelbundna säkerhetskopior av dina
Castopod filer och databas för att hindra dig från att förlora allt

View file

@ -2,239 +2,244 @@
sidebarDepth: 2
---
# Welcome 👋
# Välkommen 👋
[![release-badge]][release]&nbsp;[![license-badge]][license]&nbsp;[![contributions-badge]][contributions]&nbsp;[![semantic-release-badge]][semantic-release]&nbsp;[![crowdin-badge]][crowdin]&nbsp;[![discord-badge]][discord]&nbsp;[![stars-badge]][stars]
Castopod is a free & open-source hosting platform made for podcasters who want
engage and interact with their audience.
Castopod är en gratis hostingplattform med öppen källkod gjord för podcastare
som vill engagera och interagera med sin publik.
Castopod is easy to install and was built on top of
[CodeIgniter4](https://codeigniter.com/), a powerful PHP framework with a very
small footprint.
Castopod är lätt att installera och byggdes ovanpå
[CodeIgniter4](https://codeigniter.com/), ett kraftfullt PHP-ramverk med ett
mycket litet fotavtryck.
::: info Status
Castopod is currently in **beta** but already quite stable and used by
podcasters around&nbsp;the&nbsp;world!
Castopod är för närvarande i **beta** men redan ganska stabil och används av
podcastare runt&nbsp;den&nbsp;världen!
:::
<div class="flex items-center">
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Install<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
<a href="/getting-started/install" class="inline-flex items-center px-4 py-2 mx-auto font-semibold text-center text-white rounded-full shadow gap-x-1 bg-pine-500 hover:no-underline hover:bg-pine-600">Installera<svg viewBox="0 0 24 24" width="1em" height="1em" class="text-xl text-pine-200"><path fill="currentColor" d="m16.172 11-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"></path></svg></a>
</div>
## Features
## Funktioner
- 🌱 &nbsp;Free & open-source (AGPL v3 License)
- 🔐 &nbsp;Focused on data sovereignty: your content, audience, and analytics
belong to you, and&nbsp;you&nbsp;only
- 🪄 &nbsp;Podcasting 2.0 features: GUID, locked, transcripts, funding,
chapters, location, persons, soundbites, …
- 💬 &nbsp;Built-in social network:
- 🚀 &nbsp;Castopod is part of the Fediverse, a decentralized social network
- ❤️ &nbsp;Create posts, share, favourite, and comment on episodes
- 📈 &nbsp;Built-in analytics:
- ⚖️ &nbsp;GDPR / CCPA / LGPD compliant
- 🪙 &nbsp;Standard IABv2 audience measurement
- 🏡 &nbsp;On-premises analytics, no third party involved
- 📢 &nbsp;Built-in marketing tools:
- 🌱 &nbsp;Gratis & öppen källkod (AGPL v3-licens)
- 🔐 &nbsp;Fokuserad på datasuveränitet: ditt innehåll, målgrupp och analys
tillhör dig, och&nbsp;du&nbsp;bara
- <unk> &nbsp;Podcasting 2.0 funktioner: GUID, låst, avskrifter, finansiering,
kapitel, plats, personer, ljud, …
- 💬 &nbsp;Inbyggt socialt nätverk:
- 🚀 &nbsp;Castopod är en del av Fediverse, ett decentraliserat socialt
nätverk
- ❤️ &nbsp;Skapa inlägg, dela, favorit och kommentera avsnitt
- 📈 &nbsp;Inbyggd analys:
- ⚖️ &nbsp;GDPR / CCPA / LGPD kompatibel
- <unk> &nbsp;Standard IABv2 målgruppsmätning
- 🏡 &nbsp;Lokalanalys, ingen tredje part involverad
- 📢 &nbsp;Inbyggda marknadsföringsverktyg:
- ✅ &nbsp;SEO ready (open-graph meta-tags, JSON-LD, …)
- 📱 &nbsp;PWA: install as a standalone app
- 🎨 &nbsp;Customizable theme colors
- 🎬 &nbsp;Generate ready-to-share Video clips from episodes
- 🔉 &nbsp;Generate soundbites
- ▶️ &nbsp;Embeddable player, embed your episodes on any website
- 📱 &nbsp;PWA: installera som en fristående app
- 🎨 &nbsp;Anpassningsbara temafärger
- 🎬 &nbsp;Generera att dela videoklipp från avsnitt
- 🔉 &nbsp;Generera ljudbitar
- <unk> \_button_selector: &nbsp;Inbäddbar spelare, bädda in dina avsnitt på
valfri webbplats
- 💸 &nbsp;Monetization:
- 🔗 &nbsp;Funding links
- 📲 &nbsp;listen-to-click ads
- 🔗 &nbsp;Finansierar länkar
- 📲 &nbsp;lista-att-klicka annonser
- 🤝 &nbsp;value4value / WebMonetization
- 💎 &nbsp;Premium podcasts
- 📡 &nbsp;Publish your episodes everywhere with RSS:
- 📱 &nbsp;On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- 📡 &nbsp;Publicera dina avsnitt överallt med RSS:
- 📱 &nbsp;På alla index och appar: Podcast Index, Apple Podcasts, Spotify,
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ &nbsp;Broadcast your episodes instantly with WebSub
- 📥 &nbsp;Podcast import: move your existing podcast into Castopod
- 📤 &nbsp;Move your podcast out of Castopod
- 🔀 &nbsp;Multi-tenant: host as many podcasts as you want
- 👥 &nbsp;Multi-user: add contributors and set roles
- 🌎 &nbsp;i18n support: translated in English, French, Polish, German,
Brazilian Portuguese & Spanish… with
[more to come](https://translate.castopod.org)!
- ⚡ &nbsp;Sänd dina avsnitt direkt med WebSub
- 📥 &nbsp;Podcast import: flytta din befintliga podcast till Castopod
- 📤 &nbsp;Flytta ut din podcast från Castopod
- :shuffle_tracks<unk> &nbsp;Flera hyresgäst: värd så många podcasts du vill
- 👥 &nbsp;Flera användare: lägg till bidragslämnare och ange roller
- 🌎 &nbsp;i18n support: översatt till engelska, franska, polska, tyska,
brasilianska portugisiska & spanska… med
[mer att komma](https://translate.castopod.org)!
## Motivation
The podcasting ecosystem is decentralized by nature: you can create your podcast
as an RSS file, publish it on the web and have it shared everywhere online.
Den podcasting ekosystem är decentraliserad av naturen: du kan skapa din podcast
som en RSS-fil, publicera den på webben och få den delad överallt på nätet.
It is in fact one of the only media to have stayed this way for a long time.
Det är i själva verket en av de enda medierna som har stannat kvar på detta sätt
under en lång tid.
As usages are evolving, more and more people are getting into podcasts: whether
it is creators finding new ways to share their ideas, or listeners in the search
for better content.
I takt med att användningsområden utvecklas kommer fler och fler människor in i
podcasts: om det är skapare att hitta nya sätt att dela sina idéer, eller
lyssnare i sökningen för bättre innehåll.
With podcasting becoming more widely used, some companies are trying to shift it
towards a more controlled and centralized medium.
När podcasting blir mer allmänt använd försöker vissa företag flytta den till
ett mer kontrollerat och centraliserat medium.
Castopod was created in an effort to provide an open and sustainable alternative
to hosting your podcasts, promoting decentralization to ensure that podcasters
creativity can express itself.
Castopod skapades i ett försök att ge ett öppet och hållbart alternativ för att
vara värd för dina podcasts, främja decentralisering för att säkerställa att
podcastare kreativitet kan uttrycka sig.
This project is pushed by the open-source community, and specifically by the
[Fediverse](https://fediverse.party/en/fediverse/) and
[Podcasting 2.0](https://podcastindex.org/) movements.
Detta projekt drivs av open source-communityn och specifikt av
[Fediverse](https://fediverse.party/en/fediverse/) och
[Podcasting 2.0](https://podcastindex.org/) rörelser.
## Comparison with other solutions
## Jämförelse med andra lösningar
We believe that a solution is not necessarily right for everyone, it highly
depends on your needs. So, here are comparisons with other tools to help you to
gauge whether Castopod is the right fit for&nbsp;you.
Vi tror att en lösning inte nödvändigtvis är rätt för alla, det mycket beror på
dina behov. Så, här är jämförelser med andra verktyg för att hjälpa dig att mäta
om Castopod är rätt passform för&nbsp;du.
### Castopod vs Wordpress
Castopod is often referred to as "the Wordpress for podcasts" because of the
similarities between the two. In some ways this is true. And actually, Castopod
was greatly inspired by the Wordpress ecosystem, seeing the ease of adoption
from the community and the number of websites running&nbsp;it.
Castopod kallas ofta för "Wordpress för podcasts" på grund av de likheter mellan
de två. På vissa sätt är detta sant. Och faktiskt, Castopod var mycket
inspirerad av Wordpress ekosystem, se lätthet att adoptera från gemenskapen och
antalet webbplatser som kör&nbsp;den.
Just like Wordpress, Castopod is free & open source, built using PHP with a
MySQL database and is packaged in a way that you can easily install on most web
servers.
Precis som Wordpress är Castopod gratis & öppen källkod, byggd med PHP med en
MySQL-databas och är paketerad på ett sätt som du enkelt kan installera på de
flesta webb -servrar.
Wordpress is a great way to create your website and extend it with plugins to
get what you want. It is a full fledged CMS that helps you get any type of
website online.
Wordpress är ett bra sätt att skapa din webbplats och utöka den med plugins för
att få vad du vill. Det är en fullfjädrad CMS som hjälper dig att få någon typ
av webbplats online.
On the other hand, Castopod is meant to address the podcasters needs
specifically, focusing on podcasting, and nothing else. You don't need any
plugin to get you started on your podcasting&nbsp;journey.
Å andra sidan, Castopod är tänkt att ta itu med podcasters behöver specifikt,
med fokus på podcasting, och inget annat. Du behöver inte någon plugin för att
komma igång med din podcasting&nbsp;resa.
This allows optimizing the processes specific to podcasting: ranging from the
creation of your podcasts and the publication of new episodes all the way to
broadcasting, marketing and analytics.
Detta gör det möjligt att optimera de processer som är specifika för podcasting:
allt från skapandet av dina podcasts och publiceringen av nya avsnitt hela vägen
till sändning, marknadsföring och analys.
Finally, depending on your needs, Wordpress and Castopod can even live side by
side as they share the same requirements!
Slutligen, beroende på dina behov, Wordpress och Castopod kan även leva sida vid
sida eftersom de delar samma krav!
### Castopod vs Funkwhale
Funkwhale is a self-hosted, modern free and open-source music server. Just as
Castopod, Funkwhale is on the fediverse, a decentralized social network allowing
interoperability between the two.
Funkwhale är en självvärd, modern gratis och öppen källkod musikserver. Precis
som Castopod, Funkwhale är på fediverse, ett decentraliserat socialt nätverk som
möjliggör interoperabilitet mellan de två.
Funkwhale was initially built around music. And later on, as the project
evolved, the ability to host podcasts was introduced.
Funkwhale byggdes ursprungligen runt musik. Och senare när projektet utvecklades
introducerades förmågan att vara värd för podcasts.
Unlike Funkwhale, Castopod has been designed and built around podcasting
exclusively. This allows easier implementation for features related to the
podcasting ecosystem, such as the podcasting 2.0 features (transcripts,
chapters, locations, persons, …).
Till skillnad från Funkwhale har Castopod designats och byggts kring podcasting
exklusivt. Detta möjliggör enklare implementering av funktioner relaterade till
podcasting ekosystem, såsom podcasting 2.0 funktioner (transkript, kapitel,
platser, personer, …).
So, you should probably use Funkwhale if you want to host your music, and use
Castopod if you want to host your podcasts.
Så, du bör förmodligen använda Funkwhale om du vill vara värd för din musik, och
använda Castopod om du vill vara värd för dina podcasts.
### Castopod vs other podcast hosts
### Castopod vs andra podcast värdar
There are many solutions for you to host your podcasts, some of which are really
great and [a lot of them](https://podcastindex.org/apps) are jumping into the
Podcasting 2.0 wagon just like Castopod!
Det finns många lösningar för dig att vara värd för dina podcasts, några av dem
är verkligen bra och [en hel del av dem](https://podcastindex.org/apps) hoppar
in i Podcasting 2. vagn precis som Castopod!
Each of these solutions differ from one another, you may compare with the
[list of features](#features).
Var och en av dessa lösningar skiljer sig från varandra, kan du jämföra med
[listan över funktioner](#features).
That being said, there are two main differences with other podcasting solutions:
Med detta sagt, det finns två huvudsakliga skillnader med andra podcasting
lösningar:
- Castopod can be self-hosted and is the only solution that allows you to keep
full control over what you produce. Also, as it is open-source, you can even
customize it as you wish.
- Castopod kan vara själv värd och är den enda lösningen som gör att du kan
hålla full kontroll över vad du producerar. Dessutom, eftersom det är öppen
källkod, kan du även anpassa det som du vill.
- Castopod is the only solution that currently integrates both a decentralized
social network with ActivityPub as well as many of the podcasting 2.0
features, hoping to bridge the gap between the two.
- Castopod är den enda lösningen som för närvarande integrerar både ett
decentraliserat socialt nätverk med ActivityPub samt många av podcasting 2.
funktioner, i hopp om att överbrygga gapet mellan de två.
## Contributing
## Hjälp till
Love Castopod and would like to help? Take a look at the following documentation
to get you&nbsp;started.
Älskar du Castopod och vill hjälpa till? Ta en titt på följande dokumentation
för att få dig&nbsp;igång.
### Code of conduct
### Uppförandekod
Castopod has adopted a Code of Conduct that we expect project participants to
adhere to. Please read the
[CODE_OF_CONDUCT manual](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
so that you can understand what actions will and will not be&nbsp;tolerated.
Castopod har antagit en uppförandekod som vi förväntar oss projektdeltagare att
hålla sig till. Läs
[CODE_OF_CONDUCT manualen](https://code.castopod.org/adaures/castopod/-/blob/beta/CODE_OF_CONDUCT.md)
så att du kan förstå vilka åtgärder som kommer och inte kommer
att&nbsp;tolereras.
### Contributing guide
### Bidragande guide
Read our [contributing guide](./contributing/guidelines.md) to learn about our
development process, how to propose bugfixes and improvements, and how to build
and test your changes to Castopod.
Läs vår [bidragande guide](./contributing/guidelines.md) för att lära dig om vår
utvecklingsprocess, hur du föreslår buggfixar och förbättringar, och hur du
bygger och testar dina ändringar till Castopod.
## Contributors
## Alla bidragsgivare
Thanks goes to these wonderful people
([emoji key](https://allcontributors.org/docs/en/emoji-key)):
Tack går till dessa underbara människor
([emoji nyckel](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">🎨</a> <a href="#a11y-yassinedoghri" title="Accessibility">️️️️♿️</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑‍🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">📝</a></td>
<td align="center"><a href="https://code.castopod.org/benjamin"><img src="https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Bellamy</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=benjamin" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=benjamin" title="Reviewed Pull Requests">👀</a> <a href="#content-benjamin" title="Content">🖋</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-benjamin" title="Answering Questions">💬</a> <a href="#infra-benjamin" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-benjamin" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://blog.castopod.org/author/benjamin-bellamy/" title="Blogposts">📝</a> <a href="#projectManagement-benjamin" title="Project Management">📆</a> <a href="#talk-benjamin" title="Talks">📢</a></td>
<td align="center"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">:artist_palett:</a> <a href="#a11y-yassinedoghri" title="Accessibility">♿</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑<unk> 🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">memo:</a></td>
<td align="center"><a href="https://github.com/yassinedoghri"><img src="https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Yassine Doghri</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=yassinedoghri" title="Bug reports">🐛</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=yassinedoghri" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-yassinedoghri" title="Maintenance">🚧</a> <a href="#content-yassinedoghri" title="Content">🖋</a> <a href="#design-yassinedoghri" title="Design">:artist_palett:</a> <a href="#a11y-yassinedoghri" title="Accessibility">♿</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-yassinedoghri" title="Answering Questions">💬</a> <a href="#mentoring-yassinedoghri" title="Mentoring">🧑<unk> 🏫</a> <a href="#infra-yassinedoghri" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-yassinedoghri" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-yassinedoghri" title="Project Management">📆</a> <a href="https://blog.castopod.org/author/yassinedoghri/" title="Blogposts">memo:</a></td>
<td align="center"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://github.com/ola-hn"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Ola Hneini</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/merge_requests?scope=all&state=all&approver_usernames[]=ola" title="Reviewed Pull Requests">👀</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="#maintenance-ola" title="Maintenance">🚧</a> <a href="#question-ola" title="Answering Questions">💬</a> <a href="#ideas-ola" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://mamot.fr/@rdelaage"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Romain de Laage</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="#infra-rdelaage" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://code.castopod.org/adaures/castopod/commits/master" title="Documentation">📖</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-rdelaage" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://www.crypticchameleon.com/"><img src="https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Christopher Lagonick-Weitzel</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ctlw83" title="Bug reports">🐛</a> <a href="#question-ctlw83" title="Answering Questions">💬</a> <a href="#audio-ctlw83" title="Audio">🔊</a> <a href="#ideas-ctlw83" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://ernestoacosta.me/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Ernesto Acosta</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ernestoacostame" title="Bug reports">🐛</a> <a href="#audio-ernestoacostame" title="Audio">🔊</a> <a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#question-ernestoacostame" title="Answering Questions">💬</a> <a href="#ideas-ernestoacostame" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://twitter.com/lyonelbernard"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Lyonel Bernard</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Lyonel" title="Bug reports">🐛</a> <a href="#question-Lyonel" title="Answering Questions">💬</a> <a href="#audio-Lyonel" title="Audio">🔊</a> <a href="#ideas-Lyonel" title="Ideas, Planning, & Feedback">🤔</a></td>
</tr>
<tr>
<td align="center"><a href="https://code.castopod.org/Behel"><img src="https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a> <a href="https://code.castopod.org/adaures/castopod/issues?author_username=Behel" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Cécile Ricordeau</b></sub></a><br /><a href="#design-cecillie" title="Design">🎨</a></td>
<td align="center"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Marcin Lewandowski</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">🐛</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Sebastian Janik</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Karczmarczyk</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>denis d</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">🐛</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://www.cecillie.fr/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="#design-cecillie" title="Design">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/PatrykMis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Mi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/mspanc"><img src="https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=mspanc" title="Bug reports">💻</a> <a href="#ideas-mspanc" title="Ideas, Planning, & Feedback">🐛</a></td>
<td align="center"><a href="https://code.castopod.org/SJanik"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/patryk"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/ddenis"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=ddenis" title="Bug reports">💻</a> <a href="#ideas-ddenis" title="Ideas, Planning, & Feedback">🐛</a></td>
</tr>
<tr>
<td align="center"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Douglas Kastle</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">🐛</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>cExplorer</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">🐛</a> <a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>ImaCrea</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">🐛</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Jonas S</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">💻</a></td>
<td align="center"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>LEFEBVRE Yann</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Sebastian Späth</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">🐛</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>rocky III</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://code.castopod.org/douglaskastle"><img src="https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=douglaskastle" title="Bug reports">💻</a> <a href="#ideas-douglaskastle" title="Ideas, Planning, & Feedback">🐛</a></td>
<td align="center"><a href="https://code.castopod.org/cExplorer"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cExplorer" title="Bug reports">💻</a> <a href="https://translate.castopod.org" title="Translation">🐛</a></td>
<td align="center"><a href="https://code.castopod.org/imacrea"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=imacrea" title="Bug reports">💻</a> <a href="#ideas-imacrea" title="Ideas, Planning, & Feedback">🐛</a></td>
<td align="center"><a href="https://code.castopod.org/jonas"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/commits/master" title="Code">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/yannL"><img src="https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=yannL" title="Bug reports">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/spaetz"><img src="https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=spaetz" title="Bug reports">💻</a> <a href="#ideas-spaetz" title="Ideas, Planning, & Feedback">🐛</a></td>
<td align="center"><a href="https://code.castopod.org/rocky"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=rocky" title="Bug reports">🌍</a></td>
</tr>
<tr>
<td align="center"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Hermann Josef Eckl</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Delhaye Cyrille</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">🐛</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>João Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Angelos Chouvardas</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Eivind</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Ewen</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt=""/><br /><sub><b>forght</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/Regenpfeifer"><img src="https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=Regenpfeifer" title="Bug reports">🌍</a></td>
<td align="center"><a href="https://code.castopod.org/cyrilledel"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://code.castopod.org/adaures/castopod/issues?author_username=cyrilledel" title="Bug reports">💻</a> <a href="#ideas-cyrilledel" title="Ideas, Planning, & Feedback">🐛</a></td>
<td align="center"><a href="https://twitter.com/otetranome"><img src="https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png?s=100" width="100px;" alt=""/><br /><sub><b>Joo Leandro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a> <a href="#ideas-otetranome" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://achouvardas.eu/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://mastodon.fjerland.no/@eivind"><img src="https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://mastodon.fedi.bzh/@ewen"><img src="https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Bastien Luneteau</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">💻</a> <a href="#ideas-3wen" title="Ideas, Planning, & Feedback">🐛</a></td>
<td align="center"><a href="https://crowdin.com/profile/forght"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>glottis0q</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>ButterflyOfFire</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lucian I. Last</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>LuuzViir</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>CTHTC</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt=""/><br /><sub><b>Russian Retro</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt=""/><br /><sub><b>Marek L'ach</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/glottis0q"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://mstdn.fr/@ButterflyOfFire"><img src="https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/e18d44b28edd0ada.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/lil5"><img src="https://avatars.githubusercontent.com/u/17646836?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/luuzviir"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/cthtc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/retrograde"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/mareklach"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt=""/><br /><sub><b>GunChleoc</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt=""/><br /><sub><b>GabiSnow</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt=""/><br /><sub><b>bendaha</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt=""/><br /><sub><b>Samuel Roland</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Dimitri Regnier</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/e46d7f8e9f7c05997827563c3a3cf942.jpeg?s=100" width="100px;" alt=""/><br /><sub><b>irithys</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Sergi</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/gunchleoc"><img src="https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/gabisnow"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/bendaha"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/samuelroland"><img src="https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://dimitriregnier.net/"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="#ideas-dimregnier" title="Ideas, Planning, & Feedback">🌍</a></td>
<td align="center"><a href="https://im.irithys.com/@thy"><img src="https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/e46d7f8e9f7c05997827563c3a3cf942.jpeg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://twitter.com/caos30"><img src="https://castopod.org/assets/images/castopod-avatar.jpg?s=100" width="100px;" alt=""/><br /><sub><b>Patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt=""/><br /><sub><b>ghose (XoseM)</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
<td align="center"><a href="https://crowdin.com/profile/xosem"><img src="https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg?s=100" width="100px;" alt=""/><br /><sub><b>patryk Miś</b></sub></a><br /><a href="https://translate.castopod.org" title="Translation">🌍</a></td>
</tr>
</table>
@ -243,48 +248,47 @@ Thanks goes to these wonderful people
<!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the
[all-contributors](https://github.com/all-contributors/all-contributors)
specification. Contributions of any kind welcome!
Detta projekt följer specifikationen
[för alla bidragsgivare](https://github.com/all-contributors/all-contributors) .
Bidrag av något slag välkomna!
## Contact
## Kontakt
You may reach us for help or ask any question you have on:
Du kan nå oss för hjälp eller ställa någon fråga du har på:
- [Discord](https://castopod.org/discord) (for direct interaction with
developers and the community)
- [Issue tracker](https://code.castopod.org/adaures/castopod/-/issues) (for
feature requests & bug reports)
- [Discord](https://castopod.org/discord) (för direkt interaktion med
-utvecklare och gemenskapen)
- [Ärendespårare](https://code.castopod.org/adaures/castopod/-/issues) (för
funktionsförfrågningar & felrapporter)
Alternatively, you can follow us on social media platforms to get news about
Castopod:
Alternativt kan du följa oss på sociala medier för att få nyheter om Castopod:
- [podlibre.social](https://podlibre.social/@Castopod) (Mastodon instance)
- [Twitter](https://twitter.com/castopod)
- [LinkedIn](https://linkedin.com/company/castopod)
- [Facebook](https://www.facebook.com/castopod)
## Sponsors
## Sponsorer
The ongoing development of Castopod is made possible with the support of its
backers. If you'd like to help, please consider
[sponsoring Castopod's development](https://opencollective.com/castopod/contribute).
Den pågående utvecklingen av Castopod möjliggörs med stöd av sina backers. Om du
vill hjälpa till, överväg
[sponsra Castopods utveckling](https://opencollective.com/castopod/contribute).
<div class="flex flex-wrap gap-x-16 gap-y-8">
<a href="https://adaures.com/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/adaures.svg" alt="Ad Aures Logo" class="h-16" /></a>
<a href="https://nlnet.nl/project/Castopod/" target="_blank" rel="noopener noreferrer"><img src="/images/sponsors/nlnet.svg" alt="NLnet Logo" class="h-16" /></a>
</div>
## License
## Licens
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
[GNU Lesser General Public License](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
https://img.shields.io/github/stars/ad-aures/castopod?style=social
https://img.shields.io/github/license/ad-aures/castopod?color=blå
https://img.shields. o/badge/contributions-welcome-brightgreen.svg
https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantik--release-e10079.
vg https://img.shields.io/github/stars/ad-aures/castopod?style=sociala
[release]: https://code.castopod.org/adaures/castopod/-/releases
[license]: https://code.castopod.org/adaures/castopod/-/blob/beta/LICENSE.md

View file

@ -0,0 +1,87 @@
---
title: 验证 & 授权
sidebarDepth: 3
---
# 验证 & 授权
Castopod 使用 `codeigniter/shield` 处理身份验证和授权 与自定义规则。 角色和权限
在两个级别上定义:
1. [实例范围](#1-instance-wide-roles-and-permissions)
2. [每个播客](#2-per-podcast-roles-and-permissions)
## 1. 实例范围的角色和权限
### 实例角色
<!-- AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section -->
| 角色 | 描述 | 权限 |
| ---------- | ---------------------------- | ------------------------------------------------------------------------------------------ |
| 超级管理员 | 拥有对 Castopod 的完全控制。 | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
| 管理 | 管理 Castopod 的内容。 | podcasts.create, podcasts.import, persons.manage, pages.manage |
| 播客 | Castopod 的普通用户。 | admin.access |
<!-- AUTH-INSTANCE-ROLES-LIST:END -->
### 实例权限
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| 权限 | 描述 |
| ----------------------- | ------------------------------------------- |
| admin.access | 可以访问 Castopod 管理区域。 |
| admin.settings | 可以访问 Castopod 设置。 |
| users.manage | 可以管理 Castopod 用户。 |
| persons.manage | 可以管理人员。 |
| pages.manage | 可以管理页面。 |
| podcasts.view | 可以查看所有播客。 |
| podcasts.create | 可以创建新播客。 |
| podcasts.import | 可以导入播客。 |
| fediverse.manage-blocks | 可以阻止联邦宇宙参与者/域与 Castopod 交互。 |
<!-- AUTH-INSTANCE-PERMISSIONS-LIST:END -->
## 2. 每个播客角色与权限
### 每个播客角色
<!-- AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section -->
| 角色 | 描述 | 权限 |
| ------ | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 管理员 | 完全控制播客 #{id}。 | \* |
| 编辑 | 管理播客 #{id} 的内容和出版物。 | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments, episodes.manage-notifications |
| 作者 | 管理播客 #{id} 的内容,但不能发布。 | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| 访客 | 播客 #{id} 的普通贡献者。 | view, episodes.view |
<!-- AUTH-PODCAST-ROLES-LIST:END -->
### 每个播客权限
<!-- AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section -->
| 权限 | 描述 |
| ---------------------------- | --------------------------------------------------- |
| view | 可以查看播客 #{id} 的仪表板和分析。 |
| edit | 可以编辑播客 #{id}。 |
| 删除 | 可以删除播客 #{id}。 |
| manage-import | 可以同步导入的播客 #{id}。 |
| manage-persons | 可以管理播客 #{id} 的订阅。 |
| manage-subscriptions | 可以管理播客 #{id} 的订阅。 |
| manage-contributors | 可以管理播客 #{id} 的贡献者。 |
| manage-platforms | 可以设置/删除播客 #{id} 的平台链接。 |
| manage-publications | 可以发布播客 #{id}。 |
| manage-notifications | 可以查看播客 #{id} 的通知并将其标记为已读。 |
| interact-as | 可以在播客 #{id} 进行互动,以收藏、分享或回复帖子。 |
| episodes.view | 可以查看播客 #{id} 的仪表板和分析。 |
| episodes.create | 可以为播客 #{id} 创建剧集。 |
| episodes.edit | 可以编辑播客 #{id}。 |
| episodes.delete | 可以删除播客 #{id}。 |
| episodes.manage-persons | 可以管理播客 #{id} 的订阅。 |
| episodes.manage-clips | 可以管理播客 #{id} 的视频剪辑或声音片段。 |
| episodes.manage-publications | 可以发布播客 #{id}。 |
| episodes.manage-comments | 可以创建/删除播客 #{id} 的剧集评论。 |
<!-- AUTH-PODCAST-PERMISSIONS-LIST:END -->

View file

@ -5,12 +5,14 @@ sidebarDepth: 3
# 官方 Docker 镜像
Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker Hub
Castopod 在其自动构建期间会将 3 个 Docker 映像推送到 Docker Hub
- [**`castopod/app`**](https://hub.docker.com/r/castopod/app):应用程序包,包含
所有 Castopod 依赖关系
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server)Castopod
的 Nginx 配置
- [**`castopod/video-clipper`** ](https://hub.docker.com/r/castopod/video-clipper)
感谢 ffmpeg 提供可选图像构建视频剪辑
此外Castopod 需要一个与 MySQL 兼容的数据库。 Redis 数据库 可以添加为缓存处理器
@ -20,6 +22,8 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
- `develop` [unstable], 最新开发分支版本
- `beta` [stable],最新的 beta 版本构建
- `1.0.0-beta.x` [stable],特定 beta 版本构建 (自 `1.0.0-beta.22` 起)
- `latest` [stable],最新版本构建
- `1.x.x` [stable],特定版本构建(自 `1.0.0` 起)
## 用法示例:
@ -32,7 +36,7 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
services:
app:
image: castopod/app:beta
image: castopod/app:latest
container_name: "castopod-app"
volumes:
- castopod-media:/opt/castopod/public/media
@ -50,7 +54,7 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
restart: unless-stopped
web-server:
image: castopod/web-server:beta
image: castopod/web-server:latest
container_name: "castopod-web-server"
volumes:
- castopod-media:/var/www/html/media
@ -82,6 +86,21 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
networks:
- castopod-app
# this container is optional
# add this if you want to use the videoclips feature
ffmpeg:
image: castopod/video-clipper:latest
container_name: "castopod-video-clipper"
volumes:
- castopod-media:/opt/castopod/public/media
environment:
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: changeme
networks:
- castopod-db
restart: unless-stopped
volumes:
castopod-media:
castopod-db:
@ -92,7 +111,7 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
castopod-db:
```
你还需要调整一些变量。(例如:`CP_BASEURL` `MYSQL_ROOT_PASSWORD`
你还需要调整一些变量。 (例如:`CP_BASEURL` `MYSQL_ROOT_PASSWORD`
`MYSQL_PASSSWORD``CP_ANALYTICS_SALT`
3. 设置 TLS 反向代理 (SSL/HTTPS)
@ -114,9 +133,19 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
## 环境变量
- **castopod/video-clipper**
| 变量名称 | 类型 (`默认值`) | Default |
| -------------------------- | --------------- | ---------------- |
| **`CP_DATABASE_HOSTNAME`** | ?string | `"mariadb"` |
| **`CP_DATABASE_NAME`** | ?string | `MYSQL_DATABASE` |
| **`CP_DATABASE_USERNAME`** | ?string | `MYSQL_USER` |
| **`CP_DATABASE_PASSWORD`** | ?string | `MYSQL_PASSWORD` |
| **`CP_DATABASE_PREFIX`** | ?string | `"cp_"` |
- **castopod/app**
| 变量名称 | 类型 (`默认值`) | Default |
| 变量名称 | 类型 (`default`) | Default |
| ---------------------------- | ----------------------- | ---------------- |
| **`CP_BASEURL`** | string | `undefined` |
| **`CP_MEDIA_BASEURL`** | ?string | `CP_BASEURL` |
@ -142,6 +171,6 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
- **castopod/web-server**
| 变量名称 | Type | Default |
| 变量名称 | Type | 默认 |
| --------------------- | ------- | ------- |
| **`CP_APP_HOSTNAME`** | ?string | `"app"` |

View file

@ -132,6 +132,8 @@ Castopod 仅适用于受支持的 MySQL 5.7 或更高版本的兼容数据库。
```ini
# […]
# […]
email.fromEmail="你的邮件地址"
email.SMTPHost="你的邮件主机"
email.SMTPUser="你的邮件用户名"

View file

@ -8,62 +8,57 @@ sidebarDepth: 3
安装 Castopod 后,你可能希望将实例更新到最新版本 版本以享受最新功能 ✨, 修复错误
🐛 和性能提升 ⚡。
## Update instructions
## 更新说明
0. ⚠️ Before any update, we highly recommend you backup your Castopod files and
database.
0. ⚠️ 在更新之前,我们强烈建议你备份 Castopod 文件和数据库。
- cf.
[Should I make a backup before updating?](#should-i-make-a-backup-before-updating)
- 参看. [我应该在更新前进行备份吗?](#should-i-make-a-backup-before-updating)
1. Go to the
[releases page](https://code.castopod.org/adaures/castopod/-/releases) and
see if your instance is up to date with the latest Castopod version
1. 前往 [发布页面](https://code.castopod.org/adaures/castopod/-/releases) 和 查
看您的实例是否是最新的 Castopod 版本
- cf.
[Where can I find my Castopod version?](#where-can-i-find-my-castopod-version)
- 参看
[我在哪里可以找到我的 Castopod 版本?](#where-can-i-find-my-castopod-version)
2. Download the latest release package named `Castopod Package`, you may choose
between the `zip` or `tar.gz` archives
2. 下载名为`Castopod Package`的最新发布包,你可以在 `zip``tar.gz` 压缩包之间
选择
- ⚠️ Make sure you download the Castopod Package and **NOT** the Source Code
- Note that you can also download the latest package from
[castopod.org](https://castopod.org/)
- ⚠️ 请确保你下载的是 Castopod 软件包而 **不是** 源代码
- 请注意,你还可以从 [castopod.org](https://castopod.org/)
3. On your server:
3. 在你的服务器上:
- Remove all files except `.env` and `public/media`
- Copy the new files from the downloaded package into your server
- 删除除 `.env` 文件和 `public/media` 目录之外的所有文件
- 将下载软件包中的新文件复制到你的服务器中
::: info Note
::: 注意
You may need to reset files permissions as during the install process.
Check [Security Concerns](./security.md).
Check [Security Concerns](./security.md). 检查 [安全问题](./security.md)。
:::
4. Update your database schema from your `Castopod Admin` > `About` page or by
running:
4. 从你的 `后台管理` > 更新你的数据库架构 `关于` 页或开始:
```bash
php spark castopod:database-update
```
5. Clear your cache from your `Castopod Admin` > `Settings` > `general` >
`Housekeeping`
6. ✨ Enjoy your fresh instance, you're all done!
5. 从 `Castopod 管理页面` > `设置` > `通常` > `维护` 清理你的缓存
6. ✨ 享受你的新实例, 你已经更新完毕!
::: info Note
::: 注意
Releases may come with additional update instructions (see
[releases page](https://code.castopod.org/adaures/castopod/-/releases)).
新版本可能有额外的更新说明(请参阅
[发布页面](https://code.castopod.org/adaures/castopod/-/releases))。
- cf.
[I haven't updated my instance in a long time… What should I do?](#i-havent-updated-my-instance-in-a-long-time-what-should-i-do)
我该怎么办?</a>
:::
## Fully Automated updates
## 全自动更新
> 即将到来... 👀
@ -71,22 +66,19 @@ Releases may come with additional update instructions (see
### 在哪里可以找到我的 Castopod 版本号?
Go to your Castopod admin panel, the version is displayed on the bottom left
corner.
跳转到你的 Castopod 管理面板,版本号显示在左下角。
Alternatively, you can find the version in the `app > Config > Constants.php`
file.
或者,你可以在 `应用程序 > 配置 > Constants.php` 文件中找到版本号。
### 我很长时间没有更新我的实例… 我该怎么办?
### 我很长时间没有更新我的实例… 我该怎么办? 我该怎么办?
No problem! Just get the latest release as described above. Only, when going
through the release instructions (4), perform them sequentially, from the oldest
to the newest.
没问题! 只需如上所述获取最新版本。 No problem! Just get the latest release as
described above. Only, when going through the release instructions (4), perform
them sequentially, from the oldest to the newest.
> 你可能想要备份你的实例,这取决于您多久没有更新过 Castopod 。
For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
`v1.0.0-beta.1`:
例如,如果你在 `v1.0.0-alpha.42` 并想要升级到 `v1.0.0-beta.1`
0. (强烈推荐) 备份你的文件和数据库。
@ -99,7 +91,6 @@ For example, if you're on `v1.0.0-alpha.42` and would like to upgrade to
### 我是否应该在更新前备份?
We advise you do, so you don't lose everything if anything goes wrong!
我们建议你这样做,这样就不会在出现任何问题时丢失数据!
More generally, we advise you make regular backups of your Castopod files and
database to prevent you from losing it all…
更笼统地说,我们建议你定期备份您的 Castopod 文件和数据库,防止丢失所有内容……

View file

@ -133,7 +133,8 @@ Funkwhale 最初是围绕音乐制作的。 后来,随着项目的发展,引
## 贡献
喜欢 Castopod 并且想帮忙吗? 请查看以下文档以帮助你入门。
喜欢 Castopod 并且想帮忙吗? 请查看以下文档以帮助你入门。 请查看以下文档以帮助你
入门。
### 行为准则
@ -143,8 +144,8 @@ Castopod 已经通过了一项行为准则,并希望所有的参与者都能
### 贡献指南
阅读我们的 [贡献指南](./contributing/guidelines.md) ,了解我们的开发过程。提出
误修正和改进想法,以及如何构建和测试 Castopod 。
阅读我们的 [贡献指南](./contributing/guidelines.md) ,了解我们的开发过程。 提出
误修正和改进想法,以及如何构建和测试 Castopod 。
## 贡献者 ✨
@ -251,7 +252,8 @@ Castopod 的发展离不开赞助商的支持。 如果你想要帮助我们,
[GNU Affero General Public License v3.0](https://choosealicense.com/licenses/agpl-3.0/)
Copyright © 2020-present, [Ad Aures](https://adaures.com/).
Copyright © 2020-present, [Ad Aures](https://adaures.com/). Copyright ©
2020-present, [Ad Aures](https://adaures.com/).
https://img.shields.io/gitlab/v/release/2?color=brightgreen&gitlab_url=https%3A%2F%2Fcode.castopod.org%2F&include_prereleases&label=release
https://img.shields.io/github/license/ad-aures/castopod?color=blue
https://img.shields.io/badge/contributions-welcome-brightgreen.svg