A headless CMS solution built with Strapi for managing RSS podcast feeds, including episodes, MP3 files, covers, and private access controls.
- Podcast Management: Create, update, and delete podcast feeds.
- Episode Management: Add, edit, and organize episodes with MP3 file uploads.
- Media Management: Built-in file handling for MP3 and image files.
- Cover Art Handling: Easily upload and manage cover images for your podcasts.
- Private Podcasts: Restrict access to specific users or user groups.
- User Authentication: Secure user authentication system for managing private content.
- API Integration: Expose endpoints for easy integration with any frontend application.
Private Feeds
- {{host}}/api/feeds/slug/:slug/token/:token
- {{host}}/api/feeds/documentId/:documentId/token/:token
Public Feeds
- {{host}}/api/feeds/slug/:slug
- {{host}}/api/feeds/documentId/:documentId
- {{host}}/api/feeds/public
User Management
Authorization: Bearer {{jwt}}
- {{host}}/api/auth/local/register
{ "email": "[email protected]", "username": "[email protected]", "password": "some-password" }
- {{host}}/api/users/me
- Read Self
- {{host}}/api/auth/local
- Login
{ "identifier": "[email protected]", "password": "some-password" }
- Login
- {{host}}/api/users/{{userId}}/newToken
- Generate a new token for yourself
Podcast Manager uses Postgres
CREATE DATABASE podcastmanager;
CREATE ROLE podcastmanager_user WITH LOGIN PASSWORD 'changeme' CREATEDB;
\du
-> display infoGRANT ALL PRIVILEGES ON DATABASE podcastmanager TO podcastmanager_user;
ALTER USER podcastmanager_user WITH SUPERUSER;
Podcast Manager saves uploaded MP3 files and Cover Images to AWS S3 via Strapi S3 Plugin.
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::podcast-manager/*"
}
]
}
Bucket CORS
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"http://localhost:1337",
"127.0.0.1",
"https://podcastmanager.lucanerlich.com"
],
"ExposeHeaders": []
}
]