├── assets ├── img │ ├── bg.png │ ├── mondo.png │ ├── mondo-bw.png │ └── logo.svg ├── css │ ├── global.css │ └── login.css └── js │ ├── dataTables.bootstrap.min.js │ ├── bootstrap.min.js │ └── jquery.dataTables.min.js ├── logout.php ├── inc ├── foot.php ├── head.php └── navbar.php ├── .gitignore ├── loadtoken.php ├── scripts ├── expenditure.php ├── freezeStatus.php ├── checkAccessToken.php ├── freeze.php ├── accountInfo.php ├── transactions.php └── pdfGen.php ├── login.php ├── README.md ├── auth ├── stategen.php └── callback.php ├── exportcsv.php ├── map.php └── index.php /assets/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jamesallison/mondoweb/HEAD/assets/img/bg.png -------------------------------------------------------------------------------- /assets/img/mondo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jamesallison/mondoweb/HEAD/assets/img/mondo.png -------------------------------------------------------------------------------- /assets/img/mondo-bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jamesallison/mondoweb/HEAD/assets/img/mondo-bw.png -------------------------------------------------------------------------------- /logout.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /inc/foot.php: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | <<<<<<< HEAD 2 | 3 | includes/api_creds.php 4 | 5 | includes/api_creds.php 6 | 7 | includes/api_creds.php 8 | ======= 9 | inc/settings.php 10 | >>>>>>> origin/master 11 | -------------------------------------------------------------------------------- /assets/css/global.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: 'Lato', sans-serif; 3 | } 4 | .logo { 5 | margin: 15px 0px 15px 0px; 6 | } 7 | .top-links { 8 | padding-top: 25px; 9 | } 10 | .brand-custom { 11 | padding: 10px !important; 12 | } 13 | .category { 14 | font-size: 1.3em; 15 | } -------------------------------------------------------------------------------- /inc/head.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /loadtoken.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/expenditure.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/freezeStatus.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/checkAccessToken.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/freeze.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /login.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 |
16 | Your session expired, please login to Mondo again.
'; 19 | } 20 | ?> 21 | Login with Mondo 22 |

This will take you to Mondo where you can login.

23 | 24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /scripts/accountInfo.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MondoWeb 2 | ### An online banking client built on the Mondo API 3 | 4 | Hoping to release this open source Mondo online banking client once Mondo becomes more publicly available. For now, you may host this on your own webserver. 5 | 6 | ## Features 7 | - Three-legged OAuth support 8 | - Searchable & paginated table of transactions 9 | - Map of transactions 10 | - Legacy bank style account statements by month 11 | - CSV Export of all your transactions 12 | - Disable / enable your card 13 | 14 | ## Installation 15 | 1. Create a file called settings.php in the inc directory. 16 | 2. Paste in the following code 17 | 3. Place your Mondo OAuth credentials in the file 18 | 19 | ``` 20 | 32 | ``` 33 | -------------------------------------------------------------------------------- /auth/stategen.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scripts/transactions.php: -------------------------------------------------------------------------------- 1 | $transaction) { 46 | $json['transactions'][$key]['weekDay'] = date('l', strtotime($transaction['created'])); 47 | } 48 | } 49 | 50 | if($reverse) { 51 | // return the reversed array (so newest transaction is at the top) 52 | return array_reverse($json['transactions']); 53 | } 54 | else { 55 | return $json['transactions']; 56 | } 57 | } 58 | ?> -------------------------------------------------------------------------------- /auth/callback.php: -------------------------------------------------------------------------------- 1 | urlencode('authorization_code'), 23 | 'client_id' => urlencode($clientid), 24 | 'client_secret' => urlencode($clientsecret), 25 | 'redirect_uri' => urlencode("$rooturl/auth/callback.php"), 26 | 'code' => urlencode($_GET['code']) 27 | ); 28 | 29 | //url-ify the data for the POST 30 | foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 31 | rtrim($fields_string, '&'); 32 | curl_setopt($ch, CURLOPT_URL, "$api_root/oauth2/token"); 33 | //curl_setopt($ch, CURLOPT_HTTPHEADER, $headr); 34 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 35 | curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); 36 | $rest = curl_exec($ch); 37 | curl_close($ch); 38 | $json = json_decode($rest, true); 39 | 40 | // put the access token in the session 41 | $_SESSION['accesstoken'] = $json['access_token']; 42 | 43 | // get the account's info 44 | require_once('../scripts/accountInfo.php'); 45 | getAccountInfo($json['access_token'], $api_root); 46 | 47 | // all done with logging in, send them to the homepage 48 | header('location: /'); 49 | } 50 | else { 51 | // states don't match, throw them out 52 | session_destroy(); 53 | exit(header('location: /')); 54 | } 55 | ?> -------------------------------------------------------------------------------- /assets/js/dataTables.bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | DataTables Bootstrap 3 integration 3 | ©2011-2015 SpryMedia Ltd - datatables.net/license 4 | */ 5 | (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,e){a||(a=window);if(!e||!e.fn.dataTable)e=require("datatables.net")(a,e).$;return b(e,a,a.document)}:b(jQuery,window,document)})(function(b,a,e){var d=b.fn.dataTable;b.extend(!0,d.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});b.extend(d.ext.classes, 6 | {sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default"});d.ext.renderer.pageButton.bootstrap=function(a,h,r,m,j,n){var o=new d.Api(a),s=a.oClasses,k=a.oLanguage.oPaginate,t=a.oLanguage.oAria.paginate||{},f,g,p=0,q=function(d,e){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")}; 7 | l=0;for(h=e.length;l",{"class":s.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("",{href:"#", 8 | "aria-controls":a.sTableId,"aria-label":t[c],"data-dt-idx":p,tabindex:a.iTabIndex}).html(f)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(e.activeElement).data("dt-idx")}catch(u){}q(b(h).empty().html('