package cc.blynk.server.api.http.logic.business; import cc.blynk.core.http.BaseHttpHandler; import cc.blynk.core.http.MediaType; import cc.blynk.core.http.Response; import cc.blynk.core.http.annotation.Consumes; import cc.blynk.core.http.annotation.FormParam; import cc.blynk.core.http.annotation.POST; import cc.blynk.core.http.annotation.Path; import cc.blynk.server.Holder; import cc.blynk.server.core.dao.SessionDao; import cc.blynk.server.core.dao.UserDao; import cc.blynk.server.core.model.AppName; import cc.blynk.server.core.model.auth.User; import io.netty.channel.ChannelHandler; import io.netty.handler.codec.http.cookie.Cookie; import io.netty.handler.codec.http.cookie.DefaultCookie; import io.netty.handler.codec.http.cookie.ServerCookieEncoder; import static cc.blynk.core.http.Response.redirect; import static io.netty.handler.codec.http.HttpHeaderNames.SET_COOKIE; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 09.12.15. */ @Path("") @ChannelHandler.Sharable public class AdminAuthHandler extends BaseHttpHandler { //1 month private static final int COOKIE_EXPIRE_TIME = 30 * 60 * 60 * 24; private final UserDao userDao; public AdminAuthHandler(Holder holder, String adminRootPath) { super(holder, adminRootPath); this.userDao = holder.userDao; } @POST @Consumes(value = MediaType.APPLICATION_FORM_URLENCODED) @Path("/login") public Response login(@FormParam("email") String email, @FormParam("password") String password) { if (email == null || password == null) { return redirect(rootPath); } User user = userDao.getByName(email, AppName.BLYNK); if (user == null || !user.isSuperAdmin) { return redirect(rootPath); } if (!password.equals(user.pass)) { return redirect(rootPath); } Response response = redirect(rootPath); Cookie cookie = makeDefaultSessionCookie(sessionDao.generateNewSession(user), COOKIE_EXPIRE_TIME); response.headers().add(SET_COOKIE, ServerCookieEncoder.STRICT.encode(cookie)); return response; } @POST @Path("/logout") public Response logout() { Response response = redirect(rootPath); Cookie cookie = makeDefaultSessionCookie("", 0); response.headers().add(SET_COOKIE, ServerCookieEncoder.STRICT.encode(cookie)); return response; } private static Cookie makeDefaultSessionCookie(String sessionId, int maxAge) { DefaultCookie cookie = new DefaultCookie(SessionDao.SESSION_COOKIE, sessionId); cookie.setMaxAge(maxAge); return cookie; } }