controllers.Auth.java Source code

Java tutorial

Introduction

Here is the source code for controllers.Auth.java

Source

// Auth.java --- Controller that handles registration and login.

// Copyright (C) 2013-2015  Tim Krones

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.

// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

package controllers;

import com.fasterxml.jackson.databind.node.ObjectNode;
import controllers.Application.Login;
import models.nodes.User;
import play.data.Form;
import play.libs.F.Function0;
import play.libs.F.Function;
import play.libs.F.Promise;
import play.libs.Json;
import play.mvc.Content;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.home;
import views.html.login;

import static play.data.Form.form;

public class Auth extends Controller {

    public static Promise<Result> register() {
        final Form<RegistrationForm> registrationForm = form(RegistrationForm.class).bindFromRequest();
        if (registrationForm.hasErrors()) {
            return Promise.promise(new ErrorResult(home.render(registrationForm)));
        }
        ObjectNode user = Json.newObject();
        user.put("username", registrationForm.get().email);
        user.put("password", registrationForm.get().password);
        Promise<Boolean> created = User.nodes.create(user);
        return created.map(new Function<Boolean, Result>() {
            public Result apply(Boolean created) {
                if (created) {
                    flash("success", "Registration successful.");
                } else {
                    flash("error", "Registration failed.");
                }
                return redirect(routes.Application.home());
            }
        });
    }

    public static Promise<Result> authenticate() {
        final Form<Login> loginForm = form(Login.class).bindFromRequest();
        if (loginForm.hasErrors()) {
            return Promise.promise(new ErrorResult(login.render(loginForm)));
        }
        final ObjectNode user = Json.newObject();
        user.put("username", loginForm.get().email);
        user.put("password", loginForm.get().password);
        Promise<Boolean> exists = User.nodes.exists(user);
        return exists.map(new Function<Boolean, Result>() {
            public Result apply(Boolean exists) {
                if (exists) {
                    session().clear();
                    session("username", user.get("username").asText());
                    flash("success", "Login successful.");
                    return redirect(routes.Application.home());
                } else {
                    flash("error", "Login failed: Unknown user.");
                    return badRequest(login.render(loginForm));
                }
            }
        });
    }

    private static class ErrorResult implements Function0<Result> {
        private Content content;

        public ErrorResult(Content content) {
            this.content = content;
        }

        public Result apply() {
            return badRequest(content);
        }
    }

    public static class RegistrationForm extends Login {
    }

}