The Advanced RSS Environment (affectionately called "The Arsse") is a news aggregator server which implements multiple synchronization protocols. Unlike most other aggregator servers, The Arsse does not include a Web front-end (though one is planned as a separate project), and it relies on [existing protocols](Supported_Protocols) to maximize compatibility with [existing clients](Compatible_Clients). Supported protocols are:
The Advanced RSS Environment (affectionately called "The Arsse") is a news aggregator server which implements multiple synchronization protocols. Unlike most other aggregator servers, The Arsse does not include a Web front-end (though one is planned as a separate project), and it relies on [existing protocols](Supported_Protocols) to maximize compatibility with [existing clients](Compatible_Clients). Supported protocols are:
The NextCloud News protocol was the first supported by The Arsse, and has been supported in full since version 0.3.0.
The Nextcloud News protocol was the first supported by The Arsse, and has been supported in full since version 0.3.0.
It allows organizing newsfeeds into single-level folders, and supports a wide range of operations on newsfeeds, folders, and articles.
It allows organizing newsfeeds into single-level folders, and supports a wide range of operations on newsfeeds, folders, and articles.
@ -25,7 +25,7 @@ It allows organizing newsfeeds into single-level folders, and supports a wide ra
- The feed updater ignores the `userId` parameter: feeds in The Arsse are deduplicated, and have no owner
- The feed updater ignores the `userId` parameter: feeds in The Arsse are deduplicated, and have no owner
- The `/feeds/all` route lists only feeds which should be checked for updates, and it also returns all `userId` attributes as empty strings: feeds in The Arsse are deduplicated, and have no owner
- The `/feeds/all` route lists only feeds which should be checked for updates, and it also returns all `userId` attributes as empty strings: feeds in The Arsse are deduplicated, and have no owner
- The API's "updater" routes do not require administrator priviledges as The Arsse has no concept of user classes
- The API's "updater" routes do not require administrator priviledges as The Arsse has no concept of user classes
- The "updater" console commands mentioned in the protocol specification are not implemented, as The Arsse does not implement the required NextCloud subsystems
- The "updater" console commands mentioned in the protocol specification are not implemented, as The Arsse does not implement the required Nextcloud subsystems
- The `lastLoginTimestamp` attribute of the user metadata is always the current time: The Arsse's implementation of the protocol is fully stateless
- The `lastLoginTimestamp` attribute of the user metadata is always the current time: The Arsse's implementation of the protocol is fully stateless
- Syntactically invalid JSON input will yield a `400 Bad Request` response instead of falling back to GET parameters
- Syntactically invalid JSON input will yield a `400 Bad Request` response instead of falling back to GET parameters
- Folder names consisting only of whitespace are rejected along with the empty string
- Folder names consisting only of whitespace are rejected along with the empty string
@ -36,4 +36,4 @@ It allows organizing newsfeeds into single-level folders, and supports a wide ra
# Interaction with nested folders
# Interaction with nested folders
Tiny Tiny RSS is unique in allowing newsfeeds to be grouped into folders nested to arbitrary depth. When newsfeeds are placed into nested folders, they simply appear in the top-level folder when accessed via the NextCloud News protocol.
Tiny Tiny RSS is unique in allowing newsfeeds to be grouped into folders nested to arbitrary depth. When newsfeeds are placed into nested folders, they simply appear in the top-level folder when accessed via the Nextcloud News protocol.
@ -59,7 +59,7 @@ The Arsse does not currently support the entire protocol. Notably missing featur
# Interaction with HTTP authentication
# Interaction with HTTP authentication
Tiny Tiny RSS itself is unaware of HTTP authentication: if HTTP authentication is used in the server configuration, it has no effect on authentication in the API. The Arsse, however, makes use of HTTP authentication for NextCloud News, and can do so for TT-RSS as well. In a default configuration The Arsse functions in the same way as TT-RSS: HTTP authentication and API authentication are completely separate and independent. Alternative behaviour is summarized below:
Tiny Tiny RSS itself is unaware of HTTP authentication: if HTTP authentication is used in the server configuration, it has no effect on authentication in the API. The Arsse, however, makes use of HTTP authentication for Nextcloud News, and can do so for TT-RSS as well. In a default configuration The Arsse functions in the same way as TT-RSS: HTTP authentication and API authentication are completely separate and independent. Alternative behaviour is summarized below:
The Arsse was designed from the start as a server for multiple synchronization protocols which clients can make use of. Currently the following protocols are supported:
The Arsse was designed from the start as a server for multiple synchronization protocols which clients can make use of. Currently the following protocols are supported:
addedtextnotnulldefaultCURRENT_TIMESTAMP,-- time at which feed was added
addedtextnotnulldefaultCURRENT_TIMESTAMP,-- time at which feed was added
modifiedtextnotnulldefaultCURRENT_TIMESTAMP,-- time at which subscription properties were last modified
modifiedtextnotnulldefaultCURRENT_TIMESTAMP,-- time at which subscription properties were last modified
titletext,-- user-supplied title
titletext,-- user-supplied title
order_typeintnotnulldefault0,-- NextCloud sort order
order_typeintnotnulldefault0,-- Nextcloud sort order
pinnedbooleannotnulldefault0,-- whether feed is pinned (always sorts at top)
pinnedbooleannotnulldefault0,-- whether feed is pinned (always sorts at top)
folderintegerreferencesarsse_folders(id)ondeletecascade,-- TT-RSS category (nestable); the first-level category (which acts as NextCloud folder) is joined in when needed
folderintegerreferencesarsse_folders(id)ondeletecascade,-- TT-RSS category (nestable); the first-level category (which acts as Nextcloud folder) is joined in when needed
unique(owner,feed)-- a given feed should only appear once for a given owner
unique(owner,feed)-- a given feed should only appear once for a given owner
);
);
@ -109,9 +109,9 @@ create table arsse_marks(
);
);
createtablearsse_editions(
createtablearsse_editions(
-- IDs for specific editions of articles (required for at least NextCloud News)
-- IDs for specific editions of articles (required for at least Nextcloud News)
-- every time an article is updated by its author, a new unique edition number is assigned
-- every time an article is updated by its author, a new unique edition number is assigned
-- with NextCloud News this prevents users from marking as read an article which has been
-- with Nextcloud News this prevents users from marking as read an article which has been
-- updated since the client state was last refreshed
-- updated since the client state was last refreshed
idintegerprimarykey,-- sequence number
idintegerprimarykey,-- sequence number
articleintegernotnullreferencesarsse_articles(id)ondeletecascade,-- the article of which this is an edition
articleintegernotnullreferencesarsse_articles(id)ondeletecascade,-- the article of which this is an edition
addedtextnotnulldefaultCURRENT_TIMESTAMP,-- time at which feed was added
addedtextnotnulldefaultCURRENT_TIMESTAMP,-- time at which feed was added
modifiedtextnotnulldefaultCURRENT_TIMESTAMP,-- time at which subscription properties were last modified
modifiedtextnotnulldefaultCURRENT_TIMESTAMP,-- time at which subscription properties were last modified
titletextcollatenocase,-- user-supplied title
titletextcollatenocase,-- user-supplied title
order_typeintnotnulldefault0,-- NextCloud sort order
order_typeintnotnulldefault0,-- Nextcloud sort order
pinnedbooleannotnulldefault0,-- whether feed is pinned (always sorts at top)
pinnedbooleannotnulldefault0,-- whether feed is pinned (always sorts at top)
folderintegerreferencesarsse_folders(id)ondeletecascade,-- TT-RSS category (nestable); the first-level category (which acts as NextCloud folder) is joined in when needed
folderintegerreferencesarsse_folders(id)ondeletecascade,-- TT-RSS category (nestable); the first-level category (which acts as Nextcloud folder) is joined in when needed
unique(owner,feed)-- a given feed should only appear once for a given owner
unique(owner,feed)-- a given feed should only appear once for a given owner