package com.robonobo.midas.controller;
import static com.robonobo.common.util.TextUtil.*;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.robonobo.core.api.proto.CoreApi.UserMsg;
import com.robonobo.midas.EventService;
import com.robonobo.midas.MessageService;
import com.robonobo.midas.model.MidasUser;
@Controller
public class UserController extends BaseController {
@Autowired
MessageService message;
@Autowired
EventService event;
@RequestMapping(value="/users/byid/{uIdStr}", method=RequestMethod.GET)
public void getUserById(@PathVariable("uIdStr") String uIdStr, HttpServletRequest req, HttpServletResponse resp) throws IOException {
MidasUser authUser = getAuthUser(req);
if(authUser == null) {
send401(req, resp);
return;
}
long uId = Long.parseLong(uIdStr, 16);
MidasUser targetUser = midas.getUserById(uId);
if(targetUser == null) {
send404(req, resp);
return;
}
getUser(targetUser, authUser, req, resp);
if(targetUser.getUserId() == authUser.getUserId())
event.userRemainsOnline(targetUser);
}
@RequestMapping(value="/users/byemail/{email}.{ext}", method=RequestMethod.GET)
public void getUserByEmail(@PathVariable("email") String emailStr, @PathVariable("ext") String ext, HttpServletRequest req, HttpServletResponse resp) throws IOException {
MidasUser authUser = getAuthUser(req);
if(authUser == null) {
send401(req, resp);
return;
}
// Spring's habit of chopping off the file extension is rather annoying
String email = urlDecode(emailStr)+"."+ext;
MidasUser targetUser = midas.getUserByEmail(email);
if(targetUser == null) {
send404(req, resp);
return;
}
getUser(targetUser, authUser, req, resp);
if(targetUser.getUserId() == authUser.getUserId())
event.userLoggedIn(targetUser);
}
@RequestMapping(value="/users/testing-topup")
public void requestTopUp(HttpServletRequest req, HttpServletResponse resp) throws IOException {
MidasUser user = getAuthUser(req);
if(user == null) {
send401(req, resp);
return;
}
message.sendTopUpRequest(user);
resp.setContentType("text/plain");
resp.getWriter().println("TopUp request received OK.");
resp.setStatus(HttpServletResponse.SC_OK);
}
protected void getUser(MidasUser targetUser, MidasUser authUser, HttpServletRequest req, HttpServletResponse resp) throws IOException {
MidasUser returnUser = midas.getUserAsVisibleBy(targetUser, authUser);
UserMsg uMsg = returnUser.toMsg(false);
writeToOutput(uMsg, resp);
log.debug("User "+authUser.getEmail()+" retrieving user: "+uMsg);
}
}