package cc.blynk.server.api.http.logic.ide;
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.POST;
import cc.blynk.core.http.annotation.Path;
import cc.blynk.server.Holder;
import cc.blynk.server.core.dao.UserDao;
import cc.blynk.server.core.model.AppName;
import cc.blynk.server.core.model.auth.User;
import cc.blynk.server.redis.RedisClient;
import io.netty.channel.ChannelHandler;
import java.util.Map;
import static cc.blynk.core.http.Response.*;
/**
* @author gig.
*/
@Path("/ide")
@ChannelHandler.Sharable
public class IDEAuthLogic extends BaseHttpHandler {
private final UserDao userDao;
private final RedisClient redisClient;
protected static final String IDE_AUTHORIZE_ENDPOINT = "/ide/authorize";
//for tests only
protected IDEAuthLogic(UserDao userDao, RedisClient redisClient) {
super(null, null, null, "");
this.userDao = userDao;
this.redisClient = redisClient;
}
public IDEAuthLogic(Holder holder) {
super(holder, "");
this.userDao = holder.userDao;
this.redisClient = holder.redisClient;
}
@POST
@Consumes(value = MediaType.APPLICATION_JSON)
@Path("/authorize")
public Response authorize(Map<String, String> data) {
final String email = data.get("email");
final String password = data.get("password");
if (email == null || password == null) {
return badRequest();
}
User user = userDao.getByName(email, AppName.BLYNK);
if (user == null) {
String userServer = redisClient.getServerByUser(email);
if (userServer != null) {
return redirect("//" + userServer + IDE_AUTHORIZE_ENDPOINT);
}
}
if (user == null || !password.equals(user.pass)) {
return badRequest();
}
return ok(user);
}
}