| CONCEPT: |
| news |
| |
| |
| DESCRIPTION: |
| This document describes the news system used in Nightfall. |
| News is intended to provide a general system for bulletin |
| boards and similar objects. It is similar to the Usenet |
| news system. Articles are stored in a central area, /news. |
| Articles (Messages) are stored as files within this |
| directory. Only the news demon object is allowed to write |
| and read in the /news directory. Interfaceing to the |
| news demon is done via interface functions in the news |
| demon. |
| |
| Typically news are read and written by a bulletin |
| board object or by a newsreader. Player buletin boards |
| should of course be limited to specific news groups. |
| A newsreader might be intelligent in that it autmatically |
| shows new messages. Groups may be moderated, then only the |
| moderator can write there. There are also flags whether a |
| board is a wiz_only board and who may remove messages. |
| |
| Security is in several levels. It may be 0, then every |
| effective userid might read and write and delete articles, |
| although the news demon will still look for the match of |
| the sender field with certain group requirements. This level |
| of security is to make it possible to create groups |
| accessible by bulletin boards which have no euid. |
| |
| Security level 1 means that euid check is done, for reading |
| and writing. This still allows for bulltin boards, but those |
| must have root euid and thus the ability to seteuid to the |
| euid of the object using the bulletin board (normally the |
| player). This feature requires native gamedriver mode. |
| |
| Saved news file format (formal notation): |
| |
| int security; /* wheter euid check is done, 0 or 1 */ |
| mixed *accesslist = ({ |
| mixed *readaccess; /* who can read messages */ |
| mixed *writeaccess; /* who can write messages */ |
| mixed *deleteaccess; /* who can delete messages */ |
| mixed *controlaccess; /* who can control the accesslist */ |
| }) |
| mixed *messages = ({ |
| mixed *msg1; mixed *msg2; ... mixed *msgN; |
| }) |
| |
| An access entry can be be one of the following: |
| - an effective userid (string) |
| - one of the keywords "wizard", "all", "author" |
| - a wizard level (integer) which is required minimal |
| - an array of one of the plain types above (Alternative). |
| |
| A message looks as follows: |
| |
| mixed *message = ({ |
| string author; /* who wrote the message */ |
| string subject; /* the subject */ |
| string *groups; /* news groups where this was posted */ |
| int date; /* date of message written */ |
| string messageid; /* a unique string */ |
| string *referenceid; /* list of references */ |
| int expire; /* when message expires */ |
| string body; /* the contents of the message */ |
| }) |
| |
| The news demon (/secure/news, or /obj/news) provides the |
| following functions: |
| |
| int success = PostMessage(mixed *message) |
| Tells the demon to insert the message in the news database. |
| Depending on security level, euid or message.author is |
| checked if this is allowed. |
| |
| int success = DeleteMessage(string *groups, string messageid) |
| Remove a message from the database. |
| |
| mixed *messagelist = ReadMessageHeaders(string group) |
| Get all message headers (complete info, but without |
| body) of newsgroup <group>. |
| |
| mixed *message = ReadMessage(string *groups, string messageid) |
| Retrieve a message from the database. |
| |
| |
| SEE ALSO: |