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);
30 * \brief Load the cokebank database
32 void Init_Cokebank(const char *Argument)
34 gBank_File = fopen(Argument, "rb+");
36 gBank_File = fopen(Argument, "wb+");
39 perror("Opening coke bank");
42 gBank_LogFile = fopen("cokebank.log", "a");
43 if( !gBank_LogFile ) gBank_LogFile = stdout;
45 fseek(gBank_File, 0, SEEK_END);
46 giBank_NumUsers = ftell(gBank_File) / sizeof(gaBank_Users[0]);
47 fseek(gBank_File, 0, SEEK_SET);
48 gaBank_Users = malloc( giBank_NumUsers * sizeof(gaBank_Users[0]) );
49 fread(gaBank_Users, sizeof(gaBank_Users[0]), giBank_NumUsers, gBank_File);
53 * \brief Transfers money from one user to another
54 * \param SourceUser Source user
55 * \param DestUser Destination user
56 * \param Ammount Ammount of cents to move from \a SourceUser to \a DestUser
57 * \param Reason Reason for the transfer (essentially a comment)
58 * \return Boolean failure
60 int Transfer(int SourceUser, int DestUser, int Ammount, const char *Reason)
62 int srcBal = Bank_GetUserBalance(SourceUser);
63 int dstBal = Bank_GetUserBalance(DestUser);
65 if( srcBal - Ammount < Bank_GetMinAllowedBalance(SourceUser) )
67 if( dstBal + Ammount < Bank_GetMinAllowedBalance(DestUser) )
69 Bank_AlterUserBalance(DestUser, Ammount);
70 Bank_AlterUserBalance(SourceUser, -Ammount);
71 fprintf(gBank_LogFile, "ACCT #%i{%i} -= %ic [to #%i] (%s)\n", SourceUser, srcBal, Ammount, DestUser, Reason);
72 fprintf(gBank_LogFile, "ACCT #%i{%i} += %ic [from #%i] (%s)\n", DestUser, dstBal, Ammount, SourceUser, Reason);
76 int GetFlags(int User)
78 return Bank_GetUserFlags(User);
81 int SetFlags(int User, int Mask, int Flags)
83 return Bank_SetUserFlags(User, Mask, Flags);
87 * \brief Get the balance of the passed user
89 int GetBalance(int User)
91 return Bank_GetUserBalance(User);;
95 * \brief Return the name the passed user
97 char *GetUserName(int User)
99 return Bank_GetUserName(User);
103 * \brief Get the User ID of the named user
105 int GetUserID(const char *Username)
107 return Bank_GetUserByName(Username);
110 int CreateUser(const char *Username)
114 ret = Bank_GetUserByName(Username);
115 if( ret != -1 ) return -1;
117 return Bank_AddUser(Username);
122 return giBank_NumUsers;