// Path: app/models/Administrator.java
// @MongoCollection(name = "administrators")
// public class Administrator {
// 
// 	public static JacksonDBCollection<Administrator.Model, String> coll = MongoDB.getCollection("administrators", Administrator.Model.class, String.class);
// 	public static class Model {
// 		@ObjectId
// 		@Id
// 		public String _id;
// 		
// 		public Date createdAt;
// 		public Date lastLoginAt;
// 		public Date lastUpdatedAt;
// 		
// 		@Required
// 		public String username;
// 		public String password;
// 	}
// 	
// 
// 	public static WriteResult<Administrator.Model, String> save(Administrator.Model ob) {
// 		return coll.save( ob );
// 	}
// 	public static WriteResult<Administrator.Model, String> update(String id, Administrator.Model ob) {
// 		return coll.updateById(id , ob);
// 	}
// }
// 
// Path: app/utils/Tools.java
// public class Tools {
// 
// 	public static String md5Encode(String input) {
// 		if( input == null ) return "";
// 		MessageDigest m;
// 		try {
// 			m = MessageDigest.getInstance("MD5");
// 			byte[] out = m.digest(input.getBytes());
// 			final String result = new String(Hex.encodeHex(out));
// 			return result;
// 		} catch (NoSuchAlgorithmException e) {
// 			// TODO Auto-generated catch block
// 			e.printStackTrace();
// 			return "";
// 		} catch(NullPointerException e) {
// 			return "";
// 		}
// 		
// 	}
// 	/**
// 	 * generate random password
// 	 * @return
// 	 */
// 	public static String generateRandomPassword() {
// 		String uuid = UUID.randomUUID().toString().substring(0, 10);
// 		return uuid;
// 	}
// 
// 	public static String base64Encode(String input) {
// 		return utils.Base64.encode( input.getBytes() );
// 	}
// 	/**
// 	 * get the file extension
// 	 * @param file
// 	 * @return
// 	 */
// 	public static String getFileExtention(File file) {
// 		String name = file.getName();
// 		int pos = name.lastIndexOf('.');
// 		String ext = name.substring(pos+1);
// 		return ext;
// 	}
// 	/**
// 	 * get the file extension
// 	 * @param name
// 	 * @return
// 	 */
// 	public static String getFileExtention(String name) {
// 		int pos = name.lastIndexOf('.');
// 		String ext = name.substring(pos+1);
// 		return ext;
// 	}
// 	public static String join(ArrayList<String> data, String delimiter) {
// 	    StringBuffer buffer = new StringBuffer();
// 	    Iterator<String> iter = data.iterator();
// 	    while (iter.hasNext()) {
// 	        buffer.append(iter.next());
// 	        if (iter.hasNext()) {
// 	            buffer.append(delimiter);
// 	        }
// 	    }
// 	    return buffer.toString();
// 	}
// }


import java.util.NoSuchElementException;
import net.vz.mongodb.jackson.DBQuery;
import models.Administrator;
import play.*;
import play.data.Form;
import play.mvc.*;
import utils.Tools;
import views.html.*;
package controllers;





public class Application extends Controller {

	public static class AuthenticateReq {
		public String username;
		public String password;
	}
	
	public static Result login() {
		return ok( login.render() );
	}
	public static Result logout() {
		session().clear();
		return redirect( controllers.routes.Application.login() );
	}
	
	public static Result authenticate() {
		Form<AuthenticateReq> authRequest = form(AuthenticateReq.class).bindFromRequest();
		models.Administrator.Model administrator = null;
		
		if( authRequest.field("username").valueOr("").isEmpty() || authRequest.field("password").valueOr("").isEmpty() ) {
			flash().put("form_error", "Bad username/password !");
			return redirect( controllers.routes.Application.login() );
		}
		
		try {
// Path: app/models/Administrator.java
// @MongoCollection(name = "administrators")
// public class Administrator {
// 
// 	public static JacksonDBCollection<Administrator.Model, String> coll = MongoDB.getCollection("administrators", Administrator.Model.class, String.class);
// 	public static class Model {
// 		@ObjectId
// 		@Id
// 		public String _id;
// 		
// 		public Date createdAt;
// 		public Date lastLoginAt;
// 		public Date lastUpdatedAt;
// 		
// 		@Required
// 		public String username;
// 		public String password;
// 	}
// 	
// 
// 	public static WriteResult<Administrator.Model, String> save(Administrator.Model ob) {
// 		return coll.save( ob );
// 	}
// 	public static WriteResult<Administrator.Model, String> update(String id, Administrator.Model ob) {
// 		return coll.updateById(id , ob);
// 	}
// }
// 
// Path: app/utils/Tools.java
// public class Tools {
// 
// 	public static String md5Encode(String input) {
// 		if( input == null ) return "";
// 		MessageDigest m;
// 		try {
// 			m = MessageDigest.getInstance("MD5");
// 			byte[] out = m.digest(input.getBytes());
// 			final String result = new String(Hex.encodeHex(out));
// 			return result;
// 		} catch (NoSuchAlgorithmException e) {
// 			// TODO Auto-generated catch block
// 			e.printStackTrace();
// 			return "";
// 		} catch(NullPointerException e) {
// 			return "";
// 		}
// 		
// 	}
// 	/**
// 	 * generate random password
// 	 * @return
// 	 */
// 	public static String generateRandomPassword() {
// 		String uuid = UUID.randomUUID().toString().substring(0, 10);
// 		return uuid;
// 	}
// 
// 	public static String base64Encode(String input) {
// 		return utils.Base64.encode( input.getBytes() );
// 	}
// 	/**
// 	 * get the file extension
// 	 * @param file
// 	 * @return
// 	 */
// 	public static String getFileExtention(File file) {
// 		String name = file.getName();
// 		int pos = name.lastIndexOf('.');
// 		String ext = name.substring(pos+1);
// 		return ext;
// 	}
// 	/**
// 	 * get the file extension
// 	 * @param name
// 	 * @return
// 	 */
// 	public static String getFileExtention(String name) {
// 		int pos = name.lastIndexOf('.');
// 		String ext = name.substring(pos+1);
// 		return ext;
// 	}
// 	public static String join(ArrayList<String> data, String delimiter) {
// 	    StringBuffer buffer = new StringBuffer();
// 	    Iterator<String> iter = data.iterator();
// 	    while (iter.hasNext()) {
// 	        buffer.append(iter.next());
// 	        if (iter.hasNext()) {
// 	            buffer.append(delimiter);
// 	        }
// 	    }
// 	    return buffer.toString();
// 	}
// }


// Path: app/controllers/Application.java
import java.util.NoSuchElementException;
import net.vz.mongodb.jackson.DBQuery;
import models.Administrator;
import play.*;
import play.data.Form;
import play.mvc.*;
import utils.Tools;
import views.html.*;

package controllers;





public class Application extends Controller {

	public static class AuthenticateReq {
		public String username;
		public String password;
	}
	
	public static Result login() {
		return ok( login.render() );
	}
	public static Result logout() {
		session().clear();
		return redirect( controllers.routes.Application.login() );
	}
	
	public static Result authenticate() {
		Form<AuthenticateReq> authRequest = form(AuthenticateReq.class).bindFromRequest();
		models.Administrator.Model administrator = null;
		
		if( authRequest.field("username").valueOr("").isEmpty() || authRequest.field("password").valueOr("").isEmpty() ) {
			flash().put("form_error", "Bad username/password !");
			return redirect( controllers.routes.Application.login() );
		}
		
		try {
			administrator = Administrator.coll.find(DBQuery.is("username", authRequest.get().username).is("password", Tools.md5Encode( authRequest.get().password ))).next();