1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
public class Authenticate extends HttpServlet
{
public static class RequiredParameters{
public String gameId;
public String deviceId;
public String userId;
public String token;
}
public static class OppoUserInfo
{
@JsonIgnoreProperties({ "sex", "profilePictureUrl", "emailStatus", "email" })
public static class BriefUser
{
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String id;
private String name;
}
@JsonProperty("BriefUser")
public BriefUser getBriefUser() {
return briefUser;
}
public void setBriefUser(BriefUser briefUser) {
this.briefUser = briefUser;
}
private BriefUser briefUser;
}
private static final long serialVersionUID = 1L;
private static final String authenticateTypeName = "oppo";
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// check request parameters
RequiredParameters parameters = new RequiredParameters();
Map<String, String[]> parameterMap = request.getParameterMap();
if (parameterMap.get("userId") == null || parameterMap.get("token") == null){
AuthenticationUtilities.sendError(response,
HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "internal error");
AuthenticationUtilities.logWarning(authenticateTypeName,
"wrong parameters:" + parameterMap.toString());
return;
}
else{
parameters.userId = parameterMap.get("userId").toString();
parameters.token = parameterMap.get("token").toString();
}
try {
// query userInfo from third party SDK
String gcUserInfo = "{{jsonstring}}";
// check returned JSON string from SDK
ObjectMapper mapper = new ObjectMapper();
OppoUserInfo userInfo = mapper.readValue(gcUserInfo, OppoUserInfo.class);
if (!parameters.userId.equals(userInfo.getBriefUser().getId())){
AuthenticationUtilities.sendError(response,
HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "internal error");
AuthenticationUtilities.logWarning(authenticateTypeName,
"verify userId failed:" + parameters.userId.toString());
return;
}
try{
// do with database and get a returned token
String authenticationToken = "";
boolean databaseResult = false;
if (!databaseResult){
AuthenticationUtilities.sendError(response,
HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "internal_error");
AuthenticationUtilities.logSevere(authenticateTypeName,
"database returned R_failure_internal_error.");
return;
}
// if success, send response to client
response.getWriter().print("authenticationToken=" + authenticationToken);
}
catch (final Exception exception){
AuthenticationUtilities.sendError(response,
HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "internal_error");
AuthenticationUtilities.logSevere(authenticateTypeName, exception.toString());
return;
}
}
catch (Exception e) {
AuthenticationUtilities.sendError(response,
HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "internal error");
AuthenticationUtilities.logSevere(authenticateTypeName, e.getMessage());
return;
}
}
}
|