| 
						
						
							
								
							
						
						
					 | 
					@ -9,6 +9,11 @@ use rocket::http::Status; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					use rocket::request::{self, FromRequest}; | 
					 | 
					 | 
					use rocket::request::{self, FromRequest}; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					use rocket::{Outcome, Request, State}; | 
					 | 
					 | 
					use rocket::{Outcome, Request, State}; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					use std::process::Command; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					use chrono::prelude::*; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					use crate::error::Error; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					use crate::CONFIG; | 
					 | 
					 | 
					use crate::CONFIG; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					/// An alias to the database connection used
 | 
					 | 
					 | 
					/// An alias to the database connection used
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -34,6 +39,21 @@ pub fn get_connection() -> Result<Connection, ConnectionError> { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    Connection::establish(&CONFIG.database_url()) | 
					 | 
					 | 
					    Connection::establish(&CONFIG.database_url()) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					/// Creates a back-up of the database using sqlite3
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					pub fn backup_database() -> Result<(), Error> { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    let now: DateTime<Utc> = Utc::now(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    let file_date = String::from(now.format("%Y%m%d").to_string()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    let backup_command: String = format!("{}{}{}", ".backup 'db_", file_date, ".sqlite3'"); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Command::new("sqlite3") | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        .current_dir("./data") | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        .args(&["db.sqlite3", &backup_command]) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        .output() | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        .expect("Can't open database, sqlite3 is not available, make sure it's installed and available on the PATH"); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    Ok(()) | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					/// Attempts to retrieve a single connection from the managed database pool. If
 | 
					 | 
					 | 
					/// Attempts to retrieve a single connection from the managed database pool. If
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					/// no pool is currently managed, fails with an `InternalServerError` status. If
 | 
					 | 
					 | 
					/// no pool is currently managed, fails with an `InternalServerError` status. If
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					/// no connections are available, fails with a `ServiceUnavailable` status.
 | 
					 | 
					 | 
					/// no connections are available, fails with a `ServiceUnavailable` status.
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					
  |