mirror of
https://code.castopod.org/adaures/castopod.git
synced 2024-09-28 04:31:47 +02:00
chore(i18n): new Crowdin updates
This commit is contained in:
parent
379b9be2b9
commit
fa90decdd1
@ -18,12 +18,12 @@ return [
|
||||
'follow' => 'Folgen',
|
||||
'followTitle' => 'Folge {actorDisplayName} im Fediversum',
|
||||
'followers' => '{numberOfFollowers, plural,
|
||||
one {# follower}
|
||||
other {# followers}
|
||||
one {# Follower}
|
||||
other {# Follower}
|
||||
}',
|
||||
'posts' => '{numberOfPosts, plural,
|
||||
one {# post}
|
||||
other {# posts}
|
||||
one {# Beitrag}
|
||||
other {# Beiträge}
|
||||
}',
|
||||
'activity' => 'Aktivitäten',
|
||||
'episodes' => 'Episoden',
|
||||
@ -32,8 +32,8 @@ return [
|
||||
'stats' => [
|
||||
'title' => 'Statistiken',
|
||||
'number_of_seasons' => '{0, plural,
|
||||
one {# season}
|
||||
other {# seasons}
|
||||
one {# Staffel}
|
||||
other {# Staffeln}
|
||||
}',
|
||||
'number_of_episodes' => '{0, plural,
|
||||
one {# Episode}
|
||||
|
@ -26,5 +26,5 @@ return [
|
||||
'read_less' => 'Les mindre',
|
||||
'see_more' => 'Sjå meir',
|
||||
'see_less' => 'Sjå mindre',
|
||||
'legal_notice' => 'Legal notice',
|
||||
'legal_notice' => 'Juridisk merknad',
|
||||
];
|
||||
|
@ -18,12 +18,12 @@ return [
|
||||
'follow' => 'Fylg',
|
||||
'followTitle' => 'Fylg {actorDisplayName} på fødiverset!',
|
||||
'followers' => '{numberOfFollowers, plural,
|
||||
one {# follower}
|
||||
other {# followers}
|
||||
one {# fylgjar}
|
||||
other {# fylgjarar}
|
||||
}',
|
||||
'posts' => '{numberOfPosts, plural,
|
||||
one {# post}
|
||||
other {# posts}
|
||||
one {# innlegg}
|
||||
other {# innlegg}
|
||||
}',
|
||||
'activity' => 'Aktivitet',
|
||||
'episodes' => 'Episodar',
|
||||
@ -32,14 +32,14 @@ return [
|
||||
'stats' => [
|
||||
'title' => 'Statistikk',
|
||||
'number_of_seasons' => '{0, plural,
|
||||
one {# season}
|
||||
other {# seasons}
|
||||
one {# sesong}
|
||||
other {# sesongar}
|
||||
}',
|
||||
'number_of_episodes' => '{0, plural,
|
||||
one {# episode}
|
||||
other {# episodes}
|
||||
other {# episodar}
|
||||
}',
|
||||
'first_published_at' => 'First episode published on {0, date, medium}',
|
||||
'first_published_at' => 'Den fyrste episoden vart utgjeven {0, date, medium}',
|
||||
],
|
||||
'sponsor' => 'Sponsor',
|
||||
'funding_links' => 'Finansieringslenker for {podcastTitle}',
|
||||
|
@ -9,26 +9,26 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => "{actorDisplayName}'s comment for {episodeTitle}",
|
||||
'back_to_comments' => 'Back to comments',
|
||||
'title' => "{actorDisplayName}s kommentar till {episodeTitle}",
|
||||
'back_to_comments' => 'Tillbaka till kommentarer',
|
||||
'form' => [
|
||||
'episode_message_placeholder' => 'Write a comment…',
|
||||
'reply_to_placeholder' => 'Reply to @{actorUsername}',
|
||||
'submit' => 'Send',
|
||||
'submit_reply' => 'Reply',
|
||||
'episode_message_placeholder' => 'Skriv en kommentar…',
|
||||
'reply_to_placeholder' => 'Svara på @{actorUsername}',
|
||||
'submit' => 'Skicka',
|
||||
'submit_reply' => 'Svara',
|
||||
],
|
||||
'likes' => '{numberOfLikes, plural,
|
||||
one {# like}
|
||||
other {# likes}
|
||||
one {# gillar}
|
||||
other {# gillar}
|
||||
}',
|
||||
'replies' => '{numberOfReplies, plural,
|
||||
one {# reply}
|
||||
other {# replies}
|
||||
one {# svar}
|
||||
other {# svar}
|
||||
}',
|
||||
'like' => 'Like',
|
||||
'reply' => 'Reply',
|
||||
'view_replies' => 'View replies ({numberOfReplies})',
|
||||
'block_actor' => 'Block user @{actorUsername}',
|
||||
'block_domain' => 'Block domain @{actorDomain}',
|
||||
'delete' => 'Delete comment',
|
||||
'like' => 'Gilla',
|
||||
'reply' => 'Svara',
|
||||
'view_replies' => 'Visa svar ({numberOfReplies})',
|
||||
'block_actor' => 'Blockera användare @{actorUsername}',
|
||||
'block_domain' => 'Blockera domän @{actorDomain}',
|
||||
'delete' => 'Radera kommentar',
|
||||
];
|
||||
|
@ -9,22 +9,22 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'yes' => 'Yes',
|
||||
'no' => 'No',
|
||||
'cancel' => 'Cancel',
|
||||
'optional' => 'Optional',
|
||||
'close' => 'Close',
|
||||
'home' => 'Home',
|
||||
'yes' => 'Ja',
|
||||
'no' => 'Nej',
|
||||
'cancel' => 'Avbryt',
|
||||
'optional' => 'Valfritt',
|
||||
'close' => 'Stäng',
|
||||
'home' => 'Hem',
|
||||
'explicit' => 'Explicit',
|
||||
'powered_by' => 'Powered by {castopod}',
|
||||
'go_back' => 'Go back',
|
||||
'powered_by' => 'Drivs av {castopod}',
|
||||
'go_back' => 'Gå tillbaka',
|
||||
'play_episode_button' => [
|
||||
'play' => 'Play',
|
||||
'playing' => 'Playing',
|
||||
'play' => 'Spela',
|
||||
'playing' => 'Spelar',
|
||||
],
|
||||
'read_more' => 'Read more',
|
||||
'read_less' => 'Read less',
|
||||
'see_more' => 'See more',
|
||||
'see_less' => 'See less',
|
||||
'legal_notice' => 'Legal notice',
|
||||
'read_more' => 'Läs mer',
|
||||
'read_less' => 'Läs mindre',
|
||||
'see_more' => 'Se mer',
|
||||
'see_less' => 'Se mindre',
|
||||
'legal_notice' => 'Villkor',
|
||||
];
|
||||
|
@ -9,25 +9,25 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'season' => 'Season {seasonNumber}',
|
||||
'season' => 'Säsong {seasonNumber}',
|
||||
'season_abbr' => 'S{seasonNumber}',
|
||||
'number' => 'Episode {episodeNumber}',
|
||||
'number_abbr' => 'Ep. {episodeNumber}',
|
||||
'season_episode' => 'Season {seasonNumber} episode {episodeNumber}',
|
||||
'season_episode_abbr' => 'S{seasonNumber}:E{episodeNumber}',
|
||||
'number' => 'Avsnitt {episodeNumber}',
|
||||
'number_abbr' => 'Av. {episodeNumber}',
|
||||
'season_episode' => 'Säsong {seasonNumber} avsnitt {episodeNumber}',
|
||||
'season_episode_abbr' => 'S{seasonNumber}:A{episodeNumber}',
|
||||
'persons' => '{personsCount, plural,
|
||||
one {# person}
|
||||
other {# persons}
|
||||
other {# personer}
|
||||
}',
|
||||
'persons_list' => 'Persons',
|
||||
'back_to_episodes' => 'Back to episodes of {podcast}',
|
||||
'comments' => 'Comments',
|
||||
'activity' => 'Activity',
|
||||
'description' => 'Episode description',
|
||||
'persons_list' => 'Personer',
|
||||
'back_to_episodes' => 'Tillbaka till avsnitten av {podcast}',
|
||||
'comments' => 'Kommentarer',
|
||||
'activity' => 'Aktivitet',
|
||||
'description' => 'Beskrivning av avsnitt',
|
||||
'number_of_comments' => '{numberOfComments, plural,
|
||||
one {# comment}
|
||||
other {# comments}
|
||||
one {# kommentar}
|
||||
other {# kommentarer}
|
||||
}',
|
||||
'all_podcast_episodes' => 'All podcast episodes',
|
||||
'back_to_podcast' => 'Go back to podcast',
|
||||
'all_podcast_episodes' => 'Alla podcast avsnitt',
|
||||
'back_to_podcast' => 'Gå tillbaka till podcasten',
|
||||
];
|
||||
|
@ -9,29 +9,29 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'your_handle' => 'Your handle',
|
||||
'your_handle_hint' => 'Enter the @username@domain you want to act from.',
|
||||
'your_handle' => 'Ditt handtag',
|
||||
'your_handle_hint' => 'Ange @användarnamn@domän som du vill agera från.',
|
||||
'follow' => [
|
||||
'label' => 'Follow',
|
||||
'title' => 'Follow {actorDisplayName}',
|
||||
'subtitle' => 'You are going to follow:',
|
||||
'accountNotFound' => 'The account could not be found.',
|
||||
'remoteFollowNotAllowed' => 'Seems like the account server does not allow remote follows…',
|
||||
'submit' => 'Proceed to follow',
|
||||
'label' => 'Följ',
|
||||
'title' => 'Följ {actorDisplayName}',
|
||||
'subtitle' => 'Du kommer att följa:',
|
||||
'accountNotFound' => 'Det gick inte att hitta kontot.',
|
||||
'remoteFollowNotAllowed' => 'Verkar som om kontots server inte tillåter fjärråtkomst följare…',
|
||||
'submit' => 'Fortsätt för att följa',
|
||||
],
|
||||
'favourite' => [
|
||||
'title' => "Favourite {actorDisplayName}'s post",
|
||||
'subtitle' => 'You are going to favourite:',
|
||||
'submit' => 'Proceed to favourite',
|
||||
'title' => "Favorit {actorDisplayName}s inlägg",
|
||||
'subtitle' => 'Du kommer att favorisera:',
|
||||
'submit' => 'Fortsätt för att favorisera',
|
||||
],
|
||||
'reblog' => [
|
||||
'title' => "Share {actorDisplayName}'s post",
|
||||
'subtitle' => 'You are going to share:',
|
||||
'submit' => 'Proceed to share',
|
||||
'title' => "Dela {actorDisplayName}s inlägg",
|
||||
'subtitle' => 'Du kommer att dela:',
|
||||
'submit' => 'Fortsätt för att dela',
|
||||
],
|
||||
'reply' => [
|
||||
'title' => "Reply to {actorDisplayName}'s post",
|
||||
'subtitle' => 'You are going to reply to:',
|
||||
'submit' => 'Proceed to reply',
|
||||
'title' => "Svara på {actorDisplayName}s inlägg",
|
||||
'subtitle' => 'Du kommer att svara på:',
|
||||
'submit' => 'Fortsätt för att svara',
|
||||
],
|
||||
];
|
||||
|
@ -9,12 +9,12 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'all_podcasts' => 'All podcasts',
|
||||
'sort_by' => 'Sort by',
|
||||
'all_podcasts' => 'Alla podcasts',
|
||||
'sort_by' => 'Sortera efter',
|
||||
'sort_options' => [
|
||||
'activity' => 'Recent activity',
|
||||
'created_desc' => 'Newest first',
|
||||
'created_asc' => 'Oldest first',
|
||||
'activity' => 'Senaste aktivitet',
|
||||
'created_desc' => 'Nyaste först',
|
||||
'created_asc' => 'Äldsta först',
|
||||
],
|
||||
'no_podcast' => 'No podcast found',
|
||||
'no_podcast' => 'Ingen podcast hittades',
|
||||
];
|
||||
|
@ -9,9 +9,9 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'back_to_home' => 'Back to home',
|
||||
'back_to_home' => 'Tillbaka till startsidan',
|
||||
'map' => [
|
||||
'title' => 'Map',
|
||||
'description' => 'Discover podcast episodes on {siteName} that are placed on a map! Travel through the map and listen to episodes that talk about specific locations.',
|
||||
'title' => 'Karta',
|
||||
'description' => 'Upptäck podcast avsnitt på {siteName} som placeras på en karta! Res genom kartan och lyssna på avsnitt som talar om specifika platser.',
|
||||
],
|
||||
];
|
||||
|
@ -9,45 +9,45 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'feed' => 'RSS Podcast feed',
|
||||
'season' => 'Season {seasonNumber}',
|
||||
'list_of_episodes_year' => '{year} episodes ({episodeCount})',
|
||||
'feed' => 'RSS Podcast flöde',
|
||||
'season' => 'Säsong {seasonNumber}',
|
||||
'list_of_episodes_year' => '{year} avsnitt ({episodeCount})',
|
||||
'list_of_episodes_season' =>
|
||||
'Season {seasonNumber} episodes ({episodeCount})',
|
||||
'no_episode' => 'No episode found!',
|
||||
'follow' => 'Follow',
|
||||
'followTitle' => 'Follow {actorDisplayName} on the fediverse!',
|
||||
'Säsong {seasonNumber} avsnitt ({episodeCount})',
|
||||
'no_episode' => 'Inga avsnitt hittades!',
|
||||
'follow' => 'Följ',
|
||||
'followTitle' => 'Följ {actorDisplayName} på fediverse!',
|
||||
'followers' => '{numberOfFollowers, plural,
|
||||
one {# follower}
|
||||
other {# followers}
|
||||
one {# följare}
|
||||
other {# följare}
|
||||
}',
|
||||
'posts' => '{numberOfPosts, plural,
|
||||
one {# post}
|
||||
other {# posts}
|
||||
one {# inlägg}
|
||||
other {# inlägg}
|
||||
}',
|
||||
'activity' => 'Activity',
|
||||
'episodes' => 'Episodes',
|
||||
'episodes_title' => 'Episodes of {podcastTitle}',
|
||||
'about' => 'About',
|
||||
'activity' => 'Aktivitet',
|
||||
'episodes' => 'Avsnitt',
|
||||
'episodes_title' => 'Avsnitt av {podcastTitle}',
|
||||
'about' => 'Om',
|
||||
'stats' => [
|
||||
'title' => 'Stats',
|
||||
'title' => 'Statistik',
|
||||
'number_of_seasons' => '{0, plural,
|
||||
one {# season}
|
||||
other {# seasons}
|
||||
one {# säsong}
|
||||
other {# säsonger}
|
||||
}',
|
||||
'number_of_episodes' => '{0, plural,
|
||||
one {# episode}
|
||||
other {# episodes}
|
||||
one {# avsnitt}
|
||||
other {# avsnitt}
|
||||
}',
|
||||
'first_published_at' => 'First episode published on {0, date, medium}',
|
||||
'first_published_at' => 'Första avsnittet publicerades den {0, date, medium}',
|
||||
],
|
||||
'sponsor' => 'Sponsor',
|
||||
'funding_links' => 'Funding links for {podcastTitle}',
|
||||
'find_on' => 'Find {podcastTitle} on',
|
||||
'listen_on' => 'Listen on',
|
||||
'funding_links' => 'Finansiera länkar för {podcastTitle}',
|
||||
'find_on' => 'Hitta {podcastTitle} på',
|
||||
'listen_on' => 'Lyssna på',
|
||||
'persons' => '{personsCount, plural,
|
||||
one {# person}
|
||||
other {# persons}
|
||||
other {# personer}
|
||||
}',
|
||||
'persons_list' => 'Persons',
|
||||
'persons_list' => 'Personer',
|
||||
];
|
||||
|
@ -9,32 +9,32 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => "{actorDisplayName}'s post",
|
||||
'back_to_actor_posts' => 'Back to {actor} posts',
|
||||
'actor_shared' => '{actor} shared',
|
||||
'reply_to' => 'Reply to @{actorUsername}',
|
||||
'title' => "{actorDisplayName}s inlägg",
|
||||
'back_to_actor_posts' => 'Tillbaka till {actor} inlägg',
|
||||
'actor_shared' => '{actor} delades',
|
||||
'reply_to' => 'Svara på @{actorUsername}',
|
||||
'form' => [
|
||||
'message_placeholder' => 'Write a message…',
|
||||
'episode_message_placeholder' => 'Write a message for the episode…',
|
||||
'episode_url_placeholder' => 'Episode URL',
|
||||
'reply_to_placeholder' => 'Reply to @{actorUsername}',
|
||||
'submit' => 'Send',
|
||||
'submit_reply' => 'Reply',
|
||||
'message_placeholder' => 'Skriv ett meddelande…',
|
||||
'episode_message_placeholder' => 'Skriv ett meddelande för avsnittet…',
|
||||
'episode_url_placeholder' => 'Avsnitt URL',
|
||||
'reply_to_placeholder' => 'Svara på @{actorUsername}',
|
||||
'submit' => 'Skicka',
|
||||
'submit_reply' => 'Svara',
|
||||
],
|
||||
'favourites' => '{numberOfFavourites, plural,
|
||||
one {# favourite}
|
||||
other {# favourites}
|
||||
one {# favorit}
|
||||
other {# favoriter}
|
||||
}',
|
||||
'reblogs' => '{numberOfReblogs, plural,
|
||||
one {# share}
|
||||
other {# shares}
|
||||
one {# delning}
|
||||
other {# delningar}
|
||||
}',
|
||||
'replies' => '{numberOfReplies, plural,
|
||||
one {# reply}
|
||||
other {# replies}
|
||||
one {# svar}
|
||||
other {# svar}
|
||||
}',
|
||||
'expand' => 'Expand post',
|
||||
'block_actor' => 'Block user @{actorUsername}',
|
||||
'block_domain' => 'Block domain @{actorDomain}',
|
||||
'delete' => 'Delete post',
|
||||
'expand' => 'Expandera inlägg',
|
||||
'block_actor' => 'Blockera användare @{actorUsername}',
|
||||
'block_domain' => 'Blockera domän @{actorDomain}',
|
||||
'delete' => 'Ta bort inlägg',
|
||||
];
|
||||
|
87
docs/src/ar/getting-started/auth.md
Normal file
87
docs/src/ar/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/br/getting-started/auth.md
Normal file
87
docs/src/br/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/ca/getting-started/auth.md
Normal file
87
docs/src/ca/getting-started/auth.md
Normal 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 -->
|
@ -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/app**
|
||||
- **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 | 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"` |
|
||||
|
@ -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
|
||||
|
||||
|
87
docs/src/de/getting-started/auth.md
Normal file
87
docs/src/de/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
@ -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"
|
||||
|
87
docs/src/el/getting-started/auth.md
Normal file
87
docs/src/el/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/es/getting-started/auth.md
Normal file
87
docs/src/es/getting-started/auth.md
Normal 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 -->
|
@ -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/app**
|
||||
- **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 | 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"` |
|
||||
|
@ -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,8 +148,7 @@ You may add your email configuration in your instance's `.env` like so:
|
||||
```ini
|
||||
# […]
|
||||
|
||||
email.fromEmail="your_email_address"
|
||||
email.SMTPHost="your_smtp_host"
|
||||
SMTPHost="your_smtp_host"
|
||||
email. SMTPUser="your_smtp_user"
|
||||
email. SMTPPass="your_smtp_password"
|
||||
```
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
87
docs/src/fa/getting-started/auth.md
Normal file
87
docs/src/fa/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/fr/getting-started/auth.md
Normal file
87
docs/src/fr/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/gd/getting-started/auth.md
Normal file
87
docs/src/gd/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
@ -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
|
||||
|
87
docs/src/gl/getting-started/auth.md
Normal file
87
docs/src/gl/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/id/getting-started/auth.md
Normal file
87
docs/src/id/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/it/getting-started/auth.md
Normal file
87
docs/src/it/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/ko/getting-started/auth.md
Normal file
87
docs/src/ko/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/nl/getting-started/auth.md
Normal file
87
docs/src/nl/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/nn-NO/getting-started/auth.md
Normal file
87
docs/src/nn-NO/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
@ -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
|
||||
|
87
docs/src/oc/getting-started/auth.md
Normal file
87
docs/src/oc/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
@ -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
|
||||
|
87
docs/src/pl/getting-started/auth.md
Normal file
87
docs/src/pl/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/pt-BR/getting-started/auth.md
Normal file
87
docs/src/pt-BR/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
@ -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"
|
||||
|
87
docs/src/pt/getting-started/auth.md
Normal file
87
docs/src/pt/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
@ -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"
|
||||
|
87
docs/src/ru/getting-started/auth.md
Normal file
87
docs/src/ru/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
@ -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"
|
||||
|
87
docs/src/sk/getting-started/auth.md
Normal file
87
docs/src/sk/getting-started/auth.md
Normal 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 -->
|
@ -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 |
|
||||
|
87
docs/src/sv/getting-started/auth.md
Normal file
87
docs/src/sv/getting-started/auth.md
Normal 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 -->
|
@ -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"` |
|
||||
|
@ -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 haven’t 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
|
||||
|
@ -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
|
||||
|
@ -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…
|
||||
|
@ -2,239 +2,244 @@
|
||||
sidebarDepth: 2
|
||||
---
|
||||
|
||||
# Welcome 👋
|
||||
# Välkommen 👋
|
||||
|
||||
[![release-badge]][release] [![license-badge]][license] [![contributions-badge]][contributions] [![semantic-release-badge]][semantic-release] [![crowdin-badge]][crowdin] [![discord-badge]][discord] [![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 the world!
|
||||
Castopod är för närvarande i **beta** men redan ganska stabil och används av
|
||||
podcastare runt den 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
|
||||
|
||||
- 🌱 Free & open-source (AGPL v3 License)
|
||||
- 🔐 Focused on data sovereignty: your content, audience, and analytics
|
||||
belong to you, and you only
|
||||
- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
|
||||
chapters, location, persons, soundbites, …
|
||||
- 💬 Built-in social network:
|
||||
- 🚀 Castopod is part of the Fediverse, a decentralized social network
|
||||
- ❤️ Create posts, share, favourite, and comment on episodes
|
||||
- 📈 Built-in analytics:
|
||||
- ⚖️ GDPR / CCPA / LGPD compliant
|
||||
- 🪙 Standard IABv2 audience measurement
|
||||
- 🏡 On-premises analytics, no third party involved
|
||||
- 📢 Built-in marketing tools:
|
||||
- 🌱 Gratis & öppen källkod (AGPL v3-licens)
|
||||
- 🔐 Fokuserad på datasuveränitet: ditt innehåll, målgrupp och analys
|
||||
tillhör dig, och du bara
|
||||
- <unk> Podcasting 2.0 funktioner: GUID, låst, avskrifter, finansiering,
|
||||
kapitel, plats, personer, ljud, …
|
||||
- 💬 Inbyggt socialt nätverk:
|
||||
- 🚀 Castopod är en del av Fediverse, ett decentraliserat socialt
|
||||
nätverk
|
||||
- ❤️ Skapa inlägg, dela, favorit och kommentera avsnitt
|
||||
- 📈 Inbyggd analys:
|
||||
- ⚖️ GDPR / CCPA / LGPD kompatibel
|
||||
- <unk> Standard IABv2 målgruppsmätning
|
||||
- 🏡 Lokalanalys, ingen tredje part involverad
|
||||
- 📢 Inbyggda marknadsföringsverktyg:
|
||||
- ✅ SEO ready (open-graph meta-tags, JSON-LD, …)
|
||||
- 📱 PWA: install as a standalone app
|
||||
- 🎨 Customizable theme colors
|
||||
- 🎬 Generate ready-to-share Video clips from episodes
|
||||
- 🔉 Generate soundbites
|
||||
- ▶️ Embeddable player, embed your episodes on any website
|
||||
- 📱 PWA: installera som en fristående app
|
||||
- 🎨 Anpassningsbara temafärger
|
||||
- 🎬 Generera att dela videoklipp från avsnitt
|
||||
- 🔉 Generera ljudbitar
|
||||
- <unk> \_button_selector: Inbäddbar spelare, bädda in dina avsnitt på
|
||||
valfri webbplats
|
||||
- 💸 Monetization:
|
||||
- 🔗 Funding links
|
||||
- 📲 listen-to-click ads
|
||||
- 🔗 Finansierar länkar
|
||||
- 📲 lista-att-klicka annonser
|
||||
- 🤝 value4value / WebMonetization
|
||||
- 💎 Premium podcasts
|
||||
- 📡 Publish your episodes everywhere with RSS:
|
||||
- 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
|
||||
- 📡 Publicera dina avsnitt överallt med RSS:
|
||||
- 📱 På alla index och appar: Podcast Index, Apple Podcasts, Spotify,
|
||||
Google Podcasts, Deezer, Podcast Addict, Podfriend, …
|
||||
- ⚡ Broadcast your episodes instantly with WebSub
|
||||
- 📥 Podcast import: move your existing podcast into Castopod
|
||||
- 📤 Move your podcast out of Castopod
|
||||
- 🔀 Multi-tenant: host as many podcasts as you want
|
||||
- 👥 Multi-user: add contributors and set roles
|
||||
- 🌎 i18n support: translated in English, French, Polish, German,
|
||||
Brazilian Portuguese & Spanish… with
|
||||
[more to come](https://translate.castopod.org)!
|
||||
- ⚡ Sänd dina avsnitt direkt med WebSub
|
||||
- 📥 Podcast import: flytta din befintliga podcast till Castopod
|
||||
- 📤 Flytta ut din podcast från Castopod
|
||||
- :shuffle_tracks<unk> Flera hyresgäst: värd så många podcasts du vill
|
||||
- 👥 Flera användare: lägg till bidragslämnare och ange roller
|
||||
- 🌎 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 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 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 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 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 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 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 started.
|
||||
Älskar du Castopod och vill hjälpa till? Ta en titt på följande dokumentation
|
||||
för att få dig 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 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 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>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>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
|
||||
|
87
docs/src/zh-Hans/getting-started/auth.md
Normal file
87
docs/src/zh-Hans/getting-started/auth.md
Normal 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 -->
|
@ -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:
|
||||
@ -114,9 +133,19 @@ Castopod 在 Docker Hub 自动构建 程序中将 Docker 镜像推送至 Docker
|
||||
|
||||
## 环境变量
|
||||
|
||||
- **castopod/app**
|
||||
- **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 |
|
||||
| ---------------------------- | ----------------------- | ---------------- |
|
||||
| **`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"` |
|
||||
|
@ -132,6 +132,8 @@ Castopod 仅适用于受支持的 MySQL 5.7 或更高版本的兼容数据库。
|
||||
```ini
|
||||
# […]
|
||||
|
||||
# […]
|
||||
|
||||
email.fromEmail="你的邮件地址"
|
||||
email.SMTPHost="你的邮件主机"
|
||||
email.SMTPUser="你的邮件用户名"
|
||||
|
@ -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 文件和数据库,防止丢失所有内容……
|
||||
|
@ -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
|
||||
|
@ -9,14 +9,14 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => 'About Castopod',
|
||||
'title' => 'Über Castopod',
|
||||
'host_name' => 'Hostname',
|
||||
'version' => 'Castopod version',
|
||||
'php_version' => 'PHP version',
|
||||
'os' => 'Operating System',
|
||||
'languages' => 'Languages',
|
||||
'update_database' => 'Update database',
|
||||
'version' => 'Castopod Version',
|
||||
'php_version' => 'PHP Version',
|
||||
'os' => 'Betriebssystem',
|
||||
'languages' => 'Sprachen',
|
||||
'update_database' => 'Datenbank aktualisieren',
|
||||
'messages' => [
|
||||
'databaseUpdateSuccess' => 'Database is up to date!',
|
||||
'databaseUpdateSuccess' => 'Die Datenbank ist aktuell!',
|
||||
],
|
||||
];
|
||||
|
@ -14,22 +14,22 @@ return [
|
||||
->gateway => 'Startseite',
|
||||
'podcasts' => 'Podcasts',
|
||||
'episodes' => 'Folgen',
|
||||
'subscriptions' => 'subscriptions',
|
||||
'subscriptions' => 'Abonnements',
|
||||
'contributors' => 'Administratoren',
|
||||
'pages' => 'Seiten',
|
||||
'settings' => 'Einstellungen',
|
||||
'theme' => 'Erscheinungsbild',
|
||||
'about' => 'about',
|
||||
'about' => 'Über',
|
||||
'add' => 'hinzufügen',
|
||||
'new' => 'neu',
|
||||
'edit' => 'bearbeiten',
|
||||
'persons' => 'Mitwirkende',
|
||||
'publish' => 'veröffentlichen',
|
||||
'publish-edit' => 'Veröffentlichung bearbeiten',
|
||||
'publish-date-edit' => 'edit publication date',
|
||||
'publish-date-edit' => 'Veröffentlichungsdatum bearbeiten',
|
||||
'unpublish' => 'Veröffentlichung aufheben',
|
||||
'delete' => 'löschen',
|
||||
'remove' => 'remove',
|
||||
'remove' => 'Entfernen',
|
||||
'fediverse' => 'Fediversum',
|
||||
'block-lists' => 'Sperrlisten',
|
||||
'users' => 'Benutzer',
|
||||
@ -49,6 +49,6 @@ return [
|
||||
'soundbites' => 'Tonschnipsel',
|
||||
'video-clips' => 'Videoclips',
|
||||
'embed' => 'einbettbarer Spieler',
|
||||
'notifications' => 'notifications',
|
||||
'suspend' => 'suspend',
|
||||
'notifications' => 'Benachrichtigungen',
|
||||
'suspend' => 'Unterbrechen',
|
||||
];
|
||||
|
@ -35,6 +35,6 @@ return [
|
||||
'by_weekday' => 'Nach Wochentag (für die letzten 60 Tage)',
|
||||
'by_hour' => 'Nach Tageszeit (für die letzten 60 Tage)',
|
||||
'podcast_by_bandwidth' => 'Täglich genutzte Bandbreite (in MB)',
|
||||
'total_storage_by_month' => 'Monthly storage (in MB)',
|
||||
'total_bandwidth_by_month' => 'Monthly used bandwidth (in MB)',
|
||||
'total_storage_by_month' => 'Monatlicher Speicher (in MB)',
|
||||
'total_bandwidth_by_month' => 'Monatlich genutzte Bandbreite (in MB)',
|
||||
];
|
||||
|
@ -9,20 +9,20 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'home' => 'Admin dashboard',
|
||||
'welcome_message' => 'Welcome to the admin area!',
|
||||
'home' => 'Admin-Dashboard',
|
||||
'welcome_message' => 'Willkommen im Administrationsbereich!',
|
||||
'podcasts' => [
|
||||
'title' => 'Podcasts',
|
||||
'not_found' => 'No published podcast',
|
||||
'last_published' => 'Last published on {lastPublicationDate}',
|
||||
'not_found' => 'Kein veröffentlichter Podcast',
|
||||
'last_published' => 'Zuletzt veröffentlicht am {lastPublicationDate}',
|
||||
],
|
||||
'episodes' => [
|
||||
'title' => 'Episodes',
|
||||
'not_found' => 'No published episode',
|
||||
'last_published' => 'Last published on {lastPublicationDate}',
|
||||
'title' => 'Episoden',
|
||||
'not_found' => 'Keine veröffentlichte Episode',
|
||||
'last_published' => 'Zuletzt veröffentlicht am {lastPublicationDate}',
|
||||
],
|
||||
'storage' => [
|
||||
'title' => 'Storage',
|
||||
'subtitle' => '{totalUploaded} out of {totalStorage}',
|
||||
'title' => 'Speicher',
|
||||
'subtitle' => '{totalUploaded} von {totalStorage}',
|
||||
],
|
||||
];
|
||||
|
@ -24,25 +24,25 @@ return [
|
||||
'edit' => 'Bearbeiten',
|
||||
'publish' => 'Veröffentllichen',
|
||||
'publish_edit' => 'Veröffentlichung bearbeiten',
|
||||
'publish_date_edit' => 'Edit publication date',
|
||||
'publish_date_edit' => 'Veröffentlichungsdatum bearbeiten',
|
||||
'unpublish' => 'Veröffentlichung zurücknehmen',
|
||||
'publish_error' => 'Folge ist bereits veröffentlicht.',
|
||||
'publish_edit_error' => 'Folge ist bereits veröffentlicht.',
|
||||
'publish_cancel_error' => 'Folge ist bereits veröffentlicht.',
|
||||
'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.',
|
||||
'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.',
|
||||
'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!',
|
||||
'publish_date_edit_error' => 'Die Folge wurde noch nicht veröffentlicht, Sie können das Veröffentlichungsdatum nicht bearbeiten.',
|
||||
'publish_date_edit_future_error' => 'Das Veröffentlichungsdatum der Folge kann nur auf ein vergangenes Datum gesetzt werden! Wenn Sie es neu planen möchten, heben Sie die Veröffentlichung zuerst auf.',
|
||||
'publish_date_edit_success' => 'Das Veröffentlichungsdatum der Folge wurde erfolgreich aktualisiert!',
|
||||
'unpublish_error' => 'Folge ist nicht veröffentlicht.',
|
||||
'delete' => 'Löschen',
|
||||
'go_to_page' => 'Gehe zu Seite',
|
||||
'create' => 'Folge hinzufügen',
|
||||
'publication_status' => [
|
||||
'published' => 'Veröffentlicht',
|
||||
'with_podcast' => 'Published',
|
||||
'with_podcast' => 'Veröffentlicht',
|
||||
'scheduled' => 'Geplant',
|
||||
'not_published' => 'Nicht veröffentlicht',
|
||||
],
|
||||
'with_podcast_hint' => 'To be published at the same time as the podcast',
|
||||
'with_podcast_hint' => 'Wird zeitgleich mit dem Podcast veröffentlicht',
|
||||
'list' => [
|
||||
'search' => [
|
||||
'placeholder' => 'Suche nach einer Episode',
|
||||
@ -50,8 +50,8 @@ return [
|
||||
'submit' => 'Suche',
|
||||
],
|
||||
'number_of_episodes' => '{numberOfEpisodes, plural,
|
||||
one {# episode}
|
||||
other {# episodes}
|
||||
one {# Folge}
|
||||
other {# Folgen}
|
||||
}',
|
||||
'episode' => 'Folge',
|
||||
'visibility' => 'Sichtweite',
|
||||
@ -62,14 +62,14 @@ return [
|
||||
'createSuccess' => 'Folge wurde erfolgreich erstellt!',
|
||||
'editSuccess' => 'Folge wurde erfolgreich aktualisiert!',
|
||||
'publishSuccess' => '{publication_status, select,
|
||||
published {Episode successfully published!}
|
||||
scheduled {Episode publication successfully scheduled!}
|
||||
with_podcast {This episode will be published at the same time as the podcast.}
|
||||
other {This episode is not published.}
|
||||
published {Folge erfolgreich veröffentlicht!}
|
||||
scheduled {Veröffentlichung der Folge erfolgreich geplant!}
|
||||
with_podcast {Diese Folge wird zeitgleich mit dem Podcast veröffentlicht.}
|
||||
other {Diese Folge ist nicht veröffentlicht.}
|
||||
}',
|
||||
'publishCancelSuccess' => 'Veröffentlichung der Episode erfolgreich abgebrochen!',
|
||||
'unpublishBeforeDeleteTip' => 'Du musst die Episode zurückziehen, bevor du sie löschst.',
|
||||
'scheduleDateError' => 'Schedule date must be set!',
|
||||
'scheduleDateError' => 'Veröffentlichungsdatum muss gesetzt sein!',
|
||||
'deletePublishedEpisodeError' => 'Bitte ziehe die Episode zurück, bevor du sie löschst.',
|
||||
'deleteSuccess' => 'Folge erfolgreich gelöscht!',
|
||||
'deleteError' => 'Failed to delete episode {type, select,
|
||||
@ -79,13 +79,13 @@ return [
|
||||
audio {audio}
|
||||
other {media}
|
||||
}.',
|
||||
'deleteFileError' => 'Failed to delete {type, select,
|
||||
transcript {transcript}
|
||||
chapters {chapters}
|
||||
image {cover}
|
||||
audio {audio}
|
||||
other {media}
|
||||
} file {file_path}. You may manually remove it from your disk.',
|
||||
'deleteFileError' => 'Fehler beim Löschen der {type, select,
|
||||
transcript {Abschrift}
|
||||
chapters {Kapitel}
|
||||
image {Cover}
|
||||
audio {Audio}
|
||||
other {Medien}
|
||||
}-Datei {file_path}. Sie können es manuell von der Festplatte entfernen.',
|
||||
'sameSlugError' => 'Eine Folge mit dem ausgewählten Slug existiert bereits.',
|
||||
],
|
||||
'form' => [
|
||||
@ -97,7 +97,7 @@ return [
|
||||
'cover' => 'Episoden-Cover',
|
||||
'cover_hint' =>
|
||||
'Wenn Du kein Cover festlegst, wird stattdessen das Podcast-Cover verwendet.',
|
||||
'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.',
|
||||
'cover_size_hint' => 'Das Cover muss quadratisch und mindestens 1400px breit und hoch sein.',
|
||||
'title' => 'Titel',
|
||||
'title_hint' =>
|
||||
'Nutze einen klaren und einprägsamen Episodennamen. Gib hier nicht die Episoden- oder Staffelnummern an.',
|
||||
@ -169,7 +169,7 @@ return [
|
||||
'publication_method' => [
|
||||
'now' => 'Jetzt',
|
||||
'schedule' => 'Zeitplan',
|
||||
'with_podcast' => 'Publish alongside podcast',
|
||||
'with_podcast' => 'Zusammen mit dem Podcast veröffentlichen',
|
||||
],
|
||||
'scheduled_publication_date' => 'Geplantes Veröffentlichungsdatum',
|
||||
'scheduled_publication_date_clear' => 'Veröffentlichungsdatum löschen',
|
||||
@ -183,9 +183,9 @@ return [
|
||||
'message_warning_submit' => 'Trotzdem veröffentlichen',
|
||||
],
|
||||
'publish_date_edit_form' => [
|
||||
'new_publication_date' => 'New publication date',
|
||||
'new_publication_date_hint' => 'Must be set to a past date.',
|
||||
'submit' => 'Edit publication date',
|
||||
'new_publication_date' => 'Neues Veröffentlichungsdatum',
|
||||
'new_publication_date_hint' => 'Muss auf ein vergangenes Datum gesetzt werden.',
|
||||
'submit' => 'Veröffentlichungsdatum bearbeiten',
|
||||
],
|
||||
'unpublish_form' => [
|
||||
'disclaimer' =>
|
||||
@ -197,7 +197,7 @@ return [
|
||||
'disclaimer' =>
|
||||
"Deleting the episode will delete all media files, comments, video clips and soundbites associated with it.",
|
||||
'understand' => 'Ich verstehe, ich möchte die Folge löschen',
|
||||
'submit' => 'Delete',
|
||||
'submit' => 'Löschen',
|
||||
],
|
||||
'embed' => [
|
||||
'title' => 'Einbettbarer Spieler',
|
||||
|
@ -33,7 +33,7 @@ return [
|
||||
'settings' => 'Einstellungen',
|
||||
'settings-general' => 'Allgemein',
|
||||
'settings-theme' => 'Erscheinungsbild',
|
||||
'about' => 'About',
|
||||
'about' => 'Über',
|
||||
'account' => [
|
||||
'my-account' => 'Mein Konto',
|
||||
'change-password' => 'Passwort ändern',
|
||||
|
@ -9,11 +9,11 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => 'Notifications',
|
||||
'reply' => '{actor_username} replied to your post',
|
||||
'favourite' => '{actor_username} favourited your post',
|
||||
'reblog' => '{actor_username} shared your post',
|
||||
'follow' => '{actor_username} started following you',
|
||||
'no_notifications' => 'No notifications',
|
||||
'mark_all_as_read' => 'Mark all as read',
|
||||
'title' => 'Benachrichtigungen',
|
||||
'reply' => '{actor_username} hat auf Ihren Beitrag geantwortet',
|
||||
'favourite' => '{actor_username} hat Ihren Beitrag favorisiert',
|
||||
'reblog' => '{actor_username} hat Ihren Beitrag geteilt',
|
||||
'follow' => '{actor_username} folgt Ihnen jetzt',
|
||||
'no_notifications' => 'Keine Benachrichtigungen',
|
||||
'mark_all_as_read' => 'Alle als gelesen markieren',
|
||||
];
|
||||
|
@ -24,7 +24,7 @@ return [
|
||||
'form' => [
|
||||
'avatar' => 'Profilbild',
|
||||
'avatar_size_hint' =>
|
||||
'Avatar must be squared and at least 400px wide and tall.',
|
||||
'Das Profilbild muss quadratisch und mindestens 400px breit und hoch sein.',
|
||||
'full_name' => 'Vollständiger Name',
|
||||
'full_name_hint' => 'Dies ist der vollständige Name oder der Alias der Person.',
|
||||
'unique_name' => 'Eindeutiger Name',
|
||||
|
@ -16,7 +16,7 @@ return [
|
||||
'new_episode' => 'Neue Folge',
|
||||
'view' => 'Podcast ansehen',
|
||||
'edit' => 'Podcast bearbeiten',
|
||||
'publish' => 'Publish podcast',
|
||||
'publish' => 'Podcast veröffentlichen',
|
||||
'publish_edit' => 'Edit publication',
|
||||
'delete' => 'Podcast löschen',
|
||||
'see_episodes' => 'Episoden ansehen',
|
||||
@ -24,12 +24,12 @@ return [
|
||||
'go_to_page' => 'Gehe zur Seite',
|
||||
'latest_episodes' => 'Neueste Folgen',
|
||||
'see_all_episodes' => 'Alle Folgen anzeigen',
|
||||
'draft' => 'Draft',
|
||||
'draft' => 'Entwurf',
|
||||
'messages' => [
|
||||
'createSuccess' => 'Podcast successfully created!',
|
||||
'createSuccess' => 'Podcast erfolgreich erstellt!',
|
||||
'editSuccess' => 'Der Podcast wurde erfolgreich aktualisiert!',
|
||||
'importSuccess' => 'Der Podcast wurde erfolgreich importiert!',
|
||||
'deleteSuccess' => 'Podcast @{podcast_handle} successfully deleted!',
|
||||
'deleteSuccess' => 'Podcast @{podcast_handle} erfolgreich gelöscht!',
|
||||
'deletePodcastMediaError' => 'Failed to delete podcast {type, select,
|
||||
cover {cover}
|
||||
banner {banner}
|
||||
@ -47,18 +47,18 @@ return [
|
||||
one {# episode was}
|
||||
other {# episodes were}
|
||||
} added to the podcast!',
|
||||
'podcastFeedUpToDate' => 'Podcast is already up to date.',
|
||||
'podcastFeedUpToDate' => 'Der Podcast ist bereits auf dem neuesten Stand.',
|
||||
'podcastNotImported' => 'Podcast could not be updated as it was not imported.',
|
||||
'publishError' => 'This podcast is either already published or scheduled for publication.',
|
||||
'publishEditError' => 'This podcast is not scheduled for publication.',
|
||||
'publishCancelSuccess' => 'Podcast publication successfully cancelled!',
|
||||
'scheduleDateError' => 'Schedule date must be set!',
|
||||
'scheduleDateError' => 'Veröffentlichungsdatum muss gesetzt sein!',
|
||||
],
|
||||
'form' => [
|
||||
'identity_section_title' => 'Podcast-Identität',
|
||||
'identity_section_subtitle' => 'Diese Felder erlauben es dir, Aufmerksamkeit zu bekommen.',
|
||||
'cover' => 'Podcast-Cover',
|
||||
'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.',
|
||||
'cover_size_hint' => 'Das Cover muss quadratisch und mindestens 1400px breit und hoch sein.',
|
||||
'banner' => 'Podcast-Banner',
|
||||
'banner_size_hint' => 'Banner must have a 3:1 ratio and be at least 1500px wide.',
|
||||
'banner_delete' => 'Podcast-Banner löschen',
|
||||
@ -120,8 +120,8 @@ return [
|
||||
'custom_rss_hint' => 'Dies wird innerhalb des ❬channel❭ Tags eingefügt.',
|
||||
'new_feed_url' => 'Neue Feed-URL',
|
||||
'new_feed_url_hint' => 'Benutzen Sie dieses Feld, wenn Sie zu einer anderen Domain oder Podcast-Plattform wechseln. Standardmäßig wird der Wert auf die aktuelle RSS URL gesetzt, wenn der Podcast importiert wird.',
|
||||
'old_feed_url' => 'Old feed URL',
|
||||
'update_feed' => 'Update feed',
|
||||
'old_feed_url' => 'Alte Feed-URL',
|
||||
'update_feed' => 'Feed aktualisieren',
|
||||
'update_feed_tip' => 'Import this podcast\'s latest episodes',
|
||||
'partnership' => 'Partnerschaft:en',
|
||||
'partner_id' => 'ID',
|
||||
@ -259,12 +259,12 @@ return [
|
||||
'post' => 'Your announcement post',
|
||||
'post_hint' =>
|
||||
"Write a message to announce the publication of your podcast. The message will be featured in your podcast's homepage.",
|
||||
'message_placeholder' => 'Write your message…',
|
||||
'submit' => 'Publish',
|
||||
'message_placeholder' => 'Schreiben Sie Ihre Nachricht…',
|
||||
'submit' => 'Veröffentlichen',
|
||||
'publication_date' => 'Publication date',
|
||||
'publication_method' => [
|
||||
'now' => 'Now',
|
||||
'schedule' => 'Schedule',
|
||||
'now' => 'Jetzt',
|
||||
'schedule' => 'Planen',
|
||||
],
|
||||
'scheduled_publication_date' => 'Scheduled publication date',
|
||||
'scheduled_publication_date_hint' =>
|
||||
@ -273,18 +273,18 @@ return [
|
||||
'cancel_publication' => 'Cancel publication',
|
||||
'message_warning' => 'You did not write a message for your announcement post!',
|
||||
'message_warning_hint' => 'Having a message increases social engagement, resulting in a better visibility for your podcast.',
|
||||
'message_warning_submit' => 'Publish anyway',
|
||||
'message_warning_submit' => 'Dennoch veröffentlichen',
|
||||
],
|
||||
'publication_status_banner' => [
|
||||
'draft_mode' => 'draft mode',
|
||||
'not_published' => 'This podcast is not yet published.',
|
||||
'draft_mode' => 'Entwurfsmodus',
|
||||
'not_published' => 'Dieser Podcast ist noch nicht veröffentlicht.',
|
||||
'scheduled' => 'This podcast is scheduled for publication on {publication_date}.',
|
||||
],
|
||||
'delete_form' => [
|
||||
'disclaimer' =>
|
||||
"Deleting the podcast will delete all episodes, media files, posts and analytics associated with it. This action is irreversible, you will not be able to retrieve them afterwards.",
|
||||
'understand' => 'I understand, I want the podcast to be permanently deleted',
|
||||
'submit' => 'Delete',
|
||||
'understand' => 'Ich verstehe, ich möchte, dass der Podcast dauerhaft gelöscht wird',
|
||||
'submit' => 'Löschen',
|
||||
],
|
||||
'by' => 'Von {publisher}',
|
||||
'season' => 'Staffel {seasonNumber}',
|
||||
@ -294,12 +294,12 @@ return [
|
||||
'no_episode' => 'Keine Folge gefunden!',
|
||||
'follow' => 'Folgen',
|
||||
'followers' => '{numberOfFollowers, plural,
|
||||
one {# follower}
|
||||
other {# followers}
|
||||
one {# Follower}
|
||||
other {# Follower}
|
||||
}',
|
||||
'posts' => '{numberOfPosts, plural,
|
||||
one {# post}
|
||||
other {# posts}
|
||||
one {# Beitrag}
|
||||
other {# Beiträge}
|
||||
}',
|
||||
'activity' => 'Aktivitäten',
|
||||
'episodes' => 'Folgen',
|
||||
|
@ -10,7 +10,7 @@ declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'warning' =>
|
||||
'This procedure may take a long time. As the current version does not show any progress while it runs, you will not see anything updated until it is done. In case of timeout error, increase `max_execution_time` value.',
|
||||
'Der Import kann lange dauern. Da die aktuelle Version keinen Fortschritt anzeigt, werden Sie bis zur Beendigung keine Veränderung sehen. Im Falle eines Timeouts, erhöhen Sie den `max_execution_time` Wert.',
|
||||
'old_podcast_section_title' => 'Der zu importierende Podcast',
|
||||
'old_podcast_section_subtitle' =>
|
||||
'Stellen Sie sicher, dass Sie die Rechte für diesen Podcast besitzen, bevor Sie ihn importieren. Vervielfältigung und Ausstrahlung eines Podcasts ohne die entsprechenden Rechte sind Piraterie und strafbar.',
|
||||
|
@ -26,8 +26,8 @@ return [
|
||||
'podcast-analytics-listening-time' => 'Hörzeit',
|
||||
'podcast-analytics-time-periods' => 'Zeiträume',
|
||||
'premium' => 'Premium',
|
||||
'subscription-list' => 'All subscriptions',
|
||||
'subscription-add' => 'Add subscription',
|
||||
'subscription-list' => 'Alle Abonnements',
|
||||
'subscription-add' => 'Abonnement hinzufügen',
|
||||
'contributors' => 'Administratoren',
|
||||
'contributor-list' => 'Alle Unterstützer',
|
||||
'contributor-add' => 'Administrator hinzufügen',
|
||||
|
@ -15,7 +15,7 @@ return [
|
||||
'site_icon' => 'Webseiten-Icon',
|
||||
'site_icon_delete' => 'Lösche Webseiten-Icon',
|
||||
'site_icon_hint' => 'Webseiten-Icons sind das, was Sie auf Ihrem Browser Tabs, Lesezeichenleiste und wenn Sie eine Website als Verknüpfung auf mobilen Geräten hinzufügen, sehen.',
|
||||
'site_icon_helper' => 'Icon must be squared and at least 512px wide and tall.',
|
||||
'site_icon_helper' => 'Das Icon muss quadratisch und mindestens 512px breit und hoch sein.',
|
||||
'site_name' => 'Seitenname',
|
||||
'site_description' => 'Seitenbeschreibung',
|
||||
'submit' => 'Speichern',
|
||||
@ -35,8 +35,8 @@ return [
|
||||
'reset_counts_helper' => 'Diese Option wird alle Datenzähler neu berechnen und zurücksetzen (Anzahl der Follower, Beiträge, Kommentare, …).',
|
||||
'rewrite_media' => 'Medien-Metadaten neu schreiben',
|
||||
'rewrite_media_helper' => 'Diese Option wird alle überflüssigen Mediendateien löschen und neu erstellen (Bilder, Audiodateien, Transkripte, Kapitel …)',
|
||||
'rename_episodes_files' => 'Rename episode audio files',
|
||||
'rename_episodes_files_hint' => 'This option will rename all episodes audio files to a random string of characters. Use this if one of your private episodes link was leaked as this will effectively hide it.',
|
||||
'rename_episodes_files' => 'Audiodateien der Episode umbenennen',
|
||||
'rename_episodes_files_hint' => 'Diese Option wird alle Audiodateien der Episode mit einer zufälligen Zeichenkette umbenennen. Benutzen Sie diese Option, wenn einer Ihrer privaten Episoden-Links durchsickert, da diese dadurch versteckt werden.',
|
||||
'clear_cache' => 'Alle Caches löschen',
|
||||
'clear_cache_helper' => 'Diese Option leert den redis-Cache oder beschreibbare/cache-Dateien.',
|
||||
'run' => 'Systempflege starten',
|
||||
|
@ -9,14 +9,14 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => 'About Castopod',
|
||||
'host_name' => 'Host name',
|
||||
'version' => 'Castopod version',
|
||||
'php_version' => 'PHP version',
|
||||
'os' => 'Operating System',
|
||||
'languages' => 'Languages',
|
||||
'update_database' => 'Update database',
|
||||
'title' => 'Acerca de Castopod',
|
||||
'host_name' => 'Nome do servidor',
|
||||
'version' => 'Versión de Castopod',
|
||||
'php_version' => 'Versión de PHP',
|
||||
'os' => 'Sistema Operativo',
|
||||
'languages' => 'Idiomas',
|
||||
'update_database' => 'Anovar base de datos',
|
||||
'messages' => [
|
||||
'databaseUpdateSuccess' => 'Database is up to date!',
|
||||
'databaseUpdateSuccess' => 'A base de datos está ao día!',
|
||||
],
|
||||
];
|
||||
|
@ -14,22 +14,22 @@ return [
|
||||
->gateway => 'Inicio',
|
||||
'podcasts' => 'podcasts',
|
||||
'episodes' => 'episodios',
|
||||
'subscriptions' => 'subscriptions',
|
||||
'subscriptions' => 'subscricións',
|
||||
'contributors' => 'contribúen',
|
||||
'pages' => 'páxinas',
|
||||
'settings' => 'axustes',
|
||||
'theme' => 'decorado',
|
||||
'about' => 'about',
|
||||
'about' => 'acerca de',
|
||||
'add' => 'engadir',
|
||||
'new' => 'novo',
|
||||
'edit' => 'editar',
|
||||
'persons' => 'persoas',
|
||||
'publish' => 'publicar',
|
||||
'publish-edit' => 'editar publicación',
|
||||
'publish-date-edit' => 'edit publication date',
|
||||
'publish-date-edit' => 'editar data de publicación',
|
||||
'unpublish' => 'retirar publicación',
|
||||
'delete' => 'eliminar',
|
||||
'remove' => 'remove',
|
||||
'remove' => 'eliminar',
|
||||
'fediverse' => 'fediverso',
|
||||
'block-lists' => 'listas de bloqueo',
|
||||
'users' => 'usuarias',
|
||||
@ -50,5 +50,5 @@ return [
|
||||
'video-clips' => 'clips de vídeo',
|
||||
'embed' => 'reprodutor para incluír',
|
||||
'notifications' => 'notificacións',
|
||||
'suspend' => 'suspend',
|
||||
'suspend' => 'suspender',
|
||||
];
|
||||
|
@ -24,14 +24,14 @@ return [
|
||||
'edit' => 'Editar',
|
||||
'publish' => 'Publicar',
|
||||
'publish_edit' => 'Editar publicación',
|
||||
'publish_date_edit' => 'Edit publication date',
|
||||
'publish_date_edit' => 'Editar data de publicación',
|
||||
'unpublish' => 'Retirar publicación',
|
||||
'publish_error' => 'O episodio xa está publicado.',
|
||||
'publish_edit_error' => 'O episodio xa está publicado.',
|
||||
'publish_cancel_error' => 'O episodio xa está publicado.',
|
||||
'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.',
|
||||
'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.',
|
||||
'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!',
|
||||
'publish_date_edit_error' => 'O episodio aínda non se publicou, non podes editar a súa data de publicación.',
|
||||
'publish_date_edit_future_error' => 'A data de publicación do episodio só pode establecerse nun momento do pasado! Se queres reprogramalo, primeiro retira a súa publicación.',
|
||||
'publish_date_edit_success' => 'Actualizada correctamente a data de publicación do episodio!',
|
||||
'unpublish_error' => 'O episodio non foi publicado.',
|
||||
'delete' => 'Eliminar',
|
||||
'go_to_page' => 'Ir á páxina',
|
||||
@ -114,7 +114,7 @@ return [
|
||||
'bonus_hint' => 'Contido extra para o programa (por exemplo, info sobre a elaboración ou conversa casual cos participantes) ou contido promocional de outras creadoras',
|
||||
],
|
||||
'premium_title' => 'Premium',
|
||||
'premium' => 'Episode must be accessible to premium subscribers only',
|
||||
'premium' => 'Episodio dispoñible só para subscricións premium',
|
||||
'parental_advisory' => [
|
||||
'label' => 'Aviso sobre o contido',
|
||||
'hint' => 'Contén o episodio elementos explícitos?',
|
||||
@ -183,9 +183,9 @@ return [
|
||||
'message_warning_submit' => 'Publicar igualmente',
|
||||
],
|
||||
'publish_date_edit_form' => [
|
||||
'new_publication_date' => 'New publication date',
|
||||
'new_publication_date_hint' => 'Must be set to a past date.',
|
||||
'submit' => 'Edit publication date',
|
||||
'new_publication_date' => 'Nova data de publicación',
|
||||
'new_publication_date_hint' => 'Ten que ser unha data do pasado.',
|
||||
'submit' => 'Editar data de publicación',
|
||||
],
|
||||
'unpublish_form' => [
|
||||
'disclaimer' =>
|
||||
|
@ -14,22 +14,22 @@ return [
|
||||
->gateway => 'Úvod',
|
||||
'podcasts' => 'podcasty',
|
||||
'episodes' => 'časti',
|
||||
'subscriptions' => 'subscriptions',
|
||||
'subscriptions' => 'odbery',
|
||||
'contributors' => 'prispievatelia',
|
||||
'pages' => 'stránky',
|
||||
'settings' => 'nastavenia',
|
||||
'theme' => 'vzhľad',
|
||||
'about' => 'about',
|
||||
'about' => 'informácie',
|
||||
'add' => 'pridať',
|
||||
'new' => 'pridať',
|
||||
'edit' => 'upraviť',
|
||||
'persons' => 'osobnosti',
|
||||
'publish' => 'zverejniť',
|
||||
'publish-edit' => 'upraviť zverejnené',
|
||||
'publish-date-edit' => 'edit publication date',
|
||||
'publish-date-edit' => 'upraviť dátum publikovania',
|
||||
'unpublish' => 'zrušiť zverejnenie',
|
||||
'delete' => 'vymazať',
|
||||
'remove' => 'remove',
|
||||
'remove' => 'odstrániť',
|
||||
'fediverse' => 'fediverse',
|
||||
'block-lists' => 'zoznamy blokovaných',
|
||||
'users' => 'používatelia',
|
||||
@ -50,5 +50,5 @@ return [
|
||||
'video-clips' => 'video klipy',
|
||||
'embed' => 'vnorený',
|
||||
'notifications' => 'oboznámenia',
|
||||
'suspend' => 'suspend',
|
||||
'suspend' => 'pozastaviť',
|
||||
];
|
||||
|
@ -13,7 +13,7 @@ declare(strict_types=1);
|
||||
return [
|
||||
'AD' => 'Andorra',
|
||||
'AE' => 'Spojené Arabské Emiráty',
|
||||
'AF' => 'Afghanistan',
|
||||
'AF' => 'Afganistan',
|
||||
'AG' => 'Antigua a Barbuda',
|
||||
'AI' => 'Anguilla',
|
||||
'AL' => 'Albánsko',
|
||||
@ -25,7 +25,7 @@ return [
|
||||
'AT' => 'Rakúsko',
|
||||
'AU' => 'Austrália',
|
||||
'AW' => 'Aruba',
|
||||
'AX' => 'Åland Islands',
|
||||
'AX' => 'Ålandy',
|
||||
'AZ' => 'Azerbajdžan',
|
||||
'BA' => 'Bosna a Hercegovina',
|
||||
'BB' => 'Barbados',
|
||||
@ -33,36 +33,41 @@ return [
|
||||
'BE' => 'Belgicko',
|
||||
'BF' => 'Burkina Faso',
|
||||
'BG' => 'Bulharsko',
|
||||
'BH' => 'Bahrain',
|
||||
'BH' => 'Bahrajn',
|
||||
'BI' => 'Burundi',
|
||||
'BJ' => 'Benin',
|
||||
'BL' => 'Saint Barthélemy',
|
||||
'BM' => 'Bermuda',
|
||||
'BN' => 'Brunei Darussalam',
|
||||
'BO' => 'Bolivia, Plurinational State of',
|
||||
'BQ' => 'Bonaire, Sint Eustatius and Saba',
|
||||
'BR' => 'Brazil',
|
||||
'BS' => 'Bahamas',
|
||||
'BT' => 'Bhutan',
|
||||
'BV' => 'Bouvet Island',
|
||||
'BL' => 'Svätý Bartolomej',
|
||||
'BM' => 'Bermudy',
|
||||
'BN' => 'Brunejsko-Darussalamsky Štát',
|
||||
'BO' => 'Bolívia, plurinský štát',
|
||||
'BQ' => 'Bonaire, Sint Eustatius a Sabaj',
|
||||
'BR' => 'Brazília',
|
||||
'BS' => 'Bahamy',
|
||||
'BT' => 'Bhután',
|
||||
'BV' => 'Bouvetov ostrov',
|
||||
'BW' => 'Botswana',
|
||||
'BY' => 'Belarus',
|
||||
'BY' => 'Bielorusko',
|
||||
'BZ' => 'Belize',
|
||||
'CA' => 'Canada',
|
||||
'CC' => 'Cocos (Keeling) Islands',
|
||||
'CD' => 'Congo, the Democratic Republic of the',
|
||||
'CF' => 'Central African Republic',
|
||||
'CG' => 'Congo',
|
||||
'CH' => 'Switzerland',
|
||||
'CI' => "Côte d'Ivoire",
|
||||
'CK' => 'Cook Islands',
|
||||
'CL' => 'Chile',
|
||||
'CM' => 'Cameroon',
|
||||
'CA' => 'Kanada',
|
||||
'CC' => 'Kokosové ostrovy',
|
||||
'CD' => '
|
||||
Bhután
|
||||
Bouvetov ostrov
|
||||
Bielorusko
|
||||
Kokosové ostrovy
|
||||
Konžská demokratická republika',
|
||||
'CF' => 'Stredoafrická republika',
|
||||
'CG' => 'Kongo',
|
||||
'CH' => 'Švajčiarsko',
|
||||
'CI' => "Pobrežie slonoviny",
|
||||
'CK' => 'Cookove ostrovy',
|
||||
'CL' => 'Čile',
|
||||
'CM' => 'Kamerun',
|
||||
'CN' => 'Čína',
|
||||
'CO' => 'Kolumbia',
|
||||
'CR' => 'Kostarika',
|
||||
'CU' => 'Kuba',
|
||||
'CV' => 'Cape Verde',
|
||||
'CV' => 'Kapverdy',
|
||||
'CW' => 'Curaçao',
|
||||
'CX' => 'Vianočný Ostrov',
|
||||
'CY' => 'Cyprus',
|
||||
@ -70,7 +75,7 @@ return [
|
||||
'DE' => 'Nemecko',
|
||||
'DJ' => 'Džibutsko',
|
||||
'DK' => 'Dánsko',
|
||||
'DM' => 'Dominica',
|
||||
'DM' => 'Dominika',
|
||||
'DO' => 'Dominikánska republika',
|
||||
'DZ' => 'Alžírsko',
|
||||
'EC' => 'Ekvádor',
|
||||
@ -83,22 +88,22 @@ return [
|
||||
'FI' => 'Fínsko',
|
||||
'FJ' => 'Fidži',
|
||||
'FK' => 'Falklandské ostrovy (Malvíny)',
|
||||
'FM' => 'Micronesia, Federated States of',
|
||||
'FM' => 'Mikronézia, federatívne štáty',
|
||||
'FO' => 'Faerské Ostrovy',
|
||||
'FR' => 'Francúzsko',
|
||||
'GA' => 'Gabon',
|
||||
'GB' => 'Spojené Kráľovstvo',
|
||||
'GD' => 'Grenada',
|
||||
'GE' => 'Gruzínsko',
|
||||
'GF' => 'French Guiana',
|
||||
'GF' => 'Francúzska Guayana',
|
||||
'GG' => 'Guernsey',
|
||||
'GH' => 'Ghana',
|
||||
'GI' => 'Gibraltar',
|
||||
'GI' => 'Gibraltár',
|
||||
'GL' => 'Grónsko',
|
||||
'GM' => 'Gambia',
|
||||
'GN' => 'Guinea',
|
||||
'GP' => 'Guadeloupe',
|
||||
'GQ' => 'Equatorial Guinea',
|
||||
'GQ' => 'Rovníková Guinea',
|
||||
'GR' => 'Grécko',
|
||||
'GS' => 'Južná Georgia a Južné Sandwichove ostrovy',
|
||||
'GT' => 'Guatemala',
|
||||
@ -113,7 +118,7 @@ return [
|
||||
'HU' => 'Maďarsko',
|
||||
'ID' => 'Indonézia',
|
||||
'IE' => 'Írsko',
|
||||
'IL' => 'Israel',
|
||||
'IL' => 'Izrael',
|
||||
'IM' => 'Ostrov Man',
|
||||
'IN' => 'India',
|
||||
'IO' => 'Britské indickooceánske územie',
|
||||
@ -129,18 +134,31 @@ return [
|
||||
'KG' => 'Kirgizsko',
|
||||
'KH' => 'Kambodža',
|
||||
'KI' => 'Kiribati',
|
||||
'KM' => 'Comoros',
|
||||
'KN' => 'Saint Kitts and Nevis',
|
||||
'KP' => "Korea, Democratic People's Republic of",
|
||||
'KR' => 'Korea, Republic of',
|
||||
'KW' => 'Kuwait',
|
||||
'KY' => 'Cayman Islands',
|
||||
'KZ' => 'Kazakhstan',
|
||||
'LA' => "Lao People's Democratic Republic",
|
||||
'KM' => 'Komory',
|
||||
'KN' => 'Svätý Krištof a Nevis',
|
||||
'KP' => "Kórea, Demokratická ľudová republika",
|
||||
'KR' => 'Kórejská Republika',
|
||||
'KW' => 'Kuvajt',
|
||||
'KY' => 'Kajmanské ostrovy',
|
||||
'KZ' => 'Kazachstan',
|
||||
'LA' => "_03 slovutny poprad. mp3
|
||||
Kapverdy
|
||||
Dominika
|
||||
Mikronézia, federatívne štáty
|
||||
Francúzska Guayana
|
||||
Rovníková Guinea
|
||||
Komory
|
||||
Svätý Krištof a Nevis
|
||||
Kórea, Demokratická ľudová republika
|
||||
Kórejská Republika
|
||||
Kuvajt
|
||||
Kajmanské ostrovy
|
||||
Kazachstan
|
||||
Laoská ľudovodemokratická Republika",
|
||||
'LB' => 'Libanon',
|
||||
'LC' => 'Svätá Lucia',
|
||||
'LI' => 'Lichtenštajnsko',
|
||||
'LK' => 'Sri Lanka',
|
||||
'LK' => 'Srí Lanka',
|
||||
'LR' => 'Libéria',
|
||||
'LS' => 'Lesotho',
|
||||
'LT' => 'Litva',
|
||||
@ -151,21 +169,21 @@ return [
|
||||
'MC' => 'Monako',
|
||||
'MD' => 'Moldavská Republika',
|
||||
'ME' => 'Čierna Hora',
|
||||
'MF' => 'Saint Martin (French part)',
|
||||
'MF' => 'Svätý Martin (Francúzska časť)',
|
||||
'MG' => 'Madagaskar',
|
||||
'MH' => 'Marshall Islands',
|
||||
'MH' => 'Marshallove ostrovy',
|
||||
'MK' => 'Macedónsko-Bývalá Juhoslovanská Republika',
|
||||
'ML' => 'Mali',
|
||||
'MM' => 'Mjanmarsko',
|
||||
'MN' => 'Mongolsko',
|
||||
'MO' => 'Macao',
|
||||
'MP' => 'Northern Mariana Islands',
|
||||
'MQ' => 'Martinique',
|
||||
'MR' => 'Mauritania',
|
||||
'MP' => 'Severné Mariány',
|
||||
'MQ' => 'Martinik',
|
||||
'MR' => 'Mauritánia',
|
||||
'MS' => 'Montserrat',
|
||||
'MT' => 'Malta',
|
||||
'MU' => 'Mauritius',
|
||||
'MV' => 'Maldives',
|
||||
'MU' => 'Maurícius',
|
||||
'MV' => 'Maledivy',
|
||||
'MW' => 'Malawi',
|
||||
'MX' => 'Mexiko',
|
||||
'MY' => 'Malajzia',
|
||||
@ -254,7 +272,7 @@ return [
|
||||
'VI' => 'Americké Panenské ostrovy',
|
||||
'VN' => 'Vietnam',
|
||||
'VU' => 'Vanuatu',
|
||||
'WF' => 'Wallis and Futuna',
|
||||
'WF' => 'Wallis a Futuna',
|
||||
'WS' => 'Samoa',
|
||||
'YE' => 'Jemen',
|
||||
'YT' => 'Mayotte',
|
||||
|
@ -26,14 +26,14 @@ return [
|
||||
'edit' => 'Upraviť',
|
||||
'publish' => 'Zverejniť',
|
||||
'publish_edit' => 'Upraviť zverejnenie',
|
||||
'publish_date_edit' => 'Edit publication date',
|
||||
'publish_date_edit' => 'Upraviť dátum zverejnenia',
|
||||
'unpublish' => 'Zrušiť zverejnenie',
|
||||
'publish_error' => 'Epizóda je už zverejnená.',
|
||||
'publish_edit_error' => 'Epizóda je už zverejnená.',
|
||||
'publish_cancel_error' => 'Epizóda je už zverejnená.',
|
||||
'publish_date_edit_error' => 'Episode has not been published yet, you cannot edit its publication date.',
|
||||
'publish_date_edit_future_error' => 'Episode\'s publication date can only be set to a past date! If you would like to reschedule it, unpublish it first.',
|
||||
'publish_date_edit_success' => 'Episode\'s publication date has been updated successfully!',
|
||||
'publish_date_edit_error' => 'Epizóda zatiaľ nie je zverejnená, nie je možné upraviť dátum zverejnenia.',
|
||||
'publish_date_edit_future_error' => 'Dátum zverejnenia musí byť v minulosti! Ak si zverejnenie želáte naplánovať v budúcnosti, musíte ho najskôr zrušiť.',
|
||||
'publish_date_edit_success' => 'Dátum zverejnenia epizódy bol úspešne aktualizovaný!',
|
||||
'unpublish_error' => 'Epizóda nie je zverejnená.',
|
||||
'delete' => 'Vymazať',
|
||||
'go_to_page' => 'Prejsť na stránku',
|
||||
@ -94,45 +94,45 @@ return [
|
||||
],
|
||||
'form' => [
|
||||
'file_size_error' =>
|
||||
'Your file size is too big! Max size is {0}. Increase the `memory_limit`, `upload_max_filesize` and `post_max_size` values in your php configuration file then restart your web server to upload your file.',
|
||||
'Súbor je príliš veľký! Maximálna povolená veľkosť je {0}. V konfigurácii Php zvýšte hodnoty nastavení `memory_limit`, `upload_max_filesize` a `post_max_size` a následne reštartujte web server, aby ste súbor mohli nahrať znovu.',
|
||||
'audio_file' => 'Zvukový súbor',
|
||||
'audio_file_hint' => 'Vyberte zvukový súbor .mp3, alebo .m4a.',
|
||||
'info_section_title' => 'Informácie o časti',
|
||||
'cover' => 'Obal k časti',
|
||||
'cover_hint' =>
|
||||
'If you do not set a cover, the podcast cover will be used instead.',
|
||||
'cover_size_hint' => 'Cover must be squared and at least 1400px wide and tall.',
|
||||
'Ak obrázok nepridáte, použije sa obrázok podcastu.',
|
||||
'cover_size_hint' => 'Obrázok musí byť štvorcový minimálny rozmer 1400px.',
|
||||
'title' => 'Názov',
|
||||
'title_hint' =>
|
||||
'Should contain a clear and concise episode name. Do not specify the episode or season numbers here.',
|
||||
'Má obsahovať jasný a výstižný názov. Nepridávajte čísla sérií a epizód.',
|
||||
'permalink' => 'Trvalý odkaz',
|
||||
'season_number' => 'Season',
|
||||
'season_number' => 'Séria',
|
||||
'episode_number' => 'Epizóda',
|
||||
'type' => [
|
||||
'label' => 'Type',
|
||||
'full' => 'Full',
|
||||
'full_hint' => 'Complete content (the episode)',
|
||||
'trailer' => 'Trailer',
|
||||
'trailer_hint' => 'Short, promotional piece of content that represents a preview of the current show',
|
||||
'label' => 'Typ',
|
||||
'full' => 'Celá epizóda',
|
||||
'full_hint' => '´Uplný obsah',
|
||||
'trailer' => 'Upútavka',
|
||||
'trailer_hint' => 'Krátky promočný úryvok obsahu, ktorý slúži ako ukážka podcastu',
|
||||
'bonus' => 'Bonus',
|
||||
'bonus_hint' => 'Extra content for the show (for example, behind the scenes info or interviews with the cast) or cross-promotional content for another show',
|
||||
'bonus_hint' => 'Doplnkový obsah podcastu (Informácie zo zákulisia alebo rozhovor s účinkujúcimi) alebo upútavka iného podcastu',
|
||||
],
|
||||
'premium_title' => 'Premium',
|
||||
'premium' => 'Episode must be accessible to premium subscribers only',
|
||||
'premium_title' => 'Prémiový obsah',
|
||||
'premium' => 'Epizóda je prístupná len pre predplatiteľov prémiového obsahu',
|
||||
'parental_advisory' => [
|
||||
'label' => 'Parental advisory',
|
||||
'hint' => 'Does the episode contain explicit content?',
|
||||
'undefined' => 'undefined',
|
||||
'clean' => 'Clean',
|
||||
'label' => 'Rodičovská kontrola',
|
||||
'hint' => 'Obsahuje epizóda explicitný obsah?',
|
||||
'undefined' => 'neuvedené',
|
||||
'clean' => 'Čisté',
|
||||
'explicit' => 'Chúlostivé',
|
||||
],
|
||||
'show_notes_section_title' => 'Show notes',
|
||||
'show_notes_section_title' => 'Poznámky epizódy',
|
||||
'show_notes_section_subtitle' =>
|
||||
'Up to 4000 characters, be clear and concise. Show notes help potential listeners in finding the episode.',
|
||||
'Maximálne 4000 znakov, buďte jasní a výstižní.',
|
||||
'description' => 'Popis',
|
||||
'description_footer' => 'Description footer',
|
||||
'description_footer' => 'Päta popisu',
|
||||
'description_footer_hint' =>
|
||||
'This text is added at the end of each episode description, it is a good place to input your social links for example.',
|
||||
'Tento text je pridaný na koniec popisu každej epizódy, je vhodný napríklad na zverejnenie odkazov na sociálne siete.',
|
||||
'additional_files_section_title' => 'Dodatočné súbory',
|
||||
'additional_files_section_subtitle' =>
|
||||
'Tieto súbory sú určené na použitie s inými platformami s cieľom poslucháčom poskytovať bohačšiu skúsenosť. Pre viac informácií si pozrite {podcastNamespaceLink}.',
|
||||
@ -187,13 +187,13 @@ return [
|
||||
'message_warning_submit' => 'Napriek tomu zverejniť',
|
||||
],
|
||||
'publish_date_edit_form' => [
|
||||
'new_publication_date' => 'New publication date',
|
||||
'new_publication_date_hint' => 'Must be set to a past date.',
|
||||
'submit' => 'Edit publication date',
|
||||
'new_publication_date' => 'Nový dátum zverejnenia',
|
||||
'new_publication_date_hint' => 'Musí byť dátum v minulosti.',
|
||||
'submit' => 'Upraviť dátum zverejnenia',
|
||||
],
|
||||
'unpublish_form' => [
|
||||
'disclaimer' =>
|
||||
"Unpublishing the episode will delete all the comments and posts associated with it and remove it from the podcast's RSS feed.",
|
||||
"Zrušenie zverejnenia odstráni všetky pridružené príspevky a komentáre a odstráni epizódu z kanála RSS.",
|
||||
'understand' => 'Rozumiem, chcem zrušiť zverejnenie epizódy',
|
||||
'submit' => 'Zrušiť zverejnenie',
|
||||
],
|
||||
@ -210,8 +210,8 @@ return [
|
||||
'clipboard_iframe' => 'Skopírovať kód prehrávača do schránky',
|
||||
'clipboard_url' => 'Skopírovať adresu do schránky',
|
||||
'dark' => 'Tmavý',
|
||||
'dark-transparent' => 'Dark transparent',
|
||||
'light' => 'Light',
|
||||
'light-transparent' => 'Light transparent',
|
||||
'dark-transparent' => 'Tmavý priehľadný',
|
||||
'light' => 'Svetlý',
|
||||
'light-transparent' => 'Svetlý priehľadný',
|
||||
],
|
||||
];
|
||||
|
@ -10,7 +10,7 @@ declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'go_to_page' => 'Zobraziť stránku časti',
|
||||
'dashboard' => 'Episode dashboard',
|
||||
'dashboard' => 'Nástenka epizódy',
|
||||
'episode-view' => 'Domov',
|
||||
'episode-edit' => 'Upraviť časť',
|
||||
'episode-persons-manage' => 'Manage persons',
|
||||
|
@ -9,14 +9,14 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'title' => 'About Castopod',
|
||||
'host_name' => 'Host name',
|
||||
'title' => 'Om Castopod',
|
||||
'host_name' => 'Värdnamn',
|
||||
'version' => 'Castopod version',
|
||||
'php_version' => 'PHP version',
|
||||
'os' => 'Operating System',
|
||||
'languages' => 'Languages',
|
||||
'update_database' => 'Update database',
|
||||
'os' => 'Operativsystem',
|
||||
'languages' => 'Språk',
|
||||
'update_database' => 'Uppdatera databas',
|
||||
'messages' => [
|
||||
'databaseUpdateSuccess' => 'Database is up to date!',
|
||||
'databaseUpdateSuccess' => 'Databasen är uppdaterad!',
|
||||
],
|
||||
];
|
||||
|
@ -11,44 +11,44 @@ declare(strict_types=1);
|
||||
return [
|
||||
'label' => 'breadcrumb',
|
||||
config('Admin')
|
||||
->gateway => 'Home',
|
||||
->gateway => 'Hem',
|
||||
'podcasts' => 'podcasts',
|
||||
'episodes' => 'episodes',
|
||||
'subscriptions' => 'subscriptions',
|
||||
'contributors' => 'contributors',
|
||||
'pages' => 'pages',
|
||||
'settings' => 'settings',
|
||||
'theme' => 'theme',
|
||||
'about' => 'about',
|
||||
'add' => 'add',
|
||||
'new' => 'new',
|
||||
'edit' => 'edit',
|
||||
'persons' => 'persons',
|
||||
'publish' => 'publish',
|
||||
'publish-edit' => 'edit publication',
|
||||
'publish-date-edit' => 'edit publication date',
|
||||
'unpublish' => 'unpublish',
|
||||
'delete' => 'delete',
|
||||
'remove' => 'remove',
|
||||
'episodes' => 'avsnitt',
|
||||
'subscriptions' => 'prenumerationer',
|
||||
'contributors' => 'bidragsgivare',
|
||||
'pages' => 'sidor',
|
||||
'settings' => 'inställningar',
|
||||
'theme' => 'tema',
|
||||
'about' => 'om',
|
||||
'add' => 'lägg till',
|
||||
'new' => 'ny',
|
||||
'edit' => 'redigera',
|
||||
'persons' => 'personer',
|
||||
'publish' => 'publicera',
|
||||
'publish-edit' => 'redigera publikation',
|
||||
'publish-date-edit' => 'redigera publiceringsdatum',
|
||||
'unpublish' => 'avpublicera',
|
||||
'delete' => 'radera',
|
||||
'remove' => 'ta bort',
|
||||
'fediverse' => 'fediverse',
|
||||
'block-lists' => 'block lists',
|
||||
'users' => 'users',
|
||||
'my-account' => 'my account',
|
||||
'change-password' => 'change password',
|
||||
'import' => 'feed import',
|
||||
'platforms' => 'platforms',
|
||||
'social' => 'social networks',
|
||||
'funding' => 'funding',
|
||||
'analytics' => 'analytics',
|
||||
'locations' => 'locations',
|
||||
'webpages' => 'web pages',
|
||||
'unique-listeners' => 'unique listeners',
|
||||
'players' => 'players',
|
||||
'listening-time' => 'listening time',
|
||||
'time-periods' => 'time periods',
|
||||
'soundbites' => 'soundbites',
|
||||
'video-clips' => 'video clips',
|
||||
'embed' => 'embeddable player',
|
||||
'notifications' => 'notifications',
|
||||
'suspend' => 'suspend',
|
||||
'block-lists' => 'block listor',
|
||||
'users' => 'användare',
|
||||
'my-account' => 'mitt konto',
|
||||
'change-password' => 'ändra lösenord',
|
||||
'import' => 'import av flöde',
|
||||
'platforms' => 'plattformar',
|
||||
'social' => 'sociala nätverk',
|
||||
'funding' => 'finansiering',
|
||||
'analytics' => 'analys',
|
||||
'locations' => 'platser',
|
||||
'webpages' => 'webbplatser',
|
||||
'unique-listeners' => 'unika lyssnare',
|
||||
'players' => 'spelare',
|
||||
'listening-time' => 'lyssningstid',
|
||||
'time-periods' => 'tidsperiod',
|
||||
'soundbites' => 'ljudklipp',
|
||||
'video-clips' => 'videoklipp',
|
||||
'embed' => 'inbäddad spelare',
|
||||
'notifications' => 'aviseringar',
|
||||
'suspend' => 'suspendera',
|
||||
];
|
||||
|
@ -9,32 +9,32 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'by_service_weekly' => 'Episode downloads by service (for the past week)',
|
||||
'by_player_weekly' => 'Episode downloads by player (for the past week)',
|
||||
'by_player_yearly' => 'Episode downloads by player (for the past year)',
|
||||
'by_device_weekly' => 'Episode downloads by device (for the past week)',
|
||||
'by_os_weekly' => 'Episode downloads by O.S. (for the past week)',
|
||||
'podcast_by_region' => 'Episode downloads by region (for the past week)',
|
||||
'unique_daily_listeners' => 'Daily unique listeners',
|
||||
'unique_monthly_listeners' => 'Monthly unique listeners',
|
||||
'by_browser' => 'Web pages usage by browser (for the past week)',
|
||||
'podcast_by_day' => 'Episode daily downloads',
|
||||
'podcast_by_month' => 'Episode monthly downloads',
|
||||
'episode_by_day' => 'Episode daily downloads (first 60 days)',
|
||||
'episode_by_month' => 'Episode monthly downloads',
|
||||
'by_service_weekly' => 'Avsnitt nedladdningar via tjänst (under den senaste veckan)',
|
||||
'by_player_weekly' => 'Nedladdningar av avsnitt via spelare (under den senaste veckan)',
|
||||
'by_player_yearly' => 'Nedladdningar av avsnitt via spelare (under det gångna året)',
|
||||
'by_device_weekly' => 'Avsnitt nedladdningar per enhet (föregående veckan)',
|
||||
'by_os_weekly' => 'Avsnitt nedladdningar av O.S. (för den föregående veckan)',
|
||||
'podcast_by_region' => 'Nedladdningar av avsnitt efter region (under den föregående veckan)',
|
||||
'unique_daily_listeners' => 'Dagliga unika lyssnare',
|
||||
'unique_monthly_listeners' => 'Unika lyssnare varje månad',
|
||||
'by_browser' => 'Webbsidor användning av webbläsare (under den föregående veckan)',
|
||||
'podcast_by_day' => 'Avsnitt dagliga nedladdningar',
|
||||
'podcast_by_month' => 'Månatliga nedladdningar av avsnitt',
|
||||
'episode_by_day' => 'Avsnitt dagliga nedladdningar (första 60 dagar)',
|
||||
'episode_by_month' => 'Månatliga nedladdningar av avsnitt',
|
||||
'episodes_by_day' =>
|
||||
'5 latest episodes downloads (during their first 60 days)',
|
||||
'by_country_weekly' => 'Episode downloads by country (for the past week)',
|
||||
'by_country_yearly' => 'Episode downloads by country (for the past year)',
|
||||
'by_domain_weekly' => 'Web pages visits by source (for the past week)',
|
||||
'by_domain_yearly' => 'Web pages visits by source (for the past year)',
|
||||
'by_entry_page' => 'Web pages visits by landing page (for the past week)',
|
||||
'5 senaste avsnitt nedladdningar (under sina första 60 dagar)',
|
||||
'by_country_weekly' => 'Nedladdningar av avsnitt per land (under den föregående veckan)',
|
||||
'by_country_yearly' => 'Nedladdningar av avsnitt per land (för föregående året)',
|
||||
'by_domain_weekly' => 'Webbsidor besök per källa (under föregående veckan)',
|
||||
'by_domain_yearly' => 'Webbsidor besök per källa (för det gångna året)',
|
||||
'by_entry_page' => 'Webbsidor besök via startsida (under den föregående veckan)',
|
||||
'podcast_bots' => 'Bots (crawlers)',
|
||||
'daily_listening_time' => 'Daily cumulative listening time',
|
||||
'monthly_listening_time' => 'Monthly cumulative listening time',
|
||||
'by_weekday' => 'By week day (for the past 60 days)',
|
||||
'by_hour' => 'By time of day (for the past 60 days)',
|
||||
'podcast_by_bandwidth' => 'Daily used bandwidth (in MB)',
|
||||
'total_storage_by_month' => 'Monthly storage (in MB)',
|
||||
'total_bandwidth_by_month' => 'Monthly used bandwidth (in MB)',
|
||||
'daily_listening_time' => 'Daglig kumulativ lyssningstid',
|
||||
'monthly_listening_time' => 'Månatlig kumulativ lyssningstid',
|
||||
'by_weekday' => 'Efter veckodag (för de senaste 60 dagarna)',
|
||||
'by_hour' => 'Via tiden på dagen (de senaste 60 dagarna)',
|
||||
'podcast_by_bandwidth' => 'Dagligen använd bandbredd (i MB)',
|
||||
'total_storage_by_month' => 'Månadslagring (i MB)',
|
||||
'total_bandwidth_by_month' => 'Månatlig använd bandbredd (i MB)',
|
||||
];
|
||||
|
@ -9,43 +9,43 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'yes' => 'Yes',
|
||||
'no' => 'No',
|
||||
'cancel' => 'Cancel',
|
||||
'optional' => 'Optional',
|
||||
'more' => 'More',
|
||||
'no_data' => 'No data found!',
|
||||
'close' => 'Close',
|
||||
'edit' => 'Edit',
|
||||
'copy' => 'Copy',
|
||||
'copied' => 'Copied!',
|
||||
'home' => 'Home',
|
||||
'explicit' => 'Explicit',
|
||||
'powered_by' => 'Powered by {castopod}',
|
||||
'actions' => 'Actions',
|
||||
'pageInfo' => 'Page {currentPage} out of {pageCount}',
|
||||
'go_back' => 'Go back',
|
||||
'yes' => 'Ja',
|
||||
'no' => 'Nej',
|
||||
'cancel' => 'Avbryt',
|
||||
'optional' => 'Valfritt',
|
||||
'more' => 'Mer',
|
||||
'no_data' => 'Ingen data hittades!',
|
||||
'close' => 'Stäng',
|
||||
'edit' => 'Redigera',
|
||||
'copy' => 'Kopiera',
|
||||
'copied' => 'Kopierad!',
|
||||
'home' => 'Hem',
|
||||
'explicit' => 'Uteslutande',
|
||||
'powered_by' => 'Drivs av {castopod}',
|
||||
'actions' => 'Åtgärder',
|
||||
'pageInfo' => 'Sida {currentPage} av {pageCount}',
|
||||
'go_back' => 'Gå tillbaka',
|
||||
'forms' => [
|
||||
'editor' => [
|
||||
'write' => 'Write',
|
||||
'preview' => 'Preview',
|
||||
'help' => 'Powered by markdown',
|
||||
'write' => 'Skriv',
|
||||
'preview' => 'Förhandsgranska',
|
||||
'help' => 'Drivs av markdown',
|
||||
],
|
||||
'multiSelect' => [
|
||||
'selectText' => 'Press to select',
|
||||
'loadingText' => 'Loading…',
|
||||
'noResultsText' => 'No results found',
|
||||
'noChoicesText' => 'No choices to choose from',
|
||||
'maxItemText' => 'Cannot add more items',
|
||||
'selectText' => 'Tryck för att välja',
|
||||
'loadingText' => 'Laddar…',
|
||||
'noResultsText' => 'Hittade inga resultat',
|
||||
'noChoicesText' => 'Inga val att välja mellan',
|
||||
'maxItemText' => 'Kan inte lägga till fler objekt',
|
||||
],
|
||||
'upload_file' => 'Upload a file',
|
||||
'remote_url' => 'Remote URL',
|
||||
'upload_file' => 'Ladda upp en fil',
|
||||
'remote_url' => 'Fjärr URL',
|
||||
],
|
||||
'play_episode_button' => [
|
||||
'play' => 'Play',
|
||||
'playing' => 'Playing',
|
||||
'play' => 'Spela',
|
||||
'playing' => 'Spelar',
|
||||
],
|
||||
'size_limit' => 'Size limit: {0}.',
|
||||
'choose_interact' => 'Choose how to interact',
|
||||
'view' => 'View',
|
||||
'size_limit' => 'Storleksgräns: {0}.',
|
||||
'choose_interact' => 'Välj hur du vill interagera',
|
||||
'view' => 'Visa',
|
||||
];
|
||||
|
@ -12,253 +12,253 @@ declare(strict_types=1);
|
||||
|
||||
return [
|
||||
'AD' => 'Andorra',
|
||||
'AE' => 'United Arab Emirates',
|
||||
'AE' => 'Förenade Arabemiraten',
|
||||
'AF' => 'Afghanistan',
|
||||
'AG' => 'Antigua and Barbuda',
|
||||
'AG' => 'Antigua och Barbuda',
|
||||
'AI' => 'Anguilla',
|
||||
'AL' => 'Albania',
|
||||
'AM' => 'Armenia',
|
||||
'AL' => 'Albanien',
|
||||
'AM' => 'Armenien',
|
||||
'AO' => 'Angola',
|
||||
'AQ' => 'Antarctica',
|
||||
'AQ' => 'Antarktis',
|
||||
'AR' => 'Argentina',
|
||||
'AS' => 'American Samoa',
|
||||
'AT' => 'Austria',
|
||||
'AU' => 'Australia',
|
||||
'AS' => 'Amerikanska Samoaöarna',
|
||||
'AT' => 'Österrike',
|
||||
'AU' => 'Australien',
|
||||
'AW' => 'Aruba',
|
||||
'AX' => 'Åland Islands',
|
||||
'AZ' => 'Azerbaijan',
|
||||
'BA' => 'Bosnia and Herzegovina',
|
||||
'AX' => 'Åland',
|
||||
'AZ' => 'Azerbajdzjan',
|
||||
'BA' => 'Bosnien och Hercegovina',
|
||||
'BB' => 'Barbados',
|
||||
'BD' => 'Bangladesh',
|
||||
'BE' => 'Belgium',
|
||||
'BE' => 'Belgien',
|
||||
'BF' => 'Burkina Faso',
|
||||
'BG' => 'Bulgaria',
|
||||
'BG' => 'Bulgarien',
|
||||
'BH' => 'Bahrain',
|
||||
'BI' => 'Burundi',
|
||||
'BJ' => 'Benin',
|
||||
'BL' => 'Saint Barthélemy',
|
||||
'BM' => 'Bermuda',
|
||||
'BN' => 'Brunei Darussalam',
|
||||
'BO' => 'Bolivia, Plurinational State of',
|
||||
'BQ' => 'Bonaire, Sint Eustatius and Saba',
|
||||
'BR' => 'Brazil',
|
||||
'BO' => 'Bolivia',
|
||||
'BQ' => 'Bonaire',
|
||||
'BR' => 'Brasilien',
|
||||
'BS' => 'Bahamas',
|
||||
'BT' => 'Bhutan',
|
||||
'BV' => 'Bouvet Island',
|
||||
'BV' => 'Bouvetön',
|
||||
'BW' => 'Botswana',
|
||||
'BY' => 'Belarus',
|
||||
'BY' => 'Vitryssland',
|
||||
'BZ' => 'Belize',
|
||||
'CA' => 'Canada',
|
||||
'CC' => 'Cocos (Keeling) Islands',
|
||||
'CD' => 'Congo, the Democratic Republic of the',
|
||||
'CF' => 'Central African Republic',
|
||||
'CG' => 'Congo',
|
||||
'CH' => 'Switzerland',
|
||||
'CI' => "Côte d'Ivoire",
|
||||
'CK' => 'Cook Islands',
|
||||
'CA' => 'Kanada',
|
||||
'CC' => 'Kokosöarna',
|
||||
'CD' => 'Kongo, Demokratiska republiken Kongo',
|
||||
'CF' => 'Centralafrikanska republiken',
|
||||
'CG' => 'Kongo',
|
||||
'CH' => 'Schweiz',
|
||||
'CI' => "Elfenbenskusten",
|
||||
'CK' => 'Cooköarna',
|
||||
'CL' => 'Chile',
|
||||
'CM' => 'Cameroon',
|
||||
'CN' => 'China',
|
||||
'CM' => 'Kamerun',
|
||||
'CN' => 'Kina',
|
||||
'CO' => 'Colombia',
|
||||
'CR' => 'Costa Rica',
|
||||
'CU' => 'Cuba',
|
||||
'CV' => 'Cape Verde',
|
||||
'CW' => 'Curaçao',
|
||||
'CX' => 'Christmas Island',
|
||||
'CY' => 'Cyprus',
|
||||
'CZ' => 'Czech Republic',
|
||||
'DE' => 'Germany',
|
||||
'CU' => 'Kuba',
|
||||
'CV' => 'Kap Verde',
|
||||
'CW' => 'Curacao',
|
||||
'CX' => 'Julön',
|
||||
'CY' => 'Cypern',
|
||||
'CZ' => 'Tjeckien',
|
||||
'DE' => 'Tyskland',
|
||||
'DJ' => 'Djibouti',
|
||||
'DK' => 'Denmark',
|
||||
'DK' => 'Danmark',
|
||||
'DM' => 'Dominica',
|
||||
'DO' => 'Dominican Republic',
|
||||
'DZ' => 'Algeria',
|
||||
'DO' => 'Dominikanska republiken',
|
||||
'DZ' => 'Algeriet',
|
||||
'EC' => 'Ecuador',
|
||||
'EE' => 'Estonia',
|
||||
'EG' => 'Egypt',
|
||||
'EH' => 'Western Sahara',
|
||||
'EE' => 'Estland',
|
||||
'EG' => 'Egypten',
|
||||
'EH' => 'Västsahara',
|
||||
'ER' => 'Eritrea',
|
||||
'ES' => 'Spain',
|
||||
'ET' => 'Ethiopia',
|
||||
'ES' => 'Spanien',
|
||||
'ET' => 'Etiopien',
|
||||
'FI' => 'Finland',
|
||||
'FJ' => 'Fiji',
|
||||
'FK' => 'Falkland Islands (Malvinas)',
|
||||
'FM' => 'Micronesia, Federated States of',
|
||||
'FO' => 'Faroe Islands',
|
||||
'FR' => 'France',
|
||||
'FK' => 'Falklandsöarna (Malvinas)',
|
||||
'FM' => 'Mikronesien, Federerade Stater',
|
||||
'FO' => 'Färöarna',
|
||||
'FR' => 'Frankrike',
|
||||
'GA' => 'Gabon',
|
||||
'GB' => 'United Kingdom',
|
||||
'GB' => 'Storbritannien',
|
||||
'GD' => 'Grenada',
|
||||
'GE' => 'Georgia',
|
||||
'GF' => 'French Guiana',
|
||||
'GE' => 'Georgien',
|
||||
'GF' => 'Franska Guyana',
|
||||
'GG' => 'Guernsey',
|
||||
'GH' => 'Ghana',
|
||||
'GI' => 'Gibraltar',
|
||||
'GL' => 'Greenland',
|
||||
'GL' => 'Grönland',
|
||||
'GM' => 'Gambia',
|
||||
'GN' => 'Guinea',
|
||||
'GP' => 'Guadeloupe',
|
||||
'GQ' => 'Equatorial Guinea',
|
||||
'GR' => 'Greece',
|
||||
'GS' => 'South Georgia and the South Sandwich Islands',
|
||||
'GR' => 'Grekland',
|
||||
'GS' => 'Sydgeorgien och Sydsandwichöarna',
|
||||
'GT' => 'Guatemala',
|
||||
'GU' => 'Guam',
|
||||
'GW' => 'Guinea-Bissau',
|
||||
'GY' => 'Guyana',
|
||||
'HK' => 'Hong Kong',
|
||||
'HM' => 'Heard Island and McDonald Islands',
|
||||
'HK' => 'Hongkong',
|
||||
'HM' => 'Heard Island och McDonaldsöarna',
|
||||
'HN' => 'Honduras',
|
||||
'HR' => 'Croatia',
|
||||
'HR' => 'Kroatien',
|
||||
'HT' => 'Haiti',
|
||||
'HU' => 'Hungary',
|
||||
'ID' => 'Indonesia',
|
||||
'IE' => 'Ireland',
|
||||
'HU' => 'Ungern',
|
||||
'ID' => 'Indonesien',
|
||||
'IE' => 'Irland',
|
||||
'IL' => 'Israel',
|
||||
'IM' => 'Isle of Man',
|
||||
'IN' => 'India',
|
||||
'IO' => 'British Indian Ocean Territory',
|
||||
'IQ' => 'Iraq',
|
||||
'IR' => 'Iran, Islamic Republic of',
|
||||
'IS' => 'Iceland',
|
||||
'IT' => 'Italy',
|
||||
'IN' => 'Indien',
|
||||
'IO' => 'Brittiska territoriet i Indiska oceanen',
|
||||
'IQ' => 'Irak',
|
||||
'IR' => 'Iran, Islamiska republiken av',
|
||||
'IS' => 'Island',
|
||||
'IT' => 'Italien',
|
||||
'JE' => 'Jersey',
|
||||
'JM' => 'Jamaica',
|
||||
'JO' => 'Jordan',
|
||||
'JO' => 'Jordanien',
|
||||
'JP' => 'Japan',
|
||||
'KE' => 'Kenya',
|
||||
'KG' => 'Kyrgyzstan',
|
||||
'KH' => 'Cambodia',
|
||||
'KH' => 'Kambodja',
|
||||
'KI' => 'Kiribati',
|
||||
'KM' => 'Comoros',
|
||||
'KN' => 'Saint Kitts and Nevis',
|
||||
'KP' => "Korea, Democratic People's Republic of",
|
||||
'KR' => 'Korea, Republic of',
|
||||
'KM' => 'Komorerna',
|
||||
'KN' => 'Saint Kitts och Nevis',
|
||||
'KP' => "Nordkorea",
|
||||
'KR' => 'Sydkorea',
|
||||
'KW' => 'Kuwait',
|
||||
'KY' => 'Cayman Islands',
|
||||
'KZ' => 'Kazakhstan',
|
||||
'LA' => "Lao People's Democratic Republic",
|
||||
'LB' => 'Lebanon',
|
||||
'LC' => 'Saint Lucia',
|
||||
'KY' => 'Caymanöarna',
|
||||
'KZ' => 'Kazakstan',
|
||||
'LA' => "Laos",
|
||||
'LB' => 'Libanon',
|
||||
'LC' => 'Sankt Lucia',
|
||||
'LI' => 'Liechtenstein',
|
||||
'LK' => 'Sri Lanka',
|
||||
'LR' => 'Liberia',
|
||||
'LR' => 'Liberien',
|
||||
'LS' => 'Lesotho',
|
||||
'LT' => 'Lithuania',
|
||||
'LT' => 'Litauen',
|
||||
'LU' => 'Luxembourg',
|
||||
'LV' => 'Latvia',
|
||||
'LY' => 'Libya',
|
||||
'MA' => 'Morocco',
|
||||
'LV' => 'Lettland',
|
||||
'LY' => 'Libyen',
|
||||
'MA' => 'Marocko',
|
||||
'MC' => 'Monaco',
|
||||
'MD' => 'Moldova, Republic of',
|
||||
'MD' => 'Moldavien',
|
||||
'ME' => 'Montenegro',
|
||||
'MF' => 'Saint Martin (French part)',
|
||||
'MG' => 'Madagascar',
|
||||
'MH' => 'Marshall Islands',
|
||||
'MK' => 'Macedonia, the Former Yugoslav Republic of',
|
||||
'MF' => 'Saint Martin',
|
||||
'MG' => 'Madagaskar',
|
||||
'MH' => 'Marshallöarna',
|
||||
'MK' => 'Makedonien',
|
||||
'ML' => 'Mali',
|
||||
'MM' => 'Myanmar',
|
||||
'MN' => 'Mongolia',
|
||||
'MN' => 'Mongoliet',
|
||||
'MO' => 'Macao',
|
||||
'MP' => 'Northern Mariana Islands',
|
||||
'MP' => 'Nordmarianerna',
|
||||
'MQ' => 'Martinique',
|
||||
'MR' => 'Mauritania',
|
||||
'MS' => 'Montserrat',
|
||||
'MT' => 'Malta',
|
||||
'MU' => 'Mauritius',
|
||||
'MV' => 'Maldives',
|
||||
'MV' => 'Maldiverna',
|
||||
'MW' => 'Malawi',
|
||||
'MX' => 'Mexico',
|
||||
'MX' => 'Mexiko',
|
||||
'MY' => 'Malaysia',
|
||||
'MZ' => 'Mozambique',
|
||||
'N/A' => 'Not Applicable (local IP…)',
|
||||
'MZ' => 'Moçambique',
|
||||
'N/A' => 'Ej tillämplig (lokal IP…)',
|
||||
'NA' => 'Namibia',
|
||||
'NC' => 'New Caledonia',
|
||||
'NC' => 'Nya Kaledonien',
|
||||
'NE' => 'Niger',
|
||||
'NF' => 'Norfolk Island',
|
||||
'NF' => 'Norfolkön',
|
||||
'NG' => 'Nigeria',
|
||||
'NI' => 'Nicaragua',
|
||||
'NL' => 'Netherlands',
|
||||
'NO' => 'Norway',
|
||||
'NL' => 'Nederländerna',
|
||||
'NO' => 'Norge',
|
||||
'NP' => 'Nepal',
|
||||
'NR' => 'Nauru',
|
||||
'NU' => 'Niue',
|
||||
'NZ' => 'New Zealand',
|
||||
'NZ' => 'Nya Zeeland',
|
||||
'OM' => 'Oman',
|
||||
'PA' => 'Panama',
|
||||
'PE' => 'Peru',
|
||||
'PF' => 'French Polynesia',
|
||||
'PG' => 'Papua New Guinea',
|
||||
'PH' => 'Philippines',
|
||||
'PF' => 'Franska Polynesien',
|
||||
'PG' => 'Papua Nya Guinea',
|
||||
'PH' => 'Filippinerna',
|
||||
'PK' => 'Pakistan',
|
||||
'PL' => 'Poland',
|
||||
'PM' => 'Saint Pierre and Miquelon',
|
||||
'PL' => 'Polen',
|
||||
'PM' => 'Saint Pierre och Miquelon',
|
||||
'PN' => 'Pitcairn',
|
||||
'PR' => 'Puerto Rico',
|
||||
'PS' => 'Palestine, State of',
|
||||
'PS' => 'Palestina',
|
||||
'PT' => 'Portugal',
|
||||
'PW' => 'Palau',
|
||||
'PY' => 'Paraguay',
|
||||
'QA' => 'Qatar',
|
||||
'RE' => 'Réunion',
|
||||
'RO' => 'Romania',
|
||||
'RS' => 'Serbia',
|
||||
'RU' => 'Russian Federation',
|
||||
'RO' => 'Rumänien',
|
||||
'RS' => 'Serbien',
|
||||
'RU' => 'Ryssland',
|
||||
'RW' => 'Rwanda',
|
||||
'SA' => 'Saudi Arabia',
|
||||
'SB' => 'Solomon Islands',
|
||||
'SC' => 'Seychelles',
|
||||
'SA' => 'Saudiarabien',
|
||||
'SB' => 'Salomonöarna',
|
||||
'SC' => 'Seychellerna',
|
||||
'SD' => 'Sudan',
|
||||
'SE' => 'Sweden',
|
||||
'SE' => 'Sverige',
|
||||
'SG' => 'Singapore',
|
||||
'SH' => 'Saint Helena, Ascension and Tristan da Cunha',
|
||||
'SI' => 'Slovenia',
|
||||
'SJ' => 'Svalbard and Jan Mayen',
|
||||
'SK' => 'Slovakia',
|
||||
'SH' => 'Sankta Helena, Ascension och Tristan da Cunha',
|
||||
'SI' => 'Slovenien',
|
||||
'SJ' => 'Svalbard',
|
||||
'SK' => 'Slovakien',
|
||||
'SL' => 'Sierra Leone',
|
||||
'SM' => 'San Marino',
|
||||
'SN' => 'Senegal',
|
||||
'SO' => 'Somalia',
|
||||
'SR' => 'Suriname',
|
||||
'SS' => 'South Sudan',
|
||||
'ST' => 'Sao Tome and Principe',
|
||||
'SR' => 'Surinam',
|
||||
'SS' => 'Sydsudan',
|
||||
'ST' => 'Sao Tome och Principe',
|
||||
'SV' => 'El Salvador',
|
||||
'SX' => 'Sint Maarten (Dutch part)',
|
||||
'SY' => 'Syrian Arab Republic',
|
||||
'SX' => 'Sint Maarten (nederländska delen)',
|
||||
'SY' => 'Syrien',
|
||||
'SZ' => 'Swaziland',
|
||||
'TC' => 'Turks and Caicos Islands',
|
||||
'TD' => 'Chad',
|
||||
'TF' => 'French Southern Territories',
|
||||
'TC' => 'Turks- och Caicosöarna',
|
||||
'TD' => 'Tchad',
|
||||
'TF' => 'Franska sydterritorierna',
|
||||
'TG' => 'Togo',
|
||||
'TH' => 'Thailand',
|
||||
'TJ' => 'Tajikistan',
|
||||
'TK' => 'Tokelau',
|
||||
'TL' => 'Timor-Leste',
|
||||
'TK' => 'Tokelauöarna',
|
||||
'TL' => 'Östtimor',
|
||||
'TM' => 'Turkmenistan',
|
||||
'TN' => 'Tunisia',
|
||||
'TN' => 'Tunisien',
|
||||
'TO' => 'Tonga',
|
||||
'TR' => 'Turkey',
|
||||
'TT' => 'Trinidad and Tobago',
|
||||
'TR' => 'Turkiet',
|
||||
'TT' => 'Trinidad och Tobago',
|
||||
'TV' => 'Tuvalu',
|
||||
'TW' => 'Taiwan, Province of China',
|
||||
'TZ' => 'Tanzania, United Republic of',
|
||||
'UA' => 'Ukraine',
|
||||
'TW' => 'Taiwan',
|
||||
'TZ' => 'Tanzania',
|
||||
'UA' => 'Ukraina',
|
||||
'UG' => 'Uganda',
|
||||
'UM' => 'United States Minor Outlying Islands',
|
||||
'US' => 'United States',
|
||||
'UM' => 'Förenta staternas mindre öar i Oceanien och Västindien',
|
||||
'US' => 'USA',
|
||||
'UY' => 'Uruguay',
|
||||
'UZ' => 'Uzbekistan',
|
||||
'VA' => 'Holy See (Vatican City State)',
|
||||
'VC' => 'Saint Vincent and the Grenadines',
|
||||
'VE' => 'Venezuela, Bolivarian Republic of',
|
||||
'VG' => 'Virgin Islands, British',
|
||||
'VI' => 'Virgin Islands, U.S.',
|
||||
'VN' => 'Viet Nam',
|
||||
'VA' => 'Vatikanstaten',
|
||||
'VC' => 'Saint Vincent och Grenadinerna',
|
||||
'VE' => 'Venezuela',
|
||||
'VG' => 'Brittiska Jungfruöarna',
|
||||
'VI' => 'Amerikanska Jungfruöarna.',
|
||||
'VN' => 'Vietnam',
|
||||
'VU' => 'Vanuatu',
|
||||
'WF' => 'Wallis and Futuna',
|
||||
'WF' => 'Wallis- och Futunaöarna',
|
||||
'WS' => 'Samoa',
|
||||
'YE' => 'Yemen',
|
||||
'YE' => 'Jemen',
|
||||
'YT' => 'Mayotte',
|
||||
'ZA' => 'South Africa',
|
||||
'ZA' => 'Sydafrika',
|
||||
'ZM' => 'Zambia',
|
||||
'ZW' => 'Zimbabwe',
|
||||
];
|
||||
|
@ -9,20 +9,20 @@ declare(strict_types=1);
|
||||
*/
|
||||
|
||||
return [
|
||||
'home' => 'Admin dashboard',
|
||||
'welcome_message' => 'Welcome to the admin area!',
|
||||
'home' => 'Admin kontrollpanel',
|
||||
'welcome_message' => 'Välkommen till adminområdet!',
|
||||
'podcasts' => [
|
||||
'title' => 'Podcasts',
|
||||
'not_found' => 'No published podcast',
|
||||
'last_published' => 'Last published on {lastPublicationDate}',
|
||||
'not_found' => 'Ingen publicerad podcast',
|
||||
'last_published' => 'Senast publicerad den {lastPublicationDate}',
|
||||
],
|
||||
'episodes' => [
|
||||
'title' => 'Episodes',
|
||||
'not_found' => 'No published episode',
|
||||
'last_published' => 'Last published on {lastPublicationDate}',
|
||||
'title' => 'Avsnitt',
|
||||
'not_found' => 'Inga publicerade avsnitt',
|
||||
'last_published' => 'Senast publicerad den {lastPublicationDate}',
|
||||
],
|
||||
'storage' => [
|
||||
'title' => 'Storage',
|
||||
'subtitle' => '{totalUploaded} out of {totalStorage}',
|
||||
'title' => 'Lagring',
|
||||
'subtitle' => '{totalUploaded} av {totalStorage}',
|
||||
],
|
||||
];
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user