@@ -36,6 +36,8 @@ private void render(RoutingContext ctx, String templateFileName, JsonObject json
3636 private static final String UID2_BASE_URL = System .getenv ("UID2_BASE_URL" );
3737 private static final String UID2_API_KEY = System .getenv ("UID2_API_KEY" );
3838 private static final String UID2_SECRET_KEY = System .getenv ("UID2_SECRET_KEY" );
39+ private static final String PREFIX_STANDARD = "/standard" ;
40+ private static final String PREFIX_BASIC = "/basic" ;
3941 private final PublisherUid2Helper publisherUid2Helper = new PublisherUid2Helper (UID2_SECRET_KEY ); //for advanced usage (Do your own HTTP)
4042 private final PublisherUid2Client publisherUid2Client = new PublisherUid2Client (UID2_BASE_URL , UID2_API_KEY , UID2_SECRET_KEY ); //for basic usage (SDK does HTTP)
4143
@@ -49,12 +51,12 @@ private int GetPort() {
4951 }
5052 }
5153
52- private void renderError (HttpResponse <Buffer > response , String errorMessage , RoutingContext ctx ) {
54+ private void renderError (HttpResponse <Buffer > response , String errorMessage , RoutingContext ctx , String prefix ) {
5355 JsonObject json = new JsonObject ().put ("error" , errorMessage );
5456 if (response != null ) {
55- json .put ("responseStatus" , response .statusCode ()).put ("response" , response .bodyAsString ());
57+ json .put ("prefix" , prefix ). put ( " responseStatus" , response .statusCode ()).put ("response" , response .bodyAsString ());
5658 } else {
57- json .put ("responseStatus" , "<null>" ).put ("response" , "<null>" );
59+ json .put ("prefix" , prefix ). put ( " responseStatus" , "<null>" ).put ("response" , "<null>" );
5860 }
5961
6062 render (ctx , "templates/error.ftl" , json );
@@ -64,19 +66,23 @@ private void renderError(HttpResponse<Buffer> response, String errorMessage, Rou
6466
6567 private void generateTokenBasicUsage (RoutingContext ctx , String email ) {
6668 try {
67- IdentityTokens identity = publisherUid2Client .generateToken (TokenGenerateInput .fromEmail (email ));
69+ TokenGenerateResponse tokenGenerateResponse = publisherUid2Client .generateTokenResponse (TokenGenerateInput .fromEmail (email ).doNotGenerateTokensForOptedOut ()); //UID2
70+ // EUID's input would look like this:
71+ // TokenGenerateInput.fromEmail(email).withTransparencyAndConsentString("CPhJRpMPhJRpMABAMBFRACBoALAAAEJAAIYgAKwAQAKgArABAAqAAA").doNotGenerateTokensForOptedOut();
6872
69- setIdentity (ctx , identity . getJsonString ());
70- ctx .redirect ("/basic /" );
73+ setIdentity (ctx , tokenGenerateResponse . getIdentityJsonString ());
74+ ctx .redirect (PREFIX_BASIC + " /" );
7175 } catch (RuntimeException e ) {
72- renderError (null , e .getMessage (), ctx );
76+ renderError (null , e .getMessage (), ctx , PREFIX_BASIC );
7377 }
7478 }
7579
7680
77- private void generateTokenAdvancedUsage (RoutingContext ctx , String email , String redirect ) {
81+ private void generateTokenAdvancedUsage (RoutingContext ctx , String email , String redirect , String prefix ) {
7882 try {
79- EnvelopeV2 envelope = publisherUid2Helper .createEnvelopeForTokenGenerateRequest (TokenGenerateInput .fromEmail (email ));
83+ EnvelopeV2 envelope = publisherUid2Helper .createEnvelopeForTokenGenerateRequest (TokenGenerateInput .fromEmail (email ).doNotGenerateTokensForOptedOut ()); //UID2
84+ // EUID's input would look like this:
85+ // TokenGenerateInput.fromEmail(email).withTransparencyAndConsentString("CPhJRpMPhJRpMABAMBFRACBoALAAAEJAAIYgAKwAQAKgArABAAqAAA").doNotGenerateTokensForOptedOut();
8086
8187 webClient
8288 .postAbs (UID2_BASE_URL + "/v2/token/generate" )
@@ -85,22 +91,25 @@ private void generateTokenAdvancedUsage(RoutingContext ctx, String email, String
8591 .sendBuffer (Buffer .buffer (envelope .getEnvelope ()))
8692 .onSuccess (response -> {
8793 if (response .statusCode () != 200 ) {
88- renderError (response , "HTTP status code is not 200" , ctx );
94+ renderError (response , "HTTP status code is not 200" , ctx , "" );
8995 return ;
9096 }
9197
9298 try {
93- IdentityTokens identity = publisherUid2Helper .createIdentityfromTokenGenerateResponse (response .bodyAsString (), envelope );
99+ TokenGenerateResponse tokenGenerateResponse = publisherUid2Helper .createTokenGenerateResponse (response .bodyAsString (), envelope );
94100
95- setIdentity (ctx , identity .getJsonString ());
96- ctx .redirect (redirect );
101+ setIdentity (ctx , tokenGenerateResponse .getIdentityJsonString ());
102+ if (tokenGenerateResponse .getIdentityJsonString () != null )
103+ ctx .redirect (redirect );
104+ else
105+ renderError (null , "User has opted out" , ctx , "" );
97106 } catch (RuntimeException e ) {
98- renderError (null , e .getMessage (), ctx );
107+ renderError (null , e .getMessage (), ctx , "" );
99108 }
100109 })
101- .onFailure (err -> renderError (null , err .getMessage (), ctx ));
110+ .onFailure (err -> renderError (null , err .getMessage (), ctx , prefix ));
102111 } catch (RuntimeException e ) {
103- renderError (null , e .getMessage (), ctx );
112+ renderError (null , e .getMessage (), ctx , prefix );
104113 }
105114 }
106115
@@ -121,24 +130,25 @@ private void setIdentity(RoutingContext ctx, String jsonResponse) {
121130 }
122131
123132
124- private void processRefreshIdentityResponse (HttpResponse <Buffer > encryptedResponse , RoutingContext ctx , IdentityTokens identity ) {
133+ private void processRefreshIdentityResponse (HttpResponse <Buffer > encryptedResponse , RoutingContext ctx , IdentityTokens identity , String prefix ) {
125134 if (encryptedResponse .statusCode () != 200 ) {
126- renderError (encryptedResponse , "HTTP status code is not 200" , ctx );
135+ renderError (encryptedResponse , "HTTP status code is not 200" , ctx , prefix );
127136 return ;
128137 }
129138
130139 try {
131140 TokenRefreshResponse tokenRefreshResponse = PublisherUid2Helper .createTokenRefreshResponse (encryptedResponse .bodyAsString (), identity );
132141 setIdentity (ctx , tokenRefreshResponse .getIdentityJsonString ());
133142 } catch (RuntimeException e ) {
134- renderError (null , e .getMessage (), ctx );
143+ renderError (null , e .getMessage (), ctx , prefix );
135144 }
136145 }
137146
138147 private Future <Void > refreshIdentity (RoutingContext ctx , boolean basicUsage ) {
139148 Promise <Void > promise = Promise .promise ();
140149
141150 final IdentityTokens identity = getIdentity (ctx );
151+ final String prefix = basicUsage ? PREFIX_BASIC : "" ;
142152
143153 if (basicUsage ) {
144154 try {
@@ -151,7 +161,7 @@ private Future<Void> refreshIdentity(RoutingContext ctx, boolean basicUsage) {
151161 else
152162 promise .complete ();
153163 } catch (RuntimeException e ) {
154- renderError (null , e .getMessage (), ctx );
164+ renderError (null , e .getMessage (), ctx , prefix );
155165 }
156166 } else { //advanced usage
157167 String refreshToken = identity .getRefreshToken ();
@@ -162,14 +172,14 @@ private Future<Void> refreshIdentity(RoutingContext ctx, boolean basicUsage) {
162172 .putHeader ("X-UID2-Client-Version" , PublisherUid2Helper .getVersionHttpHeader ())
163173 .sendBuffer (Buffer .buffer (refreshToken ))
164174 .onSuccess (encryptedResponse -> {
165- processRefreshIdentityResponse (encryptedResponse , ctx , identity );
175+ processRefreshIdentityResponse (encryptedResponse , ctx , identity , prefix );
166176 if (getIdentity (ctx ) == null )
167177 promise .fail ("no identity" ); //eg opt out
168178 else
169179 promise .complete ();
170180 })
171181 .onFailure (err -> {
172- renderError (null , err .getMessage (), ctx );
182+ renderError (null , err .getMessage (), ctx , prefix );
173183 promise .fail ("something went wrong" + err .getMessage ());
174184 });
175185 }
@@ -200,7 +210,7 @@ private Future<Void> verifyIdentity(RoutingContext ctx, boolean basicUsage) {
200210 }
201211
202212 void protect (RoutingContext ctx , boolean basicUsage ) {
203- final String redirect = basicUsage ? "/basic /login" : "/login" ;
213+ final String redirect = basicUsage ? PREFIX_BASIC + " /login" : "/login" ;
204214
205215 verifyIdentity (ctx , basicUsage )
206216 .onSuccess (v -> ctx .next ())
@@ -234,7 +244,7 @@ private Router createRoutesSetupForAdvancedUsageServerOnly() {
234244 );
235245
236246 router .post ("/login" ).handler (ctx ->
237- generateTokenAdvancedUsage (ctx , ctx .request ().getFormAttribute ("email" ), "/" )
247+ generateTokenAdvancedUsage (ctx , ctx .request ().getFormAttribute ("email" ), "/" , "" )
238248 );
239249
240250 router .get ("/logout" ).handler (ctx -> {
@@ -264,17 +274,17 @@ private Router createRoutesSetupForAdvancedUsageServerOnly() {
264274 return router ;
265275 }
266276
267- private Router createRoutesSetupForAdvancedUsageStandardIntegration () {
277+ private Router createRoutesSetupForAdvancedUsageStandardIntegration () {
268278 Router standardIntegration = Router .router (vertx );
269279
270280 standardIntegration .get ("/" ).handler (ctx ->
271281 render (ctx , "templates-standard-integration/index.ftl" , new JsonObject ().put ("uid2BaseUrl" , UID2_BASE_URL )));
272282
273283 standardIntegration .post ("/login" ).handler (ctx ->
274- generateTokenAdvancedUsage (ctx , ctx .request ().getFormAttribute ("email" ), "/standard/ login" ));
284+ generateTokenAdvancedUsage (ctx , ctx .request ().getFormAttribute ("email" ), PREFIX_STANDARD + "/ login", PREFIX_STANDARD ));
275285
276286 standardIntegration .get ("/login" ).handler (ctx ->
277- render (ctx , "templates-standard-integration/login.ftl" , getIdentityForTemplate (ctx , "/standard" ).put ("uid2BaseUrl" , UID2_BASE_URL )));
287+ render (ctx , "templates-standard-integration/login.ftl" , getIdentityForTemplate (ctx , PREFIX_STANDARD ).put ("uid2BaseUrl" , UID2_BASE_URL )));
278288
279289 return standardIntegration ;
280290 }
@@ -291,33 +301,33 @@ private Router createRouteSetupForBasicUsageServerOnly() {
291301 .onSuccess (v -> ctx .redirect ("/" ))
292302 .onFailure (v -> {
293303 setIdentity (ctx , null );
294- render (ctx , "templates/login.ftl" , new JsonObject ().put ("redirect" , "/basic /login" ));
304+ render (ctx , "templates/login.ftl" , new JsonObject ().put ("redirect" , PREFIX_BASIC + " /login" ));
295305 })
296306 );
297307
298308 router .post ("/login" ).handler (ctx -> generateTokenBasicUsage (ctx , ctx .request ().getFormAttribute ("email" )));
299309
300310 router .get ("/logout" ).handler (ctx -> {
301311 setIdentity (ctx , null );
302- ctx .redirect ("/basic /login" );
312+ ctx .redirect (PREFIX_BASIC + " /login" );
303313 });
304314
305315 router .get ("/" ).handler (ctx -> protect (ctx , true ));
306316 router .get ("/content1" ).handler (ctx -> protect (ctx , true ));
307317 router .get ("/content2" ).handler (ctx -> protect (ctx , true ));
308318
309319 router .get ("/" ).handler (ctx -> {
310- JsonObject jsonObject = getIdentityForTemplate (ctx , "/basic" );
320+ JsonObject jsonObject = getIdentityForTemplate (ctx , PREFIX_BASIC );
311321 render (ctx , "templates/index.ftl" , jsonObject );
312322 });
313323
314324 router .get ("/content1" ).handler (ctx -> {
315- JsonObject jsonObject = getIdentityForTemplate (ctx , "/basic" ).put ("content" , "First Sample Content" );
325+ JsonObject jsonObject = getIdentityForTemplate (ctx , PREFIX_BASIC ).put ("content" , "First Sample Content" );
316326 render (ctx , "templates/content.ftl" , jsonObject );
317327 });
318328
319329 router .get ("/content2" ).handler (ctx -> {
320- JsonObject jsonObject = getIdentityForTemplate (ctx , "/basic" ).put ("content" , "Second Sample Content" );
330+ JsonObject jsonObject = getIdentityForTemplate (ctx , PREFIX_BASIC ).put ("content" , "Second Sample Content" );
321331 render (ctx , "templates/content.ftl" , jsonObject );
322332 });
323333
@@ -336,8 +346,8 @@ public void start(Promise<Void> startPromise) {
336346
337347 Router parentRouter = Router .router (vertx );
338348 parentRouter .route ("/*" ).subRouter (serverOnlyRouter );
339- parentRouter .route ("/standard /*" ).subRouter (standardIntegrationRouter );
340- parentRouter .route ("/basic /*" ).subRouter (serverOnlyWithBasicUsage );
349+ parentRouter .route (PREFIX_STANDARD + " /*" ).subRouter (standardIntegrationRouter );
350+ parentRouter .route (PREFIX_BASIC + " /*" ).subRouter (serverOnlyWithBasicUsage );
341351
342352 vertx .createHttpServer ().requestHandler (parentRouter ).listen (GetPort ())
343353 .onSuccess (server -> System .out .println ("HTTP server started on http://localhost:" + server .actualPort ()))
0 commit comments