Documentation ¶
Overview ¶
Package app handles the routes and views for the Defacto2 website.
Index ¶
- Constants
- Variables
- func Artifact404(c echo.Context, id string) error
- func Artifacts(c echo.Context, db *sql.DB, uri, page string) error
- func Artifacts404(c echo.Context, uri string) error
- func Artist(c echo.Context, db *sql.DB) error
- func Attribute(write, code, art, music, name string) string
- func BBS(c echo.Context, db *sql.DB) error
- func BBSAZ(c echo.Context, db *sql.DB) error
- func BBSYear(c echo.Context, db *sql.DB) error
- func BadRequestErr(c echo.Context, uri string, err error) error
- func Brief(platform, section any) string
- func ByteFile(cnt, bytes any) template.HTML
- func ByteFileS(name string, count, bytes any) template.HTML
- func Categories(c echo.Context, db *sql.DB, logger *zap.SugaredLogger, stats bool) error
- func Checksum(c echo.Context, db *sql.DB, id string) error
- func Coder(c echo.Context, db *sql.DB) error
- func Configurations(cx echo.Context, db *sql.DB, conf config.Config) error
- func DatabaseErr(c echo.Context, uri string, err error) error
- func Day(d any) string
- func Deletions(c echo.Context, db *sql.DB, page string) error
- func Describe(platform, section, year, month any) template.HTML
- func Download(c echo.Context, db *sql.DB, logger *zap.SugaredLogger, path string) error
- func DownloadErr(c echo.Context, uri string, err error) error
- func DownloadJsDos(c echo.Context, db *sql.DB, extraPath, downloadPath string) error
- func FTP(c echo.Context, db *sql.DB) error
- func FileMissingErr(c echo.Context, uri string, err error) error
- func ForApproval(c echo.Context, db *sql.DB, page string) error
- func ForbiddenErr(c echo.Context, uri string, err error) error
- func GetDemozoo(c echo.Context, db *sql.DB, demozooID int, defacto2UNID, downloadDir string) error
- func GetDemozooParam(c echo.Context, db *sql.DB, downloadDir string) error
- func GetPouet(c echo.Context, db *sql.DB, pouetID int, defacto2UNID, downloadDir string) error
- func GlobTo(name string) string
- func GoogleCallback(c echo.Context, clientID string, maxAge int, accounts ...[48]byte) error
- func History(c echo.Context) error
- func Index(c echo.Context) error
- func Inline(c echo.Context, db *sql.DB, logger *zap.SugaredLogger, path string) error
- func InternalErr(c echo.Context, uri string, err error) error
- func Interview(c echo.Context) error
- func LastUpdated(t any) string
- func LinkDownload(id any, uri string) template.HTML
- func LinkHref(id any) (string, error)
- func LinkInterview(href string) template.HTML
- func LinkPage(id any) template.HTML
- func LinkPreview(id any, name, platform string) template.HTML
- func LinkPreviews(youtube, demozoo, pouet, colors16, github, rels, sites string) []string
- func LinkReleasers(performant, magazine bool, a, b any) template.HTML
- func LinkRels(magazine bool, a, b any) template.HTML
- func LinkRelsPerformant(a, b any) template.HTML
- func LinkRemote(href, name string) template.HTML
- func LinkRunApp(id any) template.HTML
- func LinkScnr(name string) (string, error)
- func LinkWiki(uri, name string) template.HTML
- func LogoText(s string) string
- func Magazine(c echo.Context, db *sql.DB) error
- func MagazineAZ(c echo.Context, db *sql.DB) error
- func Month(m any) string
- func Musician(c echo.Context, db *sql.DB) error
- func New(c echo.Context) error
- func Page404(c echo.Context, uri, page string) error
- func PlatformEdit(c echo.Context, db *sql.DB) error
- func PlatformTagInfo(c echo.Context) error
- func PostDesc(c echo.Context, db *sql.DB, input string) error
- func PostFilename(c echo.Context, db *sql.DB) error
- func PostName(c echo.Context, db *sql.DB, mode FileSearch) error
- func PouetCache(c echo.Context, data string) error
- func Prefix(s string) string
- func ProdPouet(c echo.Context, id string) error
- func ProdZoo(c echo.Context, id string) error
- func RecordRels(a, b any) string
- func Releaser(c echo.Context, db *sql.DB) error
- func Releaser404(c echo.Context, invalidID string) error
- func ReleaserAZ(c echo.Context, db *sql.DB) error
- func ReleaserYear(c echo.Context, db *sql.DB) error
- func Releasers(c echo.Context, db *sql.DB, logger *zap.SugaredLogger, uri string) error
- func SafeHTML(s string) template.HTML
- func SafeJS(s string) template.JS
- func Scener(c echo.Context, db *sql.DB) error
- func Scener404(c echo.Context, id string) error
- func Sceners(c echo.Context, db *sql.DB, uri string) error
- func SearchDesc(c echo.Context) error
- func SearchFile(c echo.Context) error
- func SearchID(c echo.Context) error
- func SearchReleaser(c echo.Context) error
- func SignOut(c echo.Context) error
- func SignedOut(c echo.Context) error
- func Signin(c echo.Context, clientID, nonce string) error
- func StatusErr(c echo.Context, code int, uri string) error
- func SubTitle(section null.String, s any) template.HTML
- func TagBrief(tag string) string
- func TagEdit(c echo.Context, db *sql.DB) error
- func TagInfo(c echo.Context) error
- func TagOption(selected, value any) template.HTML
- func TagWithOS(os, tag string) string
- func Thanks(c echo.Context) error
- func TheScene(c echo.Context) error
- func TrimSiteSuffix(s string) string
- func TrimSpace(a any) string
- func URLEncode(a any) string
- func Unwanted(c echo.Context, db *sql.DB, page string) error
- func VotePouet(c echo.Context, logger *zap.SugaredLogger, id string) error
- func Website(c echo.Context, open string) error
- func WebsiteIcon(url string) template.HTML
- func Writer(c echo.Context, db *sql.DB) error
- func YMDEdit(c echo.Context, db *sql.DB) error
- type Accordion
- type Asset
- type Cache
- type Dirs
- type FileSearch
- type Font
- type Fonts
- type Form
- type Group
- type Groups
- type Interviewee
- type Interviews
- type Links
- type Milestone
- type Milestones
- type Pagination
- type Paths
- type Picture
- type SRI
- type Site
- type Sites
- type Templ
Constants ¶
const ( // Welcome is the default logo monospace text, // each side contains 20 whitespace characters. // The welcome to defacto2 text is 19 characters long. // The letter 'O' of TO is the center of the text. Welcome = `: ` + `·· WELCOME TO DEFACTO2 ··` + ` ·` )
Variables ¶
var ( ErrClaims = errors.New("no sub id in the claims playload") ErrCode = errors.New("the http status code is not valid") ErrCxt = errors.New("the server could not create a context") ErrData = errors.New("cache data is invalid or corrupt") ErrDB = errors.New("database connection is nil") ErrExtract = errors.New("unknown extractor value") ErrLinkType = errors.New("the id value is an invalid type") ErrMisMatch = errors.New("token mismatch") ErrNegative = errors.New("value cannot be a negative number") ErrSession = errors.New("no sub id in session") ErrTarget = errors.New("target not found") ErrTmpl = errors.New("the server could not render the html template for this page") ErrUser = errors.New("unknown user") ErrVal = errors.New("value is empty") ErrZap = errors.New("the zap logger cannot be nil") )
var Caching = Cache{} //nolint:gochecknoglobals
Caching are values that are used throughout the app or layouts.
Functions ¶
func Artifact404 ¶
Artifact404 renders the error page for the artifact links.
func Artifacts ¶
Artifacts is the handler for the list and preview of the files page. The uri is the category or collection of files to display. The page is the page number of the results to display.
func Artifacts404 ¶
Artifacts404 renders the files error page for the Artifacts menu and categories. It provides different error messages to the standard error page.
func BadRequestErr ¶
BadRequestErr is the handler for handling Bad Request Errors, caused by invalid user input or a malformed client requests.
func Brief ¶
Brief returns a human readable brief description of a release. Based on the platform, section, year and month.
func ByteFileS ¶
ByteFileS returns a human readable string of the byte count with a named description.
func Categories ¶
Categories is the handler for the artifact categories page.
func Configurations ¶ added in v0.8.0
Configurations is the handler for the Configuration page.
func DatabaseErr ¶
DatabaseErr is the handler for database connection issues. A HTTP 503 Service Unavailable error is returned, to reflect the database connection issue but where the server is still running and usable for the client.
func Describe ¶
Describe returns a human readable description of a release. Based on the platform, section, year and month.
func DownloadErr ¶
DownloadErr is the handler for missing download files and database ID errors.
func DownloadJsDos ¶ added in v0.9.0
DownloadJsDos is the handler for the js-dos emulator to download zip files that are then mounted as a C: hard drive in the emulation. js-dos only supports common zip compression methods, so this func first attempts to offer a re-archived zip file found in the extra directory, and only if that fails does it offer the original download file.
func FileMissingErr ¶
FileMissingErr is the handler for missing download files and database ID errors.
func ForApproval ¶
ForApproval is the handler for the list and preview of the files page. The uri is the category or collection of files to display. The page is the page number of the results to display.
func ForbiddenErr ¶
ForbiddenErr is the handler for handling Forbidden Errors, caused by clients requesting pages that they do not have permission to access.
func GetDemozoo ¶ added in v0.10.0
GetDemozoo fetches the download link from Demozoo and saves it to the download directory. It then runs Update to modify the database record with various metadata from the file and Demozoo record API data.
This function is a wrapper for the remote.DemozooLink.Download method.
func GetDemozooParam ¶ added in v0.10.0
GetDemozooParam fetches the multiple download_links values from the Demozoo production API and attempts to download and save one of the linked files. If multiple links are found, the first link is used as they should all point to the same asset.
Both the Demozoo production ID param and the Defacto2 UUID query param values are required as params to fetch the production data and to save the file to the correct filename.
func GetPouet ¶ added in v0.10.0
GetPouet fetches the download link from Pouet and saves it to the download directory. It then runs Update to modify the database record with various metadata from the file and Pouet record API data.
This function is a wrapper for the remote.PouetLink.Download method.
func GoogleCallback ¶
GoogleCallback is the handler for the Google OAuth2 callback page to verify the Google ID token.
func InternalErr ¶
InternalErr is the handler for handling Internal Server Errors, caused by programming bugs or crashes. The uri string is the part of the URL that caused the error. The optional error value is logged using the zap sugared logger. If the echo context is nil then a user hostile, fallback error in raw text is returned.
func Interview ¶
func Interview(c echo.Context) error
Interview is the handler for the People Interviews page.
func LastUpdated ¶
LastUpdated returns a string of the time since the given time t. The time is formatted as "Last updated 1 hour ago". If the time is not valid, an empty string is returned.
func LinkDownload ¶
LinkDownload creates a URL to link to the file download of the record.
func LinkInterview ¶
LinkInterview returns a SVG arrow icon to indicate an interview link hosted on an external website.
func LinkPreview ¶
LinkPreview creates a URL to link to the file record in tab, to use as a preview. The preview link will only show with compatible file types based on their extension.
func LinkPreviews ¶
LinkPreviews returns a slice of HTML formatted links for the artifact editor.
func LinkReleasers ¶ added in v0.10.0
LinkBothReleasers returns the groups associated with a release and a link to each group. The performant flag will use the group name instead of the much slower group slug formatter.
func LinkRelsPerformant ¶ added in v0.10.0
LinkRelsPerformant returns the groups associated with a release and a link to each group. It is a faster version of LinkRelrs and should be used with the templates that have large lists of group names.
func LinkRemote ¶
LinkRemote returns a HTML link with an embedded SVG icon to an external website.
func LinkRunApp ¶ added in v0.10.0
LinkRunApp creates a URL anchor element to link to the artifact page to launch the js-dos emulator.
func LinkWiki ¶
LinkWiki returns a HTML link with an embedded SVG icon to the Defacto2 wiki on GitHub.
func MagazineAZ ¶
MagazineAZ is the handler for the Magazine page ordered chronologically.
func New ¶ added in v0.10.0
func New(c echo.Context) error
New is the handler for the what is new page.
func Page404 ¶
Page404 renders the files page error page for the Artifacts menu and categories. It provides different error messages to the standard error page.
func PlatformEdit ¶
PlatformEdit handles the post submission for the Platform selection field.
func PlatformTagInfo ¶
func PlatformTagInfo(c echo.Context) error
PlatformTagInfo handles the POST submission for the platform and tag info.
func PostFilename ¶
PostFilename is the handler for the Search for filenames form post page.
func PostName ¶
func PostName(c echo.Context, db *sql.DB, mode FileSearch) error
PostName is the handler for the Search for filenames form post page.
func PouetCache ¶
PouetCache parses the cached data for the Pouet production votes. If the cache is valid it is returned as JSON response. If the cache is invalid or corrupt an error will be returned and a API request should be made to Pouet.
func RecordRels ¶
RecordRels returns the groups associated with a release and joins them with a plus sign.
func Releaser404 ¶
Releaser404 renders the files error page for the Groups menu and invalid releasers.
func ReleaserAZ ¶
ReleaserAZ is the handler for the releaser page ordered alphabetically.
func ReleaserYear ¶
ReleaserYear is the handler for the releaser page ordered by year of the first release.
func SafeHTML ¶
SafeHTML returns a string as a template.HTML type. This is intended to be used to prevent HTML escaping.
func SafeJS ¶
SafeJS returns a string as a template.JS type. This is intended to be used to prevent JS escaping.
func SearchDesc ¶
func SearchDesc(c echo.Context) error
SearchDesc is the handler for the Search for file descriptions page.
func SearchFile ¶
func SearchFile(c echo.Context) error
SearchFile is the handler for the Search for files page.
func SearchID ¶ added in v0.8.0
func SearchID(c echo.Context) error
SearchID is the handler for the Record by ID Search page.
func SearchReleaser ¶
func SearchReleaser(c echo.Context) error
SearchReleaser is the handler for the Releaser Search page.
func SignOut ¶
func SignOut(c echo.Context) error
SignOut is the handler for the Sign out of Defacto2 page.
func SignedOut ¶
func SignedOut(c echo.Context) error
SignedOut is the handler to sign out and remove the current session.
func StatusErr ¶
StatusErr is the handler for the HTTP status pages such as the 404 - not found. If the zap logger is nil then the error page is returned but no error is logged. If the echo context is nil then a user hostile, fallback error in raw text is returned.
func TagInfo ¶
func TagInfo(c echo.Context) error
TagInfo handles the POST submission for the platform and tag info.
func TagOption ¶
TagOption returns a HTML option tag with the selected attribute if the selected matches the value.
func TrimSiteSuffix ¶
TrimSiteSuffix returns a string with the last 4 characters removed if they are " FTP" or " BBS".
func URLEncode ¶ added in v0.10.0
URLEncode returns a URL encoded string from the given string. This can be used to pass filenames as URL parameters.
func VotePouet ¶
func VotePouet(c echo.Context, logger *zap.SugaredLogger, id string) error
VotePouet is the handler for the Pouet production votes JSON page.
func Website ¶
Website is the handler for the websites page. Open is the ID of the accordion section to open.
func WebsiteIcon ¶
websiteIcon returns a Bootstrap icon name for the given website url.
Types ¶
type Accordion ¶
type Accordion = []struct { Name string // Name of the category. Title string // Title tab for the category. ID string // ID of the category. Sites Sites // Sites are the websites shown in the category. Open bool // Whether the category is displayed or closed. }
Accordion is a collection of websites grouped by a category.
type Asset ¶
type Asset int
Asset is a relative path to a public facing CSS, JS or WASM file.
const ( Bootstrap5 Asset = iota // Bootstrap is the path to the minified Bootstrap 5.3 CSS file. Bootstrap5JS // BootstrapJS is the path to the minified Bootstrap 5.3 JS file. BootstrapIcons // BootstrapIcons is the path to the custom Bootstrap Icons SVG sprites file. DosboxJS // DosboxJS is the js-dos v6 default variant compiled with emscripten. DosboxWasm // DosboxWasm is the js-dos v6 WASM binary file. EditArtifact // EditArtifact is the path to the minified Artifact Editor JS file. EditAssets // EditAssets is the path to the minified Editor assets JS file. EditForApproval // EditForApproval is the path to the minified Editor for-approval JS file. Htmx // Htmx is the path to the minified htmx AJAX JS file. HtmxRespTargets // Htmx is the path to the minified response targets extension file. Jsdos6JS // Jsdos6JS is the path to the minified js-dos v6 JS file. Layout // Layout is the path to the minified layout CSS file. LayoutJS // LayoutJS is the path to the minified layout JS file. Pouet // Pouet is the path to the minified Pouet JS file. Readme // Readme is the path to the minified Readme JS file. Uploader // Uploader is the path to the minified Uploader JS file. )
type Cache ¶
type Cache struct {
RecordCount int // The total number of file records in the database.
}
Cache contains database values that are used throughout the app or layouts.
type Dirs ¶
type Dirs struct { Download string // path to the artifact download directory Preview string // path to the preview and screenshot directory Thumbnail string // path to the file thumbnail directory Extra string // path to the extra files directory URI string // the URI of the file record }
Dirs contains the directories used by the artifact pages.
func (Dirs) Artifact ¶
func (dir Dirs) Artifact(c echo.Context, db *sql.DB, logger *zap.SugaredLogger, readonly bool) error
Artifact is the handler for the of the file record.
type FileSearch ¶
type FileSearch int
FileSearch is the type of search to perform.
const ( Filenames FileSearch = iota // Filenames is the search for filenames. Descriptions // Descriptions is the search for file descriptions and titles. )
type Font ¶
type Font int
Font is a relative path to a public facing font file.
const ( VGA8 Font = iota // VGA8 is the path to the IBM VGA 8px font file. VGA8Woff // VGA8Woff is the path to the IBM VGA 8px legacy WOFF format font file. VGA8TT // VGA8TT is the path to the IBM VGA 8px legacy TrueType format font file. A1200 // A1200 is the path to the Topaz Plus font file. A1200Woff // A1200Woff is the path to the Topaz Plus legacy WOFF format font file. A1200TT // A1200TT is the path to the Topaz Plus legacy TrueType format font file. CascadiaMono // CascadiaMono is the path to the Cascadia Mono font file. CascadiaMonoWoff // CascadiaMonoWoff is the path to the Cascadia Mono WOFF format font file. CascadiaMonoTT // CascadiaMonoTT is the path to the Cascadia Mono TrueType format font file. )
type Fonts ¶
Fonts are a map of the public facing font files.
type Form ¶
type Form struct { Target string `query:"target"` // Target is the name of the file to extract from the zip archive. Value string `query:"value"` // Value is the value of the form input field to change. Platform string `query:"platform"` // Platform is the platform of the release. Tag string `query:"tag"` // Tag is the tag of the release. ID int `query:"id"` // ID is the auto incrementing database id of the record. Year int16 `query:"year"` // Year is the year of the release. Month int16 `query:"month"` // Month is the month of the release. Day int16 `query:"day"` // Day is the day of the release. Online bool `query:"online"` // Online is the record online and public toggle. Readme bool `query:"readme"` // Readme hides the readme textfile from the artifact page. }
Form is the form data for the editor.
type Group ¶
type Group struct { Name string // Name is the name of the group. Link string // Link is a local URL to the group. Interviews Interviews // Interviews is a list of interviews with members of the group. }
Group is a collection of interviews with members of a group.
type Groups ¶
type Groups []Group
Groups is a collection of group interviews.
func Interviewees ¶
func Interviewees() Groups
Interviewees returns a list of interviewees and their interviews. These are categorized by the group they were in at the time of the interview.
type Interviewee ¶
type Interviewee struct { Scener string // Scener is the name of the person interviewed. Content string // Content is a short description of the interview. Link string // Link is the URL to the interview. Year int // Year is the year the interview was conducted. Month int // Month is the month the interview was conducted. }
Interviewee is a person who was interviewed with a link to the interview.
type Links ¶
type Links []struct { LinkTitle string // LinkTitle is the title of the Link. SubTitle string // SublTitle is the title of the Link in a smaller font and in brackets. Link string // Link is the URL to an article about the milestone or the product. Forward string // Forward is an optional name of a group that is prefixed before the link to indicate a merger. }
Links is a collection of Links.
type Milestone ¶
type Milestone struct { Picture Picture // Picture is an image or screenshot for a milestone. Prefix string // Prefix replacement for the month, such as 'Early', 'Mid' or 'Late'. Title string // Title of the milestone should be the accomplishment. Lead string // Lead paragraph, is optional and should usually be the product. Content string // Content is the main body of the milestone and can be HTML. Link string // Link is the URL to an article about the milestone or the product. LinkTitle string // LinkTitle is the title of the Link. List Links // Links is a collection of links that are displayed as a HTML list. Year int // Year of the milestone. Month int // Month of the milestone. Day int // Day of the milestone. Highlight bool // Highlight is a flag to outline the milestone. }
Milestone is an accomplishment for a year and optional month.
type Pagination ¶
type Pagination struct { BaseURL string // BaseURL is the base URL for the pagination links. CurrPage int // CurrPage is the current page number. SumPages int // SumPages is the total number of pages. PrevPage int // PrevPage is the previous page number. NextPage int // NextPage is the next page number. TwoBelow int // TwoBelow is the page number two below the current page. TwoAfter int // TwoAfter is the page number two after the current page. RangeStep int // RangeStep is the number of pages to skip in the pagination range. }
type Paths ¶
Paths are a map of the public facing CSS, JS and WASM files.
type Picture ¶
type Picture struct { Title string // Title of the picture. Alt string // Alt is the alternative text for the picture. Attribution string // attribution is the name of the author of the picture. License string // License is the license of the picture. LicenseLink string // LicenseLink is the URL to the license of the picture. Webp string // Webp is the filename of the WebP screenshot. Png string // Png is the filename of the PNG screenshot. Jpg string // Jpg is the filename of the JPG photo. Avif string // Avif is the filename of the AVIF photo. }
Picture is an image or screenshot for a milestone.
type SRI ¶
type SRI struct { Bootstrap5 string // Bootstrap CSS verification hash. Bootstrap5JS string // Bootstrap JS verification hash. BootstrapIcons string // Bootstrap Icons SVG verification hash. EditArtifact string // Artifact Editor JS verification hash. EditAssets string // Editor Assets JS verification hash. EditForApproval string // Editor For Approval JS verification hash. Jsdos6JS string // js-dos v6 verification hash. DosboxJS string // DOSBox Emscripten verification hash. Layout string // Layout CSS verification hash. LayoutJS string // Layout JS verification hash. Pouet string // Pouet JS verification hash. Readme string // Readme JS verification hash. Uploader string // Uploader JS verification hash. Htmx string // htmx JS verification hash. HtmxRespTargets string // htmx response targets extension JS verification hash. }
SRI are the Subresource Integrity hashes for the layout.
type Site ¶
type Site struct { Title string // Title of the website. URL string // URL of the website, including the HTTP or HTTPS protocol. Info string // A short description of the website. }
Site is a website.
type Templ ¶
type Templ struct { Public embed.FS // Public facing files. View embed.FS // Views are Go templates. Subresource SRI // SRI are the Subresource Integrity hashes for the layout. Version string // Version is the current version of the app. Brand []byte // Brand contains to the Defacto2 ASCII logo. Environment config.Config // Environment configurations from the host system environment. RecordCount int // RecordCount is the total number of records in the database. }
Templ is the configuration and status of the web application templates.
func (Templ) Elements ¶ added in v0.10.0
Elements returns a map of functions that return HTML elements.
func (Templ) FuncClosures ¶ added in v0.10.0
FuncClosures returns a map of closures that return converted type or modified strings.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
exts
Package exts provides a list of file extensions used by some functions in app.
|
Package exts provides a list of file extensions used by some functions in app. |
mf
Package mf provides functions for the file model which is an artifact record.
|
Package mf provides functions for the file model which is an artifact record. |
mfs
Package mfs provides functions that return model FileSlices, which are multiple artifact records.
|
Package mfs provides functions that return model FileSlices, which are multiple artifact records. |
readme
Package readme provides functions for reading and suggesting readme files.
|
Package readme provides functions for reading and suggesting readme files. |
remote
Package remote provides the remote download and update of artifact data from third-party sources such as API's.
|
Package remote provides the remote download and update of artifact data from third-party sources such as API's. |
str
Package str provides functions for handling string or integer input data.
|
Package str provides functions for handling string or integer input data. |