@@ -134,9 +134,11 @@ export class DBHelper {
134134 return Config . db . query < Provider > ( { query : { _type : "provider" } , top : 10 , collectionname : "config" , jwt : Crypt . rootToken ( ) } , span ) ; ;
135135 } ) ;
136136 // const result: Provider[] = [];
137+ // https://www.w3schools.com/icons/fontawesome5_icons_brands.asp
137138 items . forEach ( provider => {
138139 // const item: any = { name: provider.name, id: provider.id, provider: provider.provider, logo: "fa-question-circle" };
139- provider . logo = "fa-question-circle" ;
140+ provider . logo = "fa-microsoft" ;
141+ if ( provider . provider === "oidc" ) { provider . logo = "fa-openid" ; }
140142 if ( provider . provider === "google" ) { provider . logo = "fa-google" ; }
141143 if ( provider . provider === "saml" ) { provider . logo = "fa-windows" ; }
142144 //result.push(item);
@@ -454,7 +456,11 @@ export class DBHelper {
454456 } ) ;
455457
456458 if ( results . length > 0 ) {
457- user . roles = results [ 0 ] . roles ;
459+ user . roles = [ ] ;
460+ results [ 0 ] . roles . forEach ( r => {
461+ const exists = user . roles . filter ( x => x . _id == r . _id ) ;
462+ if ( exists . length == 0 ) user . roles . push ( r ) ;
463+ } ) ;
458464 results [ 0 ] . roles2 . forEach ( r => {
459465 const exists = user . roles . filter ( x => x . _id == r . _id ) ;
460466 if ( exists . length == 0 ) user . roles . push ( r ) ;
@@ -511,15 +517,14 @@ export class DBHelper {
511517 }
512518 return user as any ;
513519 }
514- public async FindRoleByName ( name : string , parent : Span ) : Promise < Role > {
520+ public async FindRoleByName ( name : string , jwt : string , parent : Span ) : Promise < Role > {
515521 await this . init ( ) ;
516522 const span : Span = Logger . otel . startSubSpan ( "dbhelper.FindByUsername" , parent ) ;
517523 try {
518524 let item = await this . memoryCache . wrap ( "rolename_" + name , async ( ) => {
519- const items : Role [ ] = await Config . db . query < Role > ( { query : { name : name , "_type" : "role" } , top : 1 , collectionname : "users" , jwt : Crypt . rootToken ( ) } , parent ) ;
520- if ( items === null || items === undefined || items . length === 0 ) { return null ; }
525+ if ( jwt === null || jwt == undefined || jwt == "" ) { jwt = Crypt . rootToken ( ) ; }
521526 Logger . instanse . debug ( "DBHelper" , "FindRoleByName" , "Add role to cache : " + name ) ;
522- return items [ 0 ] ;
527+ return Config . db . GetOne < Role > ( { query : { name : name , "_type" : "role" } , collectionname : "users" , jwt } , parent )
523528 } ) ;
524529 if ( NoderedUtil . IsNullUndefinded ( item ) ) return null ;
525530 return Role . assign ( item ) ;
@@ -537,15 +542,15 @@ export class DBHelper {
537542 const span : Span = Logger . otel . startSubSpan ( "dbhelper.EnsureRole" , parent ) ;
538543 try {
539544 Logger . instanse . verbose ( "DBHelper" , "EnsureRole" , `FindRoleByName ${ name } ` ) ;
540- let role : Role = await this . FindRoleByName ( name , span ) ;
545+ let role : Role = await this . FindRoleByName ( name , jwt , span ) ;
541546 if ( role == null ) {
542547 Logger . instanse . verbose ( "DBHelper" , "EnsureRole" , `EnsureRole FindRoleById ${ name } ` ) ;
543- role = await this . FindRoleById ( name , null , span ) ;
548+ role = await this . FindRoleById ( id , null , span ) ;
544549 }
545550 if ( role !== null && ( role . _id === id || NoderedUtil . IsNullEmpty ( id ) ) ) { return role ; }
546551 if ( role !== null && ! NoderedUtil . IsNullEmpty ( role . _id ) ) {
547552 Logger . instanse . warn ( "DBHelper" , "EnsureRole" , `Deleting ${ name } with ${ role . _id } not matcing expected id ${ id } ` ) ;
548- await Config . db . DeleteOne ( role . _id , "users" , jwt , span ) ;
553+ await Config . db . DeleteOne ( role . _id , "users" , false , jwt , span ) ;
549554 }
550555 role = new Role ( ) ; role . name = name ; role . _id = id ;
551556 Logger . instanse . verbose ( "DBHelper" , "EnsureRole" , `Adding new role ${ name } ` ) ;
@@ -564,7 +569,7 @@ export class DBHelper {
564569 Logger . otel . endSpan ( span ) ;
565570 }
566571 }
567- public async EnsureUser ( jwt : string , name : string , username : string , id : string , password : string , parent : Span ) : Promise < User > {
572+ public async EnsureUser ( jwt : string , name : string , username : string , id : string , password : string , extraoptions : any , parent : Span ) : Promise < User > {
568573 const span : Span = Logger . otel . startSubSpan ( "dbhelper.ensureUser" , parent ) ;
569574 try {
570575 span ?. addEvent ( "FindByUsernameOrId" ) ;
@@ -578,9 +583,11 @@ export class DBHelper {
578583 if ( user !== null && id !== null ) {
579584 span ?. addEvent ( "Deleting" ) ;
580585 Logger . instanse . warn ( "DBHelper" , "EnsureUser" , `Deleting ${ name } with ${ user . _id } not matcing expected id ${ id } ` ) ;
581- await Config . db . DeleteOne ( user . _id , "users" , jwt , span ) ;
586+ await Config . db . DeleteOne ( user . _id , "users" , false , jwt , span ) ;
582587 }
583- user = new User ( ) ; user . _id = id ; user . name = name ; user . username = username ;
588+ user = new User ( ) ;
589+ if ( ! NoderedUtil . IsNullUndefinded ( extraoptions ) ) user = Object . assign ( user , extraoptions ) ;
590+ user . _id = id ; user . name = name ; user . username = username ;
584591 if ( password !== null && password !== undefined && password !== "" ) {
585592 span ?. addEvent ( "SetPassword" ) ;
586593 await Crypt . SetPassword ( user , password , span ) ;
@@ -607,10 +614,13 @@ export class DBHelper {
607614 public async EnsureNoderedRoles ( user : TokenUser | User , jwt : string , force : boolean , parent : Span ) : Promise < void > {
608615 if ( Config . auto_create_personal_nodered_group || force ) {
609616 let name = user . username ;
610- name = name . split ( "@" ) . join ( "" ) . split ( "." ) . join ( "" ) ;
617+ // name = name.split("@").join("").split(".").join("");
618+ // name = name.toLowerCase();
611619 name = name . toLowerCase ( ) ;
620+ name = name . replace ( / ( [ ^ a - z 0 - 9 ] + ) { 1 , 63 } / gi, "" ) ;
621+
612622
613- let noderedadmins = await this . FindRoleById ( name + "noderedadmins" , jwt , parent ) ;
623+ let noderedadmins = await this . FindRoleByName ( name + "noderedadmins" , jwt , parent ) ;
614624 if ( noderedadmins == null ) {
615625 noderedadmins = await this . EnsureRole ( jwt , name + "noderedadmins" , null , parent ) ;
616626 Base . addRight ( noderedadmins , user . _id , user . username , [ Rights . full_control ] ) ;
@@ -621,10 +631,12 @@ export class DBHelper {
621631 }
622632 if ( Config . auto_create_personal_noderedapi_group || force ) {
623633 let name = user . username ;
624- name = name . split ( "@" ) . join ( "" ) . split ( "." ) . join ( "" ) ;
634+ // name = name.split("@").join("").split(".").join("");
635+ // name = name.toLowerCase();
625636 name = name . toLowerCase ( ) ;
637+ name = name . replace ( / ( [ ^ a - z 0 - 9 ] + ) { 1 , 63 } / gi, "" ) ;
626638
627- let noderedadmins = await this . FindRoleById ( name + "nodered api users" , jwt , parent ) ;
639+ let noderedadmins = await this . FindRoleByName ( name + "nodered api users" , jwt , parent ) ;
628640 if ( noderedadmins == null ) {
629641 noderedadmins = await this . EnsureRole ( jwt , name + "nodered api users" , null , parent ) ;
630642 Base . addRight ( noderedadmins , user . _id , user . username , [ Rights . full_control ] ) ;
0 commit comments