3 * UCC (University [of WA] Computer Club) Electronic Accounting System
5 * cokebank.h - Coke-Bank common definitions
7 * This file is licenced under the 3-clause BSD Licence. See the file COPYING
12 * \brief Coke Bank API Documentation
17 #define COKEBANK_SALES_ACCT ">sales" //!< Sales made into
18 #define COKEBANK_DEBT_ACCT ">liability" //!< Credit taken out of
21 * \brief Account iterator opaque structure
23 * Opaque structure for account iterators returned by Bank_Iterator
24 * and used by Bank_IteratorNext and Bank_DelIterator
26 typedef struct sAcctIterator tAcctIterator;
30 BANK_ITFLAG_MINBALANCE = 0x01,
31 BANK_ITFLAG_MAXBALANCE = 0x02,
32 BANK_ITFLAG_SEENBEFORE = 0x04,
33 BANK_ITFLAG_SEENAFTER = 0x08,
35 BANK_ITFLAG_SORT_NONE = 0x000,
36 BANK_ITFLAG_SORT_NAME = 0x100,
37 BANK_ITFLAG_SORT_BAL = 0x200,
38 BANK_ITFLAG_SORT_UNIXID = 0x300,
39 BANK_ITFLAG_SORT_LASTSEEN = 0x400,
40 BANK_ITFLAG_SORTMASK = 0x700,
41 BANK_ITFLAG_REVSORT = 0x800
45 * \brief User flag values
47 * User flag values used by Bank_GetFlags and Bank_SetFlags
49 enum eCokebank_Flags {
50 USER_FLAG_COKE = 0x01, //!< User is a coke member (can do coke accounting)
51 USER_FLAG_WHEEL = 0x02, //!< User is a wheel member (can create, delete and lock accounts)
52 USER_FLAG_DOORGROUP = 0x04, //!< User is in the door group (can open the clubroom door)
53 USER_FLAG_INTERNAL = 0x40, //!< Account is internal (cannot be authenticated, no lower balance limit)
54 USER_FLAG_DISABLED = 0x80 //!< Account is disabled (no transactions allowed)
57 // --- Cokebank Functions ---
59 * \brief Initialise the cokebank
60 * \param Argument Cokebank argument specified in the dispense config file (typically the database path)
61 * \return Boolean Failure
63 extern int Bank_Initialise(const char *Argument);
66 * \brief Transfer money from one account to another
67 * \param SourceUser UID (from \a Bank_GetUserID) to take the money from
68 * \param DestUser UID (from \a Bank_GetUserID) give money to
69 * \param Ammount Amount of money (in cents) to transfer
70 * \param Reason Reason for the transfer
72 extern int Bank_Transfer(int SourceUser, int DestUser, int Ammount, const char *Reason);
74 * \brief Get flags on an account
75 * \param User UID to get flags from
76 * \return Flag set as defined in eCokebank_Flags
78 extern int Bank_GetFlags(int User);
80 * \brief Set an account's flags
81 * \param User UID to set flags on
82 * \param Mask Mask of flags changed
83 * \param Value Final value of changed flags
85 extern int Bank_SetFlags(int User, int Mask, int Value);
87 * \brief Get an account's balance
88 * \param User UID to query
90 extern int Bank_GetBalance(int User);
92 * \brief Get the name associated with an account
95 extern char *Bank_GetUserName(int User);
97 * \brief Get a UID from a passed name
99 extern int Bank_GetUserID(const char *Username);
101 * \brief Create a new account
102 * \param Username Name for the new account (if NULL, an anoymous account is created)
103 * \return User ID of the new account
105 extern int Bank_CreateUser(const char *Username);
108 * \brief Create an account iterator
109 * \param FlagMask Mask of account flags to check
110 * \param FlagValues Wanted values for checked flags
111 * \param Flags Specifies the operation of \a MinMaxBalance and \a Timestamp (\see eBank_ItFlags)
112 * \param MinMaxBalance Mininum/Maximum balance
113 * \param LastSeen Latest/Earliest last seen time
114 * \return Pointer to an iterator across the selected data set
116 extern tAcctIterator *Bank_Iterator(int FlagMask, int FlagValues,
117 int Flags, int MinMaxBalance, time_t LastSeen);
120 * \brief Get the current entry in the iterator and move to the next
121 * \param It Iterator returned by Bank_Iterator
122 * \return User ID or -1 for end of list
124 extern int Bank_IteratorNext(tAcctIterator *It);
127 * \brief Free an allocated iterator
128 * \param It Iterator returned by Bank_Iterator
130 extern void Bank_DelIterator(tAcctIterator *It);
133 * \brief Validates a user's authentication
134 * \param Salt Salt given to the client for hashing the password
135 * \param Username Username used
136 * \param Password Password sent by the client
139 extern int Bank_GetUserAuth(const char *Salt, const char *Username, const char *Password);
142 * \brief Get a User ID from a MIFARE card ID
143 * \param CardID MIFARE card ID
146 extern int Bank_GetUserByCard(const char *CardID);
149 * \brief Add a card to a user's account
150 * \param User User ID
151 * \param CardID MIFARE card ID
152 * \return Boolean failure
154 * \retval 1 Bad user ID
155 * \retval 2 Card in use
157 extern int Bank_AddUserCard(int User, const char *CardID);