Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
github.com/jaderebrasil/podcast
Package podcast generates a fully compliant iTunes and RSS 2.0 podcast feed for GoLang using a simple API.
Full documentation with detailed examples located at https://godoc.org/github.com/eduncan911/podcast
To use, go get
and import
the package like your typical GoLang library.
$ go get -u github.com/eduncan911/podcast
import "github.com/eduncan911/podcast"
The API exposes a number of method receivers on structs that implements the logic required to comply with the specifications and ensure a compliant feed. A number of overrides occur to help with iTunes visibility of your episodes.
Notably, the Podcast.AddItem(i Item) function performs most of the heavy lifting by taking the Item input and performing validation, overrides and duplicate setters through the feed.
See the detailed Examples of the API at https://godoc.org/github.com/eduncan911/podcast.
In no way are you restricted in having full control over your feeds. You may choose to skip the API methods and instead use the structs directly. The fields have been grouped by RSS 2.0 and iTunes fields.
iTunes specific fields are all prefixed with the letter I
.
RSS 2.0: https://cyber.harvard.edu/rss/rss.html
Podcasts: https://help.apple.com/itc/podcasts_connect/#/itca5b22233
1.3.0
1.2.1
1.2.0
1.1.0
1.0.0
author.go doc.go enclosure.go image.go item.go itunes.go podcast.go textinput.go
type Author struct {
XMLName xml.Name `xml:"itunes:owner"`
Name string `xml:"itunes:name"`
Email string `xml:"itunes:email"`
}
Author represents a named author and email.
For iTunes compliance, both Name and Email are required.
type Enclosure struct {
XMLName xml.Name `xml:"enclosure"`
// URL is the downloadable url for the content. (Required)
URL string `xml:"url,attr"`
// Length is the size in Bytes of the download. (Required)
Length int64 `xml:"-"`
// LengthFormatted is the size in Bytes of the download. (Required)
//
// This field gets overwritten with the API when setting Length.
LengthFormatted string `xml:"length,attr"`
// Type is MIME type encoding of the download. (Required)
Type EnclosureType `xml:"-"`
// TypeFormatted is MIME type encoding of the download. (Required)
//
// This field gets overwritten with the API when setting Type.
TypeFormatted string `xml:"type,attr"`
}
Enclosure represents a download enclosure.
type EnclosureType int
EnclosureType specifies the type of the enclosure.
const (
M4A EnclosureType = iota
M4V
MP4
MP3
MOV
PDF
EPUB
)
EnclosureType specifies the type of the enclosure.
func (et EnclosureType) String() string
String returns the MIME type encoding of the specified EnclosureType.
type ICategory struct {
XMLName xml.Name `xml:"itunes:category"`
Text string `xml:"text,attr"`
ICategories []*ICategory
}
ICategory is a 2-tier classification system for iTunes.
type IImage struct {
XMLName xml.Name `xml:"itunes:image"`
HREF string `xml:"href,attr"`
}
IImage represents an iTunes image.
Podcast feeds contain artwork that is a minimum size of 1400 x 1400 pixels and a maximum size of 3000 x 3000 pixels, 72 dpi, in JPEG or PNG format with appropriate file extensions (.jpg, .png), and in the RGB colorspace. To optimize images for mobile devices, Apple recommends compressing your image files.
type ISummary struct {
XMLName xml.Name `xml:"itunes:summary"`
Text string `xml:",cdata"`
}
ISummary is a 4000 character rich-text field for the itunes:summary tag.
This is rendered as CDATA which allows for HTML tags such as .
type Image struct {
XMLName xml.Name `xml:"image"`
// TODO: is it URL or Link? which is it?
URL string `xml:"url"`
Title string `xml:"title,omitempty"`
Link string `xml:"link,omitempty"`
Width int `xml:"width,omitempty"`
Height int `xml:"height,omitempty"`
}
Image represents an image.
Podcast feeds contain artwork that is a minimum size of 1400 x 1400 pixels and a maximum size of 3000 x 3000 pixels, 72 dpi, in JPEG or PNG format with appropriate file extensions (.jpg, .png), and in the RGB colorspace. To optimize images for mobile devices, Apple recommends compressing your image files.
type Item struct {
XMLName xml.Name `xml:"item"`
GUID string `xml:"guid"`
Title string `xml:"title"`
Link string `xml:"link"`
Description string `xml:"description"`
Author *Author `xml:"-"`
AuthorFormatted string `xml:"author,omitempty"`
Category string `xml:"category,omitempty"`
Comments string `xml:"comments,omitempty"`
Source string `xml:"source,omitempty"`
PubDate *time.Time `xml:"-"`
PubDateFormatted string `xml:"pubDate,omitempty"`
Enclosure *Enclosure
// https://help.apple.com/itc/podcasts_connect/#/itcb54353390
IAuthor string `xml:"itunes:author,omitempty"`
ISubtitle string `xml:"itunes:subtitle,omitempty"`
ISummary *ISummary
IImage *IImage
IDuration string `xml:"itunes:duration,omitempty"`
IExplicit string `xml:"itunes:explicit,omitempty"`
IIsClosedCaptioned string `xml:"itunes:isClosedCaptioned,omitempty"`
IOrder string `xml:"itunes:order,omitempty"`
}
Item represents a single entry in a podcast.
Article minimal requirements are:
Audio minimal requirements are:
Recommendations:
func (i *Item) AddDuration(durationInSeconds int64)
AddDuration adds the duration to the iTunes duration field.
func (i *Item) AddEnclosure(
url string, enclosureType EnclosureType, lengthInBytes int64)
AddEnclosure adds the downloadable asset to the podcast Item.
func (i *Item) AddImage(url string)
AddImage adds the image as an iTunes-only IImage. RSS 2.0 does not have the specification of Images at the Item level.
Podcast feeds contain artwork that is a minimum size of 1400 x 1400 pixels and a maximum size of 3000 x 3000 pixels, 72 dpi, in JPEG or PNG format with appropriate file extensions (.jpg, .png), and in the RGB colorspace. To optimize images for mobile devices, Apple recommends compressing your image files.
func (i *Item) AddPubDate(datetime *time.Time)
AddPubDate adds the datetime as a parsed PubDate.
UTC time is used by default.
func (i *Item) AddSummary(summary string)
AddSummary adds the iTunes summary.
Limit: 4000 characters
Note that this field is a CDATA encoded field which allows for rich text such as html links: <a href="http://www.apple.com">Apple.
type Podcast struct {
XMLName xml.Name `xml:"channel"`
Title string `xml:"title"`
Link string `xml:"link"`
Description string `xml:"description"`
Category string `xml:"category,omitempty"`
Cloud string `xml:"cloud,omitempty"`
Copyright string `xml:"copyright,omitempty"`
Docs string `xml:"docs,omitempty"`
Generator string `xml:"generator,omitempty"`
Language string `xml:"language,omitempty"`
LastBuildDate string `xml:"lastBuildDate,omitempty"`
ManagingEditor string `xml:"managingEditor,omitempty"`
PubDate string `xml:"pubDate,omitempty"`
Rating string `xml:"rating,omitempty"`
SkipHours string `xml:"skipHours,omitempty"`
SkipDays string `xml:"skipDays,omitempty"`
TTL int `xml:"ttl,omitempty"`
WebMaster string `xml:"webMaster,omitempty"`
Image *Image
TextInput *TextInput
// https://help.apple.com/itc/podcasts_connect/#/itcb54353390
IAuthor string `xml:"itunes:author,omitempty"`
ISubtitle string `xml:"itunes:subtitle,omitempty"`
ISummary *ISummary
IBlock string `xml:"itunes:block,omitempty"`
IImage *IImage
IDuration string `xml:"itunes:duration,omitempty"`
IExplicit string `xml:"itunes:explicit,omitempty"`
IComplete string `xml:"itunes:complete,omitempty"`
INewFeedURL string `xml:"itunes:new-feed-url,omitempty"`
IOwner *Author // Author is formatted for itunes as-is
ICategories []*ICategory
Items []*Item
// contains filtered or unexported fields
}
Podcast represents a podcast.
func New(title, link, description string,
pubDate, lastBuildDate *time.Time) Podcast
New instantiates a Podcast with required parameters.
Nil-able fields are optional but recommended as they are formatted to the expected proper formats.
func (p *Podcast) AddAuthor(name, email string)
AddAuthor adds the specified Author to the podcast.
func (p *Podcast) AddCategory(category string, subCategories []string)
AddCategory adds the categories to the Podcast in comma delimited format.
subCategories are optional.
func (p *Podcast) AddImage(url string)
AddImage adds the specified Image to the Podcast.
Podcast feeds contain artwork that is a minimum size of 1400 x 1400 pixels and a maximum size of 3000 x 3000 pixels, 72 dpi, in JPEG or PNG format with appropriate file extensions (.jpg, .png), and in the RGB colorspace. To optimize images for mobile devices, Apple recommends compressing your image files.
func (p *Podcast) AddItem(i Item) (int, error)
AddItem adds the podcast episode. It returns a count of Items added or any errors in validation that may have occurred.
This method takes the "itunes overrides" approach to populating itunes tags according to the overrides rules in the specification. This not only complies completely with iTunes parsing rules; but, it also displays what is possible to be set on an individual episode level - if you wish to have more fine grain control over your content.
This method imposes strict validation of the Item being added to confirm to Podcast and iTunes specifications.
Article minimal requirements are:
Audio, Video and Downloads minimal requirements are:
The following fields are always overwritten (don't set them):
Recommendations:
Just set the minimal fields: the rest get set for you.
Always set an Enclosure.Length, to be nice to your downloaders.
Follow Apple's best practices to enrich your podcasts:
For specifications of itunes tags, see:
func (p *Podcast) AddLastBuildDate(datetime *time.Time)
AddLastBuildDate adds the datetime as a parsed PubDate.
UTC time is used by default.
func (p *Podcast) AddPubDate(datetime *time.Time)
AddPubDate adds the datetime as a parsed PubDate.
UTC time is used by default.
func (p *Podcast) AddSubTitle(subTitle string)
AddSubTitle adds the iTunes subtitle that is displayed with the title in iTunes.
Note that this field should be just a few words long according to Apple. This method will truncate the string to 64 chars if too long with "..."
func (p *Podcast) AddSummary(summary string)
AddSummary adds the iTunes summary.
Limit: 4000 characters
Note that this field is a CDATA encoded field which allows for rich text such as html links: <a href="http://www.apple.com">Apple.
func (p *Podcast) Bytes() []byte
Bytes returns an encoded []byte slice.
func (p *Podcast) Encode(w io.Writer) error
Encode writes the bytes to the io.Writer stream in RSS 2.0 specification.
func (p *Podcast) String() string
String encodes the Podcast state to a string.
type TextInput struct {
XMLName xml.Name `xml:"textInput"`
Title string `xml:"title"`
Description string `xml:"description"`
Name string `xml:"name"`
Link string `xml:"link"`
}
TextInput represents text inputs.
Generated by godoc2ghmd
FAQs
Unknown package
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.