3 * UCC (University [of WA] Computer Club) Electronic Accounting System
5 * cokebank.c - Coke-Bank management
7 * This file is licenced under the 3-clause BSD Licence. See the file COPYING
13 #include <openssl/sha.h>
17 void Init_Cokebank(const char *Argument);
18 int Transfer(int SourceUser, int DestUser, int Ammount, const char *Reason);
19 int GetBalance(int User);
20 char *GetUserName(int User);
21 int GetUserID(const char *Username);
22 int GetUserAuth(const char *Username, const char *Password);
29 * \brief Load the cokebank database
31 void Init_Cokebank(const char *Argument)
33 gBank_File = fopen(Argument, "rb+");
35 gBank_File = fopen(Argument, "wb+");
38 perror("Opening coke bank");
41 gBank_LogFile = fopen("cokebank.log", "a");
42 if( !gBank_LogFile ) gBank_LogFile = stdout;
44 fseek(gBank_File, 0, SEEK_END);
45 giBank_NumUsers = ftell(gBank_File) / sizeof(gaBank_Users[0]);
46 fseek(gBank_File, 0, SEEK_SET);
47 gaBank_Users = malloc( giBank_NumUsers * sizeof(gaBank_Users[0]) );
48 fread(gaBank_Users, sizeof(gaBank_Users[0]), giBank_NumUsers, gBank_File);
52 * \brief Transfers money from one user to another
53 * \param SourceUser Source user
54 * \param DestUser Destination user
55 * \param Ammount Ammount of cents to move from \a SourceUser to \a DestUser
56 * \param Reason Reason for the transfer (essentially a comment)
57 * \return Boolean failure
59 int Transfer(int SourceUser, int DestUser, int Ammount, const char *Reason)
61 int srcBal = Bank_GetUserBalance(SourceUser);
62 int dstBal = Bank_GetUserBalance(DestUser);
63 if( srcBal - Ammount < Bank_GetMinAllowedBalance(SourceUser) )
65 if( dstBal + Ammount < Bank_GetMinAllowedBalance(DestUser) )
67 Bank_AlterUserBalance(DestUser, Ammount);
68 Bank_AlterUserBalance(SourceUser, -Ammount);
69 fprintf(gBank_LogFile, "ACCT #%i{%i} -= %ic [to #%i] (%s)\n", SourceUser, srcBal, Ammount, DestUser, Reason);
70 fprintf(gBank_LogFile, "ACCT #%i{%i} += %ic [from #%i] (%s)\n", DestUser, dstBal, Ammount, SourceUser, Reason);
75 * \brief Get the balance of the passed user
77 int GetBalance(int User)
79 return Bank_GetUserBalance(User);;
83 * \brief Return the name the passed user
85 char *GetUserName(int User)
87 return Bank_GetUserName(User);
91 * \brief Get the User ID of the named user
93 int GetUserID(const char *Username)
97 // Get internal ID (or create new user)
98 ret = Bank_GetUserByName(Username);
100 ret = Bank_AddUser(Username);