Package: falocalrepo-server
FALocalRepo-ServerWeb interface forfalocalrepo.Installation & RequirementsTo install the program it is sufficient to use Python pip and get the packagefalocalrepo-server.pipinstallfalocalrepo-serverPython 3.10 or above is needed to run this program, all other dependencies are handled by pip during installation. For
information on how to install Python on your computer, refer to the official
websitePython.org.For the program to run, a properly formatted database created by falocalrepo needs to be present in the same folder.The styling is based on theBoostrap CSS framework.Usagefalocalrepo-server <database> [--host HOST] [--port PORT] [--ssl-cert SSL_CERT] [--ssl-key SSL_KEY] 
                   [--redirect-http REDIRECT_PORT] [--auth <username>:<password>] [--precache] [--no-browser]The server needs one argument pointing at the location of a validfalocalrepodatabase and accepts optional arguments to manually set host, port, and an SSL certificate with key. By default, the
server is run on 0.0.0.0:80 for HTTP (without certificate) and 0.0.0.0:443 for HTTPS (with certificate).The--precacheoptions can be used to prepare an initial cache of results from the database to speed up searches.When the app has finished loading, it automatically opens a browser window. To avoid this, use the--no-browseroption.Redirect ModeThe optional--redirect-httpargument changes the app mode to redirection. In this mode the app runs a tiny server
that redirects all HTTP requests it receives onhttp://HOST:PORTtohttps://HOST:REDIRECT_PORT.Note:In redirect mode thedatabaseargument is not checked, so a simple.is sufficient.Note:In redirect mode the app does not operate the database portion of the server. To run in redirect and server
mode, two separate instances of the program are needed.Once the server is running the web app can be accessed at the address shown in the terminal.AuthenticationThe--authoption allows setting up a username and password to access the server using the HTTP Basic authentication
protocol.ArgumentsArgumentDefaultdatabaseNone, mandatory argument--host0.0.0.0--port80 if no SSL certificate is given, 443 otherwise--ssl-certNone--ssl-keyNone--redirect-httpNone--authNone--precacheFalse--no-browserTrueExamples# Launch an HTTP server reachable from other machines using the server's hostname/IPfalocalrepo-server~/FA.db# Launch a localhost-only server on port 8080falocalrepo-server~/FA.db--host127.0.0.1--port8080# Launch a redirect server that listens to port 80 and redirects to port 443 on host 0.0.0.0falocalrepo-server.--host0.0.0.0--port80--redirect-htpp443# Launch a server with basic authentication using 'mickey' as username and 'mouse' as passwordfalocalrepo-server~/FA.db--authmickey:mouse# Launch an HTTPS server reachable from other machines using the server's hostname/IPfalocalrepo-server~/FA.db--ssl-cert~/FA.certificates/certificate.crt--ssl-key~/FA.certificates/private.key# Launch a localhost-only HTTPS server on port 8443falocalrepo-server~/FA.db--host127.0.0.1--port8443--ssl-cert~/FA.certificates/certificate.crt--ssl-key~/FA.certificates/private.keyRoutesNote:All the following paths are meant as paths from<host>:<port>.RouteDestination/Show home page with general information regarding the database/search/Redirects to/search/submissions//search/submissions/Search & browse submissions/search/journals/Search & browse journals/search/users/Search & browse users/settings/Change default search settings/user/<username>/Show information regarding a specific user/user/<username>/icon/Redirect to username's icon on Fur Affinity/user/<username>/thumbnail/Redirect to username's icon on Fur Affinity/gallery/<username>/Browse & search a user's gallery submissions/scraps/<username>/Browse & search a user's scraps submissions/submissions/<username>/Browse & search a user's gallery & scraps submissions/favorites/<username>/Browse & search a user's favorite submissions/mentions/<username>/Browse & search the submissions where the user is mentioned/journals/<username>/Browse & search a user's journals/full/<submission id>/Redirect to/submission/<submission id>//view/<submission id>/Redirect to/submission/<submission id>//submission/<submission id>/View a submission/submission/<submission id>/file/Open the first submission file/submission/<submission id>/file/<n>/Open the nth first submission file/submission/<submission id>/files/Download all the submission files as a zip/submission/<submission id>/files/<n1>-<n2>/Download submissions files from index n1 to index n2 (0 indexed inclusive)/submission/<submission id>/thumbnail/Open a submission thumbnail (generated for image submissions if no thumbnail is stored)/submission/<submission id>/zip/Download a submission's file, description, and metadata as a ZIP archive/journal/<journal id>/View a journal/journal/<journal id>/zip/Download a journal's content and metadata as a ZIP archiveJSON API RoutesThe following routes return information as JSON responses. They can be reached withGETandPOSTrequests, the
former supports sending body fields as URL parameters.RouteDestinationBody/json/search/<table>/Perform a search on the database. The query field in the body uses the samesyntaxas the query field in thesearch page.{query?: str, offset?: int, limit?: int, sort?: str, order?: Union["asc", "desc"]}/json/user/<username>Get user metadata and total submissions/journalsNone/json/submission/<submission id>Get submission metadata and commentsNone/json/journal/<journal id>Get journal metadata and commentsNonePagesNote:the images used in the following sections were taken using light mode, but all pages also support dark mode.HomeThe home page displays general information about the database and contains links to browse and search pages for the
various tables.The information table displays the total number of submissions, journals, and users together with the version of the
database. Clicking on any of the counters open the relevant search & browse page.Browse & SearchThe browse and search pages allow to explore the submissions/journals contained in the database. Searches are performed
case-insensitively using a simple syntax in the form@field term [[| &] term ...]which allows logic operators,
parentheses and start/end of field matching, seeQuery Languagefor details.Search terms for submissions and journals default to theanyfield if none is used, while theusernamefield is used
for users searches.The controls at the top of the page allow to query the database and control the visualisation of the results.TheSearchinput allows to insert the search query.TheFieldmenu allows to insert a specific search field using a simple dropdown menu.TheSortand adjacent order menus change the sorting field and order of the search results. Submissions and journals
default to descending ID, while users default to ascending username.TheViewmenu allows changing between the (default) grid view to a list (table) viewTheSearchbutton submits the search request using the current query and sorting settings.TheBrowsebutton resets the current search query and reverts to browse mode (all entries).TheFAbutton opens the current search on Fur Affinity, translating the shared search and sorting fields (tags,
author, description, and fileurl/fileext). The button is only available when searching submissions.The gear button opens the search settings, the question mark button shows a quick help about the query language.Under the search controls are the number of results and current page.Under the results numbers are the page controls.Firstleads to page 1,Prevleads to the previous page,Nextleads to the next page, andLastleads to the last page. These controls are also available at the bottom of the page.In grid view, the results are presented using cards containing the same information as the list view, with the addition
of thumbnails for submissions. When searching for submissions or journals, clicking on the card footer (containing the
date and author) will open the author's page. Submissions with more than one file will display a small counter with the
number of files in the upper right corner of the card.In list view, the results are presented in a table with the most important columns: ID, AUTHOR, DATE, and TITLE (
submissions and journals); USERNAME, FOLDERS, and ACTIVE (users). On small screens some of these columns are shortened
or removed.Compatibility with Fur Affinity SearchMost Fur Affinity search queries (and links) are fully compatible with the program.Except for theNOT(!) operator, which follows different syntax rules, all Fur Affinity search fields are fully
supported:@lower(treated as@author),@keywords(treated as@tags),@message(treated as@description)
,@title(treated as@title),@filename(treated as@fileurl).Query LanguageThe query language used for this server is based on and improves the search syntax currently used by the Fur Affinity
website. Its basic elements are:@<field>field specifier (e.g.@title), all database columns are available as search fields.
Seefalocalrepo-databasefor details on the available columns.()parentheses, they can be used for better logic operations&ANDlogic operator, used between search terms|ORlogic operator, used between search terms!NOTlogic operator, used as prefix of search terms""quotes, allow searching for literal strings without needing to escape%match 0 or more characters_match exactly 1 character^start of field, when used at the start of a search term, it matches the beginning of the field$end of field, when used at the end of a search term, it matches the end of the fieldAll other strings are considered search terms.The search uses the@anyfield by default for submissions and journals, allowing to do general searches without
specifying a field. The@anyfield does not include theFAVORITE,FILESAVED,USERUPDATE, andACTIVEfields and
must be searched manually using the respective query fields. When searching users,@usernameis the default field.Search terms that are not separated by a logic operator are consideredANDterms (i.e.a b c->a & b & c).Except for theID,FILESAVED,USERUPDATE, andACTIVEfields, all search terms are searched through the
whole content of the various fields: i.e.@description catwill match any item whose description field contains "cat".
To match items that contain only "cat" (or start with, end with, etc.), the%,_,^, and$operators need to be
used (e.g.@description ^cat).Search terms forID,FILESAVED,USERUPDATE, andACTIVEare matched exactly as they are: i.e.@id 1will match
only items whose ID field is exactly equal to "1", to match items that contain "1" the%,_,^, or$operators
need to be used (e.g.@id %1%).ExamplesSearch for journals/submissions containing water and either otter, lutrine, or mustelid, or water and either cat or
feline:water ((otter | lutrine | mustelid) | (cat | feline))@any water & ((otter | lutrine | mustelid) | (cat | feline))Search for journals/submissions containing "cat" or "feline" but neither "mouse" nor "rodent":(cat | feline) !mouse !rodentSearch for general-rated submissions uploaded by a user whose name starts with "tom" that contain either "volleyball"
or "volley" and "ball" separated by one character (e.g. "volley-ball") in any field:@rating general @author tom% @any (volleyball | volley_ball)(volleyball | volley_ball) @rating general @author tom%Search for journals/submissions uploaded in 2020 except for March:@date ^2020 !^2020-03Search for submissions uploaded in March 2021 (meaning the date has to start with2021-03) whose tags contain the
exact tag "ball":@date ^2021-03 @tags "|ball|"@date ^2021-03 @tags \|ball\|Search for journals/submissions where a specific user named "tom" is mentioned:@mentions "|tom|"@mentions \|tom\|Search for submissions whose only favorite is a user named "alex":@favorite ^\|alex\|$Search for users whose names contain "mark":@username %mark%Search for journals/submissions whose title ends with "100%":@title 100\%$Search for journals/submissions whose title is exactly "cat":@title ^cat$Search for text submissions with PDF files:@type text @fileext pdfSearch SettingsThe search settings page allows modifying the sorting, ordering, and viewing option that are applied by default to the
various searches. Settings can be saved to the database if it is writable, otherwise they are simply saved for the
current session and reset when the program stops.Settings values are saved in theSETTINGStable with theSERVER.SEARCHsetting name.UserThe user page shows information about submissions and journals related to a user (gallery, scraps, favorites, mentions,
and journals) and what folders have been set for download. Seefalocalrepofor
more details on this. The user's profile will be displayed if present in the database.Clicking on any of the counters opens the relevant results via the search interface, allowing to refine the search
further.TheNextandPrevbuttons move to the respective users in ascending alphabetical order.SubmissionThe submission page shows the submission file(s) (if present), the submission metadata, and the description.Image, audio, video, and plain text submission files are displayed directly in the page, others (e.g. PDF files) will
display a link to open them. Clicking on image files will enlarge them to fill the width of the screen for easier
viewing. Video files can be enlarged by using the zoom button under them.When a submission has two or more files, a toolbar appears below the file section with buttons to switch between the
different files, show the files in a grid view, and enlarge non-image files (text, video, etc.).The metadata table contains clickable links to the user's page (seeUserfor details), tags, category, species,
gender, rating, folder (gallery/scraps), and to user pages of favouring and mentioned users.The description is displayed as-is except for user icons, which are replaced by@usernamestyled links to avoid
display errors caused by expired icon links.Under the metadata table are a number of buttons that allow to access the submission file, open its Fur Affinity
counterpart, and navigate the other submissions from the author.The downloadFilebutton downloads the submission file (if present). If more than one file is present, then the button
downloads a zip file containing all submission files.The downloadZIPbutton generates a ZIP file containing the submission file, submission thumbnail, description HTML,
and metadata and comments in JSON format.TheFAbutton opens the submission on Fur AffinityTheNextandPrevbuttons lead to the next more recent and the previous less recent submissions respectively.TheGallery,All, andScrapsbuttons open a search page with the user's gallery submissions, scraps and gallery
submissions together, and scraps submissions respectively.To view the currently selected submission file when scrolling down the page, the button in the lower right corner can be
used to open the image in a floating overlay that will remain at the top of the page view.The comments to the submission can be found below the description, and can be reached quickly by clicking on the
floating comments button that appears in the lower right corner of the screen if the submission has comments.Each comment contains the author (with a link to their user page), post date, and links to the comment itself and, if
the comment is a reply, its parent comments.The button furthest to the left (arrow pointing up and to the left) links to the first comment in a reply chain. The
middle button (bent arrow pointing to the left) links to the previous comment in the reply chain. The link button
furthest to the right is a link to that specific comment.JournalThe journal page shows the journal metadata and content.The metadata table contains clickable links to the user's page (seeUserfor details) and to user pages of
mentioned users.Under the metadata table are a number of buttons that allow to download the journal, open its Fur Affinity counterpart,
and navigate the other journals from the same user.The downloadZIPbutton generates a ZIP file containing the journal content HTML and metadata and comments in JSON
format.TheFAbutton opens the journal on Fur AffinityTheNextandPrevbuttons lead to the next more recent, and the previous less recent journals respectively.TheAllbutton opens a search page with all the user's journals.The comments to the journal can be found below the journal text, and can be reached quickly by clicking on the floating
comments button that appears in the lower right corner of the screen if the journal has comments.Each comment contains the author (with a link to their user page), post date, and links to the comment itself and, if
the comment is a reply, its parent comments.The button furthest to the left (arrow pointing up and to the left) links to the first comment in a reply chain. The
middle button (bent arrow pointing to the left) links to the previous comment in the reply chain. The link button
furthest to the right is a link to that specific comment.BBCodeWhen the database is in BBCode mode a new buttons appears along submission descriptions, journal contents, and user
profiles to switch between the rendered HTML and the BBCode stored in the database.Note:the BBCode to HTML conversion is still a work in progress and some content may be rendered incorrectly; please
open
anissueif you encounter any error :)