@@ -172,115 +172,111 @@ public <T extends ComputateSiteRequest> T generateSiteRequest(User user, JsonObj
172172 return siteRequest ;
173173 }
174174
175- public <T extends ComputateSiteRequest > Future <T > user (ServiceRequest serviceRequest , Class <T > cSiteRequest , Class <?> cSiteUser , String vertxAddress , String postAction , String patchAction ) {
176- Promise <T > promise = Promise .promise ();
175+ public <T extends ComputateSiteRequest > Future <JsonObject > getUserPrincipal (ServiceRequest serviceRequest , Class <T > cSiteRequest , Class <?> cSiteUser , String vertxAddress , String postAction , String patchAction ) {
176+ Promise <JsonObject > promise = Promise .promise ();
177177 try {
178178 JsonObject userPrincipal = serviceRequest .getUser ();
179179 if (userPrincipal == null ) {
180- ComputateSiteRequest siteRequest = generateSiteRequest (null , null , serviceRequest , cSiteRequest );
181- promise .complete ((T )siteRequest );
180+ promise .complete ();
182181 } else {
183- User token = User .create (userPrincipal );
184- oauth2AuthenticationProvider .authenticate (token .principal ()).onSuccess (user -> {
185- try {
186- user .attributes ().put ("principal" , user .principal ());
187- JsonObject userAttributes = user .attributes ();
188- JsonObject accessToken = userAttributes .getJsonObject ("accessToken" );
189- String userId = accessToken .getString ("sub" );
190- T siteRequest = generateSiteRequest (user , userPrincipal , serviceRequest , cSiteRequest );
191- SearchList <ComputateSiteUser > searchList = new SearchList <ComputateSiteUser >();
192- searchList .q ("*:*" );
193- searchList .setStore (true );
194- searchList .setC (cSiteUser );
195- searchList .fq ("userId_docvalues_string:" + SearchTool .escapeQueryChars (userId ));
196- searchList .promiseDeepSearchList (siteRequest ).onSuccess (c -> {
197- ComputateSiteUser siteUser1 = searchList .getList ().stream ().findFirst ().orElse (null );
198-
199- if (siteUser1 == null ) {
200- JsonObject jsonObject = new JsonObject ();
201- jsonObject .put ("userName" , accessToken .getString ("preferred_username" ));
202- jsonObject .put ("userFirstName" , accessToken .getString ("given_name" ));
203- jsonObject .put ("userLastName" , accessToken .getString ("family_name" ));
204- jsonObject .put ("userFullName" , accessToken .getString ("name" ));
205- jsonObject .put ("userId" , accessToken .getString ("sub" ));
206- jsonObject .put ("userEmail" , accessToken .getString ("email" ));
207- userDefine (siteRequest , jsonObject , false );
208-
209- ComputateSiteRequest siteRequest2 = siteRequest .copy ();
210- siteRequest2 .setJsonObject (jsonObject );
211- siteRequest2 .setSiteRequest_ (siteRequest );
212- siteRequest2 .initDeepForClass ();
213-
214- ApiRequest apiRequest = new ApiRequest ();
215- apiRequest .setRows (1L );
216- apiRequest .setNumFound (1L );
217- apiRequest .setNumPATCH (0L );
218- apiRequest .initDeepApiRequest (siteRequest2 );
219- siteRequest2 .setApiRequest_ (apiRequest );
220-
221- JsonObject params = new JsonObject ();
222- params .put ("body" , jsonObject );
223- params .put ("path" , new JsonObject ());
224- params .put ("cookie" , new JsonObject ());
225- params .put ("header" , new JsonObject ());
226- params .put ("form" , new JsonObject ());
227- JsonObject query = new JsonObject ();
228- Boolean softCommit = Optional .ofNullable (siteRequest .getServiceRequest ().getParams ()).map (p -> p .getJsonObject ("query" )).map ( q -> q .getBoolean ("softCommit" )).orElse (null );
229- Integer commitWithin = Optional .ofNullable (siteRequest .getServiceRequest ().getParams ()).map (p -> p .getJsonObject ("query" )).map ( q -> q .getInteger ("commitWithin" )).orElse (null );
230- if (softCommit == null && commitWithin == null )
231- softCommit = true ;
232- if (softCommit )
233- query .put ("softCommit" , softCommit );
234- if (commitWithin != null )
235- query .put ("commitWithin" , commitWithin );
236- params .put ("query" , query );
237- JsonObject context = new JsonObject ().put ("params" , params ).put ("user" , Optional .ofNullable (siteRequest .getUser ()).map (u -> u .attributes ().getJsonObject ("tokenPrincipal" )).orElse (null ));
238- JsonObject json = new JsonObject ().put ("context" , context );
239- eventBus .request (vertxAddress , json , new DeliveryOptions ().addHeader ("action" , postAction )).onSuccess (a -> {
240- JsonObject responseMessage = (JsonObject )a .body ();
241- JsonObject responseBody = new JsonObject (Buffer .buffer (JsonUtil .BASE64_DECODER .decode (responseMessage .getString ("payload" ))));
242- Long pk = Long .parseLong (responseBody .getString ("pk" ));
243- siteRequest .setUserName (accessToken .getString ("preferred_username" ));
244- siteRequest .setUserFirstName (accessToken .getString ("given_name" ));
245- siteRequest .setUserLastName (accessToken .getString ("family_name" ));
246- siteRequest .setUserEmail (accessToken .getString ("email" ));
247- siteRequest .setUserId (accessToken .getString ("sub" ));
248- apiRequest .setPk (pk );
249- siteRequest .setUserKey (pk );
250- siteRequest .setApiRequest_ (apiRequest );
251- siteRequest .setUserPrincipal (userPrincipal );
252- siteRequest .setSiteUser (siteUser1 );
253- promise .complete (siteRequest );
254- }).onFailure (ex -> {
255- LOG .error (String .format ("postSiteUser failed. " ), ex );
256- promise .fail (ex );
257- });
258- } else {
259- JsonObject jsonObject = new JsonObject ();
260- jsonObject .put ("setUserName" , accessToken .getString ("preferred_username" ));
261- jsonObject .put ("setUserFirstName" , accessToken .getString ("given_name" ));
262- jsonObject .put ("setUserLastName" , accessToken .getString ("family_name" ));
263- jsonObject .put ("setUserCompleteName" , accessToken .getString ("name" ));
264- jsonObject .put ("setUserId" , accessToken .getString ("sub" ));
265- jsonObject .put ("setUserEmail" , accessToken .getString ("email" ));
266- jsonObject .put ("setSeeDeleted" , siteUser1 .getSeeDeleted ());
267- jsonObject .put ("setSeeArchived" , siteUser1 .getSeeArchived ());
268- Boolean define = userDefine (siteRequest , jsonObject , true );
269- if (define ) {
182+ String accessToken = userPrincipal .getString ("access_token" );
183+ if (accessToken == null ) {
184+ JsonObject result = new JsonObject ();
185+ result .put ("access_token" , accessToken );
186+ promise .complete (result );
187+ } else {
188+ promise .complete (userPrincipal );
189+ }
190+ }
191+ } catch (Exception ex ) {
192+ LOG .error (String .format ("user failed. " ), ex );
193+ promise .fail (ex );
194+ }
195+ return promise .future ();
196+ }
270197
198+ public <T extends ComputateSiteRequest > Future <User > getTokenUser (ServiceRequest serviceRequest , Class <T > cSiteRequest , Class <?> cSiteUser , String vertxAddress , String postAction , String patchAction ) {
199+ Promise <User > promise = Promise .promise ();
200+ try {
201+ JsonObject userPrincipal = serviceRequest .getUser ();
202+ if (userPrincipal == null ) {
203+ promise .complete ();
204+ } else {
205+ String accessToken = userPrincipal .getString ("access_token" );
206+ if (accessToken == null ) {
207+ promise .complete (User .create (userPrincipal ));
208+ } else {
209+ User token = User .create (userPrincipal );
210+ oauth2AuthenticationProvider .authenticate (token .principal ()).onSuccess (user -> {
211+ promise .complete (user );
212+ }).onFailure (ex -> {
213+ oauth2AuthenticationProvider .refresh (token ).onSuccess (user -> {
214+ serviceRequest .setUser (user .principal ());
215+ getTokenUser (serviceRequest , cSiteRequest , cSiteUser , vertxAddress , postAction , patchAction ).onSuccess (user2 -> {
216+ promise .complete (user2 );
217+ }).onFailure (ex2 -> {
218+ promise .fail (ex2 );
219+ });
220+ }).onFailure (ex2 -> {
221+ LOG .error (String .format ("user failed. " , ex2 ));
222+ promise .fail (ex2 );
223+ });
224+ });
225+ }
226+ }
227+ } catch (Exception ex ) {
228+ LOG .error (String .format ("user failed. " ), ex );
229+ promise .fail (ex );
230+ }
231+ return promise .future ();
232+ }
233+
234+ public <T extends ComputateSiteRequest > Future <T > user (ServiceRequest serviceRequest , Class <T > cSiteRequest , Class <?> cSiteUser , String vertxAddress , String postAction , String patchAction ) {
235+ Promise <T > promise = Promise .promise ();
236+ try {
237+ getUserPrincipal (serviceRequest , cSiteRequest , cSiteUser , vertxAddress , postAction , patchAction ).onSuccess (userPrincipal -> {
238+ getTokenUser (serviceRequest , cSiteRequest , cSiteUser , vertxAddress , postAction , patchAction ).onSuccess (user -> {
239+ try {
240+ if (user == null ) {
241+ ComputateSiteRequest siteRequest = generateSiteRequest (null , null , serviceRequest , cSiteRequest );
242+ promise .complete ((T )siteRequest );
243+ } else {
244+ user .attributes ().put ("principal" , user .principal ());
245+ JsonObject userAttributes = user .attributes ();
246+ JsonObject accessToken = Optional .ofNullable (userAttributes .getJsonObject ("accessToken" )).orElse (user .principal ());
247+ user .attributes ().put ("accessToken" , accessToken );
248+ String userId = accessToken .getString ("sub" );
249+ T siteRequest = generateSiteRequest (user , userPrincipal , serviceRequest , cSiteRequest );
250+ SearchList <ComputateSiteUser > searchList = new SearchList <ComputateSiteUser >();
251+ searchList .q ("*:*" );
252+ searchList .setStore (true );
253+ searchList .setC (cSiteUser );
254+ searchList .fq ("userId_docvalues_string:" + SearchTool .escapeQueryChars (userId ));
255+ searchList .promiseDeepSearchList (siteRequest ).onSuccess (c -> {
256+ ComputateSiteUser siteUser1 = searchList .getList ().stream ().findFirst ().orElse (null );
257+
258+ if (siteUser1 == null ) {
259+ JsonObject jsonObject = new JsonObject ();
260+ jsonObject .put ("userName" , accessToken .getString ("preferred_username" ));
261+ jsonObject .put ("userFirstName" , accessToken .getString ("given_name" ));
262+ jsonObject .put ("userLastName" , accessToken .getString ("family_name" ));
263+ jsonObject .put ("userFullName" , accessToken .getString ("name" ));
264+ jsonObject .put ("userId" , accessToken .getString ("sub" ));
265+ jsonObject .put ("userEmail" , accessToken .getString ("email" ));
266+ userDefine (siteRequest , jsonObject , false );
267+
271268 ComputateSiteRequest siteRequest2 = siteRequest .copy ();
272269 siteRequest2 .setJsonObject (jsonObject );
273270 siteRequest2 .setSiteRequest_ (siteRequest );
274271 siteRequest2 .initDeepForClass ();
275- siteUser1 .setSiteRequest_ (siteRequest2 );
276-
272+
277273 ApiRequest apiRequest = new ApiRequest ();
278274 apiRequest .setRows (1L );
279275 apiRequest .setNumFound (1L );
280276 apiRequest .setNumPATCH (0L );
281277 apiRequest .initDeepApiRequest (siteRequest2 );
282278 siteRequest2 .setApiRequest_ (apiRequest );
283-
279+
284280 JsonObject params = new JsonObject ();
285281 params .put ("body" , jsonObject );
286282 params .put ("path" , new JsonObject ());
@@ -296,18 +292,20 @@ public <T extends ComputateSiteRequest> Future<T> user(ServiceRequest serviceReq
296292 query .put ("softCommit" , softCommit );
297293 if (commitWithin != null )
298294 query .put ("commitWithin" , commitWithin );
299- query .put ("q" , "*:*" ).put ("fq" , new JsonArray ().add ("pk:" + siteUser1 .getPk ())).put ("var" , new JsonArray ().add ("refresh:false" ));
300295 params .put ("query" , query );
301296 JsonObject context = new JsonObject ().put ("params" , params ).put ("user" , Optional .ofNullable (siteRequest .getUser ()).map (u -> u .attributes ().getJsonObject ("tokenPrincipal" )).orElse (null ));
302297 JsonObject json = new JsonObject ().put ("context" , context );
303298 eventBus .request (vertxAddress , json , new DeliveryOptions ().addHeader ("action" , postAction )).onSuccess (a -> {
304- JsonObject responseBody = (JsonObject )a .body ();
299+ JsonObject responseMessage = (JsonObject )a .body ();
300+ JsonObject responseBody = new JsonObject (Buffer .buffer (JsonUtil .BASE64_DECODER .decode (responseMessage .getString ("payload" ))));
301+ Long pk = Long .parseLong (responseBody .getString ("pk" ));
305302 siteRequest .setUserName (accessToken .getString ("preferred_username" ));
306303 siteRequest .setUserFirstName (accessToken .getString ("given_name" ));
307304 siteRequest .setUserLastName (accessToken .getString ("family_name" ));
308305 siteRequest .setUserEmail (accessToken .getString ("email" ));
309306 siteRequest .setUserId (accessToken .getString ("sub" ));
310- siteRequest .setUserKey (siteUser1 .getPk ());
307+ apiRequest .setPk (pk );
308+ siteRequest .setUserKey (pk );
311309 siteRequest .setApiRequest_ (apiRequest );
312310 siteRequest .setUserPrincipal (userPrincipal );
313311 siteRequest .setSiteUser (siteUser1 );
@@ -317,37 +315,93 @@ public <T extends ComputateSiteRequest> Future<T> user(ServiceRequest serviceReq
317315 promise .fail (ex );
318316 });
319317 } else {
320- siteRequest .setUserName (siteUser1 .getUserName ());
321- siteRequest .setUserFirstName (siteUser1 .getUserFirstName ());
322- siteRequest .setUserLastName (siteUser1 .getUserLastName ());
323- siteRequest .setUserKey (siteUser1 .getPk ());
324- siteRequest .setUserPrincipal (userPrincipal );
325- siteRequest .setSiteUser (siteUser1 );
326- promise .complete ((T )siteRequest );
318+ JsonObject jsonObject = new JsonObject ();
319+ jsonObject .put ("setUserName" , accessToken .getString ("preferred_username" ));
320+ jsonObject .put ("setUserFirstName" , accessToken .getString ("given_name" ));
321+ jsonObject .put ("setUserLastName" , accessToken .getString ("family_name" ));
322+ jsonObject .put ("setUserCompleteName" , accessToken .getString ("name" ));
323+ jsonObject .put ("setUserId" , accessToken .getString ("sub" ));
324+ jsonObject .put ("setUserEmail" , accessToken .getString ("email" ));
325+ jsonObject .put ("setSeeDeleted" , siteUser1 .getSeeDeleted ());
326+ jsonObject .put ("setSeeArchived" , siteUser1 .getSeeArchived ());
327+ Boolean define = userDefine (siteRequest , jsonObject , true );
328+ if (define ) {
329+
330+ ComputateSiteRequest siteRequest2 = siteRequest .copy ();
331+ siteRequest2 .setJsonObject (jsonObject );
332+ siteRequest2 .setSiteRequest_ (siteRequest );
333+ siteRequest2 .initDeepForClass ();
334+ siteUser1 .setSiteRequest_ (siteRequest2 );
335+
336+ ApiRequest apiRequest = new ApiRequest ();
337+ apiRequest .setRows (1L );
338+ apiRequest .setNumFound (1L );
339+ apiRequest .setNumPATCH (0L );
340+ apiRequest .initDeepApiRequest (siteRequest2 );
341+ siteRequest2 .setApiRequest_ (apiRequest );
342+
343+ JsonObject params = new JsonObject ();
344+ params .put ("body" , jsonObject );
345+ params .put ("path" , new JsonObject ());
346+ params .put ("cookie" , new JsonObject ());
347+ params .put ("header" , new JsonObject ());
348+ params .put ("form" , new JsonObject ());
349+ JsonObject query = new JsonObject ();
350+ Boolean softCommit = Optional .ofNullable (siteRequest .getServiceRequest ().getParams ()).map (p -> p .getJsonObject ("query" )).map ( q -> q .getBoolean ("softCommit" )).orElse (null );
351+ Integer commitWithin = Optional .ofNullable (siteRequest .getServiceRequest ().getParams ()).map (p -> p .getJsonObject ("query" )).map ( q -> q .getInteger ("commitWithin" )).orElse (null );
352+ if (softCommit == null && commitWithin == null )
353+ softCommit = true ;
354+ if (softCommit )
355+ query .put ("softCommit" , softCommit );
356+ if (commitWithin != null )
357+ query .put ("commitWithin" , commitWithin );
358+ query .put ("q" , "*:*" ).put ("fq" , new JsonArray ().add ("pk:" + siteUser1 .getPk ())).put ("var" , new JsonArray ().add ("refresh:false" ));
359+ params .put ("query" , query );
360+ JsonObject context = new JsonObject ().put ("params" , params ).put ("user" , Optional .ofNullable (siteRequest .getUser ()).map (u -> u .attributes ().getJsonObject ("tokenPrincipal" )).orElse (null ));
361+ JsonObject json = new JsonObject ().put ("context" , context );
362+ eventBus .request (vertxAddress , json , new DeliveryOptions ().addHeader ("action" , postAction )).onSuccess (a -> {
363+ JsonObject responseBody = (JsonObject )a .body ();
364+ siteRequest .setUserName (accessToken .getString ("preferred_username" ));
365+ siteRequest .setUserFirstName (accessToken .getString ("given_name" ));
366+ siteRequest .setUserLastName (accessToken .getString ("family_name" ));
367+ siteRequest .setUserEmail (accessToken .getString ("email" ));
368+ siteRequest .setUserId (accessToken .getString ("sub" ));
369+ siteRequest .setUserKey (siteUser1 .getPk ());
370+ siteRequest .setApiRequest_ (apiRequest );
371+ siteRequest .setUserPrincipal (userPrincipal );
372+ siteRequest .setSiteUser (siteUser1 );
373+ promise .complete (siteRequest );
374+ }).onFailure (ex -> {
375+ LOG .error (String .format ("postSiteUser failed. " ), ex );
376+ promise .fail (ex );
377+ });
378+ } else {
379+ siteRequest .setUserName (siteUser1 .getUserName ());
380+ siteRequest .setUserFirstName (siteUser1 .getUserFirstName ());
381+ siteRequest .setUserLastName (siteUser1 .getUserLastName ());
382+ siteRequest .setUserKey (siteUser1 .getPk ());
383+ siteRequest .setUserPrincipal (userPrincipal );
384+ siteRequest .setSiteUser (siteUser1 );
385+ promise .complete ((T )siteRequest );
386+ }
327387 }
328- }
329- }). onFailure ( ex -> {
330- LOG . error ( String . format ( "user failed. " ), ex );
331- promise . fail ( ex );
332- });
388+ }). onFailure ( ex -> {
389+ LOG . error ( String . format ( "user failed. " ), ex );
390+ promise . fail ( ex );
391+ } );
392+ }
333393 } catch (Exception ex ) {
334394 LOG .error (String .format ("user failed. " ), ex );
335395 promise .fail (ex );
336396 }
337397 }).onFailure (ex -> {
338- oauth2AuthenticationProvider .refresh (token ).onSuccess (user -> {
339- serviceRequest .setUser (user .principal ());
340- user (serviceRequest , cSiteRequest , cSiteUser , vertxAddress , postAction , patchAction ).onSuccess (siteRequest -> {
341- promise .complete ((T )siteRequest );
342- }).onFailure (ex2 -> {
343- promise .fail (ex2 );
344- });
345- }).onFailure (ex2 -> {
346- LOG .error (String .format ("user failed. " , ex2 ));
347- promise .fail (ex2 );
348- });
398+ LOG .error (String .format ("user failed. " ), ex );
399+ promise .fail (ex );
349400 });
350- }
401+ }).onFailure (ex -> {
402+ LOG .error (String .format ("user failed. " ), ex );
403+ promise .fail (ex );
404+ });
351405 } catch (Exception ex ) {
352406 LOG .error (String .format ("user failed. " ), ex );
353407 promise .fail (ex );
0 commit comments