b8aba3f1926361b757bb30f2540e103df711176f
[tpg/opendispense2.git] / src / cokebank_basic / main.c
1 /*
2  * OpenDispense 2 
3  * UCC (University [of WA] Computer Club) Electronic Accounting System
4  *
5  * cokebank.c - Coke-Bank management
6  *
7  * This file is licenced under the 3-clause BSD Licence. See the file COPYING
8  * for full details.
9  */
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <string.h>
13 #include <openssl/sha.h>
14 #include "common.h"
15
16 // === PROTOTYPES ===
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);
23
24 // === GLOBALS ===
25 FILE    *gBank_LogFile;
26
27 // === CODE ===
28 /**
29  * \brief Load the cokebank database
30  */
31 void Init_Cokebank(const char *Argument)
32 {
33         gBank_File = fopen(Argument, "rb+");
34         if( !gBank_File ) {
35                 gBank_File = fopen(Argument, "wb+");
36         }
37         if( !gBank_File ) {
38                 perror("Opening coke bank");
39         }
40
41         gBank_LogFile = fopen("cokebank.log", "a");
42         if( !gBank_LogFile )    gBank_LogFile = stdout;
43
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);
49 }
50
51 /**
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
58  */
59 int Transfer(int SourceUser, int DestUser, int Ammount, const char *Reason)
60 {
61          int    srcBal = Bank_GetUserBalance(SourceUser);
62          int    dstBal = Bank_GetUserBalance(DestUser);
63         
64         if( srcBal - Ammount < Bank_GetMinAllowedBalance(SourceUser) )
65                 return 1;
66         if( dstBal + Ammount < Bank_GetMinAllowedBalance(DestUser) )
67                 return 1;
68         Bank_AlterUserBalance(DestUser, Ammount);
69         Bank_AlterUserBalance(SourceUser, -Ammount);
70         fprintf(gBank_LogFile, "ACCT #%i{%i} -= %ic [to #%i] (%s)\n", SourceUser, srcBal, Ammount, DestUser, Reason);
71         fprintf(gBank_LogFile, "ACCT #%i{%i} += %ic [from #%i] (%s)\n", DestUser, dstBal, Ammount, SourceUser, Reason);
72         return 0;
73 }
74
75 int GetFlags(int User)
76 {
77         return Bank_GetUserFlags(User);
78 }
79
80 /**
81  * \brief Get the balance of the passed user
82  */
83 int GetBalance(int User)
84 {
85         return Bank_GetUserBalance(User);;
86 }
87
88 /**
89  * \brief Return the name the passed user
90  */
91 char *GetUserName(int User)
92 {
93         return Bank_GetUserName(User);
94 }
95
96 /**
97  * \brief Get the User ID of the named user
98  */
99 int GetUserID(const char *Username)
100 {
101          int    ret;
102
103         // Get internal ID (or create new user)
104         ret = Bank_GetUserByName(Username);
105         if( ret == -1 ) {
106                 ret = Bank_AddUser(Username);
107         }
108
109         return ret;
110 }
111

UCC git Repository :: git.ucc.asn.au