Best JavaScript code snippet using playwright-internal
createIdentityPool.js
Source:createIdentityPool.js
1#!/usr/bin/env node2const path = require('path');3const awscommon = require(path.join(__dirname, 'awscommonutils'));4const fs = require('fs');5const YAML = require('yamljs');6const AwsRequest = require(path.join(__dirname, 'AwsRequest'));7const argv = require('yargs')8.usage('Create the identity pools required for the project.\nIf identity pools with the same name already exist a new pool will not be created and the existing pool infomation will be used.\nUsage: $0 [options]')9.alias('s','baseDefinitionsFile')10.describe('s','yaml file that contains information about your API')11.default('s','./base.definitions.yaml')12.help('h')13.alias('h', 'help')14.argv;15if (!fs.existsSync(argv.baseDefinitionsFile)) {16 throw new Error("Base definitions file \"" + argv.baseDefinitionsFile + "\" not found.");17}18var baseDefinitions = YAML.load(argv.baseDefinitionsFile);19var AWSCLIUserProfile = "default";20if (!awscommon.verifyPath(baseDefinitions,['environment', 'AWSCLIUserProfile'],'s').isVerifyError) {21 AWSCLIUserProfile = baseDefinitions.environment.AWSCLIUserProfile;22} else {23 console.log("using \"default\" AWSCLIUserProfile");24}25console.log("## Creating Identity Pools ##");26awscommon.verifyPath(baseDefinitions, ['cognitoIdentityPoolInfo', 'identityPools'], 'o', "definitions file \""+argv.baseDefinitionsFile+"\"").exitOnError();27var numIdentityPools = Object.keys(baseDefinitions.cognitoIdentityPoolInfo.identityPools).length;28var successDecCount = numIdentityPools;29// first lets get the identity pools to see if one with our name exists already30getIdentityPools(function (serverIdentityPools) {31 // now see which ones are valid and which ones need to be created32 var poolCreateRequests = [];33 Object.keys(baseDefinitions.cognitoIdentityPoolInfo.identityPools).forEach(function (identityPoolKey) {34 var identityPoolName;35 if (awscommon.isValidAWSResourceNamePrefix(baseDefinitions, argv.baseDefinitionsFile)) {36 identityPoolName = baseDefinitions.environment.AWSResourceNamePrefix + identityPoolKey;37 } else {38 throw new Error("Please assign a AWSResourceNamePrefix at 'environment.AWSResourceNamePrefix' in base definitions file '" + argv.baseDefinitionsFile + "'.");39 }40 var poolDef = baseDefinitions.cognitoIdentityPoolInfo.identityPools[identityPoolKey];41 if (serverIdentityPools) {42 for (var index = 0; index < serverIdentityPools.IdentityPools.length; index ++) {43 if (identityPoolName === serverIdentityPools.IdentityPools[index].IdentityPoolName) {44 baseDefinitions.cognitoIdentityPoolInfo.identityPools[identityPoolKey].identityPoolId = serverIdentityPools.IdentityPools[index].IdentityPoolId;45 console.log("Found identity pool \"" + identityPoolName + "\" on aws.");46 setRoles(identityPoolKey);47 updateRolePolicyDocumentStatementConditions(identityPoolKey);48 numIdentityPools --;49 successDecCount --;50 if (numIdentityPools === 0) {51 writeout();52 return;53 } else {54 break;55 }56 }57 }58 }59 // validate to make sure we have everything60 awscommon.verifyPath(poolDef, ['allowUnauthedIdentities'], 'b', "identity pool definition \"" + identityPoolKey + "\"").exitOnError();61 awscommon.verifyPath(poolDef, ['authProviders'], 'o', "identity pool definition \"" + identityPoolKey + "\"").exitOnError();62 var params={63 'identity-pool-name': {type: 'string', value: identityPoolName},64 'profile': {type: 'string', value:AWSCLIUserProfile}65 };66 params[(poolDef.allowUnauthedIdentities ? 'allow-unauthenticated-identities': 'no-allow-unauthenticated-identities')] = {type: 'none'};67 Object.keys(poolDef.authProviders).forEach(function(authProvider) {68 switch (authProvider) {69 case 'custom':70 awscommon.verifyPath(poolDef.authProviders,['custom', 'developerProvider'],'s','custom developer provider for pool "' + identityPoolKey + '""').exitOnError();71 params['developer-provider-name'] = {type: 'string', value:poolDef.authProviders.custom.developerProvider};72 break;73 default:74 }75 });76 poolCreateRequests.push(77 AwsRequest.createRequest({78 serviceName:'cognito-identity',79 functionName:'create-identity-pool',80 context: {poolName: identityPoolName, poolKey: identityPoolKey},81 returnSchema:'json',82 returnValidation:[{path:['IdentityPoolId'], type:'s'}],83 parameters:params84 })85 );86 });87 AwsRequest.createBatch(poolCreateRequests, function (batch) {88 batch.requestArray.forEach(function (request) {89 if (request.response.error) {90 console.log(request.response.error);91 console.log("Failed to create pool " + request.context.poolName + ".");92 } else {93 console.log("Successfully created pool " + request.context.poolName + ".");94 successDecCount --;95 baseDefinitions.cognitoIdentityPoolInfo.identityPools[request.context.poolKey].identityPoolId = request.response.parsedJSON.IdentityPoolId;96 setRoles(request.context.poolKey);97 updateRolePolicyDocumentStatementConditions(request.context.poolKey);98 }99 });100 writeout();101 }).startRequest();102});103function writeout() {104 // now delete role105 awscommon.updateFile(argv.baseDefinitionsFile, function () {106 return YAML.stringify(baseDefinitions, 15);107 }, function (backupErr, writeErr) {108 if (backupErr) {109 console.log("Could not create backup of \"" + argv.baseDefinitionsFile + "\". pool id was not updated.");110 throw backupErr;111 }112 if (writeErr) {113 console.log("Unable to write updated definitions file.");114 throw writeErr;115 }116 if (successDecCount !== 0) {117 console.log("Some creation operations failed.");118 }119 });120}121function getIdentityPools (doneCallback) {122 AwsRequest.createRequest({123 serviceName:'cognito-identity',124 functionName:'list-identity-pools',125 returnSchema:'json',126 returnValidation:[{path:['IdentityPools','IdentityPoolId'], type:'s'},127 {path:['IdentityPools','IdentityPoolName'], type:'s'}],128 parameters:{129 'max-results': {type: 'string', value:'15'},130 'profile': {type: 'string', value:AWSCLIUserProfile}131 }132 }, function(request) {133 if (request.response.error) {134 console.log(request.response.error);135 doneCallback(null);136 return;137 }138 doneCallback(request.response.parsedJSON);139 }).startRequest();140}141function setRoles(identityPoolKey){142 if (!awscommon.verifyPath(baseDefinitions, ['cognitoIdentityPoolInfo', 'identityPools', identityPoolKey, 'roles'], 'o',"").isVerifyError) {143 var roles = {};144 // TODO GET ROLE ARN!!!145 roles = baseDefinitions.cognitoIdentityPoolInfo.identityPools[identityPoolKey].roles;146 var identityPoolRoles = {};147 Object.keys(roles).forEach(function (roleType) {148 identityPoolRoles[roleType] = baseDefinitions.cognitoIdentityPoolInfo.roleDefinitions[roles[roleType]].arnRole;149 });150 AwsRequest.createRequest({151 serviceName: 'cognito-identity',152 functionName: 'set-identity-pool-roles',153 context: {poolKey: identityPoolKey},154 returnSchema:'none',155 parameters: {156 'identity-pool-id' : {type:'string', value:baseDefinitions.cognitoIdentityPoolInfo.identityPools[identityPoolKey].identityPoolId},157 'roles' : {type: 'JSONObject', value:identityPoolRoles},158 'profile': {type: 'string', value:AWSCLIUserProfile}159 }160 },161 function (roleReq) {162 if (roleReq.response.error) {163 throw roleReq.response.error;164 } else {165 console.log("Set Roles for \"" + roleReq.context.poolKey + "\"");166 }167 }).startRequest();168 }169}170function updateRolePolicyDocumentStatementConditions(identityPoolKey) {171 // first get the role172 var roles = baseDefinitions.cognitoIdentityPoolInfo.identityPools[identityPoolKey].roles;173 Object.keys(roles).forEach(function (roleType) {174 var role = roles[roleType];175 if (!awscommon.verifyPath(baseDefinitions,['cognitoIdentityPoolInfo','identityPools',identityPoolKey,'rolePolicyDocumentStatementConditions',role],'a').isVerifyError) {176 // get the role177 var roleName;178 if (awscommon.isValidAWSResourceNamePrefix(baseDefinitions, argv.baseDefinitionsFile)) {179 roleName = baseDefinitions.environment.AWSResourceNamePrefix + role;180 }181 AwsRequest.createRequest({182 serviceName: 'iam',183 functionName: 'get-role',184 context: {poolKey: identityPoolKey, roleKey:role, roleName: roleName},185 returnSchema:'json',186 parameters: {187 'role-name' : {type:'string', value:roleName},188 'profile': {type: 'string', value:AWSCLIUserProfile}189 }190 },191 function (roleReq) {192 if (roleReq.response.error) {193 console.log("no policy document statemets for role \"" + roleReq.context.roleKey + "to update. Is the role created?");194 console.log(roleReq.response.error);195 } else {196 if (!awscommon.verifyPath(roleReq.response.parsedJSON,['Role','AssumeRolePolicyDocument','Statement'],'a').isVerifyError) {197 // for each matching policy action add the conditions198 var statementArray = roleReq.response.parsedJSON.Role.AssumeRolePolicyDocument.Statement;199 var conditionArray = baseDefinitions.cognitoIdentityPoolInfo.identityPools[roleReq.context.poolKey].rolePolicyDocumentStatementConditions[role];200 for (var conditionIndex = 0; conditionIndex < conditionArray.length; conditionIndex ++) {201 for (var statementIndex = 0; statementIndex < statementArray.length; statementIndex ++) {202 if (statementArray[statementIndex].Action === conditionArray[conditionIndex].Action) {203 statementArray[statementIndex].Condition = conditionArray[conditionIndex].Condition;204 // we may want to replace the identity pool ID in some of the conditions205 Object.keys(statementArray[statementIndex].Condition).forEach(function(conditionType) {206 var theCondition = statementArray[statementIndex].Condition[conditionType];207 Object.keys(theCondition).forEach(function(conditionTypeParam) {208 var val = theCondition[conditionTypeParam];209 if (val === '$identityPoolId') {210 theCondition[conditionTypeParam] = baseDefinitions.cognitoIdentityPoolInfo.identityPools[roleReq.context.poolKey].identityPoolId;211 }212 });213 });214 }215 }216 }217 // UPDATE THE MODIFIED POLICY218 AwsRequest.createRequest({219 serviceName: 'iam',220 functionName: 'update-assume-role-policy',221 context: {poolKey: roleReq.context.poolKey, roleName:roleReq.context.roleName},222 returnSchema:'none',223 parameters: {224 'role-name': {type:'string', value:roleReq.context.roleName},225 'policy-document': {type: 'JSONObject', value:roleReq.response.parsedJSON.Role.AssumeRolePolicyDocument},226 'profile': {type: 'string', value:AWSCLIUserProfile},227 }228 },229 function (putPolReq) {230 if (putPolReq.response.error) {231 console.log("Error updating policy doc for role \"" + putPolReq.context.roleName + "\"");232 console.log(putPolReq.response.error);233 } else {234 console.log("Updated policy doc for role \"" + putPolReq.context.roleName + "\"");235 }236 }).startRequest();237 }238 }239 }).startRequest();240 }241 });...
IdentityHashMap.js
Source:IdentityHashMap.js
1$_L(["java.util.AbstractMap","$.AbstractSet","$.Iterator","$.Map","$.MapEntry"],"java.util.IdentityHashMap",["java.lang.IllegalArgumentException","$.IllegalStateException","java.util.AbstractCollection","$.ConcurrentModificationException","java.util.MapEntry.Type","java.util.NoSuchElementException"],function(){2c$=$_C(function(){3this.elementData=null;4this.$size=0;5this.threshold=0;6this.modCount=0;7$_Z(this,arguments);8},java.util,"IdentityHashMap",java.util.AbstractMap,[java.util.Map,java.io.Serializable,Cloneable]);9$_K(c$,10function(){11this.construct(21);12});13$_K(c$,14function(maxSize){15$_R(this,java.util.IdentityHashMap,[]);16if(maxSize>=0){17this.$size=0;18this.threshold=this.getThreshold(maxSize);19this.elementData=this.newElementArray(this.computeElementArraySize());20}else{21throw new IllegalArgumentException();22}},"~N");23$_M(c$,"getThreshold",24($fz=function(maxSize){25return maxSize>3?maxSize:3;26},$fz.isPrivate=true,$fz),"~N");27$_M(c$,"computeElementArraySize",28($fz=function(){29return(Math.floor((this.threshold*10000)/7500))*2;30},$fz.isPrivate=true,$fz));31$_M(c$,"newElementArray",32($fz=function(s){33return new Array(s);34},$fz.isPrivate=true,$fz),"~N");35$_K(c$,36function(map){37this.construct(map.size()<6?11:map.size()*2);38this.putAllImpl(map);39},"java.util.Map");40$_M(c$,"massageValue",41($fz=function(value){42return((value===java.util.IdentityHashMap.NULL_OBJECT)?null:value);43},$fz.isPrivate=true,$fz),"~O");44$_V(c$,"clear",45function(){46this.$size=0;47for(var i=0;i<this.elementData.length;i++){48this.elementData[i]=null;49}50this.modCount++;51});52$_V(c$,"containsKey",53function(key){54if(key==null){55key=java.util.IdentityHashMap.NULL_OBJECT;56}var index=this.findIndex(key,this.elementData);57return this.elementData[index]===key;58},"~O");59$_V(c$,"containsValue",60function(value){61if(value==null){62value=java.util.IdentityHashMap.NULL_OBJECT;63}for(var i=1;i<this.elementData.length;i=i+2){64if(this.elementData[i]===value){65return true;66}}67return false;68},"~O");69$_V(c$,"get",70function(key){71if(key==null){72key=java.util.IdentityHashMap.NULL_OBJECT;73}var index=this.findIndex(key,this.elementData);74if(this.elementData[index]===key){75var result=this.elementData[index+1];76return this.massageValue(result);77}return null;78},"~O");79$_M(c$,"getEntry",80($fz=function(key){81if(key==null){82key=java.util.IdentityHashMap.NULL_OBJECT;83}var index=this.findIndex(key,this.elementData);84if(this.elementData[index]===key){85return this.getEntry(index);86}return null;87},$fz.isPrivate=true,$fz),"~O");88$_M(c$,"getEntry",89($fz=function(index){90var key=this.elementData[index];91var value=this.elementData[index+1];92if(key===java.util.IdentityHashMap.NULL_OBJECT){93key=null;94}if(value===java.util.IdentityHashMap.NULL_OBJECT){95value=null;96}return new java.util.IdentityHashMap.IdentityHashMapEntry(key,value);97},$fz.isPrivate=true,$fz),"~N");98$_M(c$,"findIndex",99($fz=function(key,array){100var length=array.length;101var index=this.getModuloHash(key,length);102var last=(index+length-2)%length;103while(index!=last){104if(array[index]===key||(array[index]==null)){105break;106}index=(index+2)%length;107}108return index;109},$fz.isPrivate=true,$fz),"~O,~A");110$_M(c$,"getModuloHash",111($fz=function(key,length){112return((System.identityHashCode(key)&0x7FFFFFFF)%(Math.floor(length/2)))*2;113},$fz.isPrivate=true,$fz),"~O,~N");114$_V(c$,"put",115function(key,value){116var _key=key;117var _value=value;118if(_key==null){119_key=java.util.IdentityHashMap.NULL_OBJECT;120}if(_value==null){121_value=java.util.IdentityHashMap.NULL_OBJECT;122}var index=this.findIndex(_key,this.elementData);123if(this.elementData[index]!==_key){124this.modCount++;125if(++this.$size>this.threshold){126this.rehash();127index=this.findIndex(_key,this.elementData);128}this.elementData[index]=_key;129this.elementData[index+1]=null;130}var result=this.elementData[index+1];131this.elementData[index+1]=_value;132return this.massageValue(result);133},"~O,~O");134$_V(c$,"putAll",135function(map){136this.putAllImpl(map);137},"java.util.Map");138$_M(c$,"rehash",139($fz=function(){140var newlength=this.elementData.length<<1;141if(newlength==0){142newlength=1;143}var newData=this.newElementArray(newlength);144for(var i=0;i<this.elementData.length;i=i+2){145var key=this.elementData[i];146if(key!=null){147var index=this.findIndex(key,newData);148newData[index]=key;149newData[index+1]=this.elementData[i+1];150}}151this.elementData=newData;152this.computeMaxSize();153},$fz.isPrivate=true,$fz));154$_M(c$,"computeMaxSize",155($fz=function(){156this.threshold=(Math.floor((Math.floor(this.elementData.length/ 2)) * 7500 /10000));157},$fz.isPrivate=true,$fz));158$_V(c$,"remove",159function(key){160if(key==null){161key=java.util.IdentityHashMap.NULL_OBJECT;162}var hashedOk;163var index;164var next;165var hash;166var result;167var object;168index=next=this.findIndex(key,this.elementData);169if(this.elementData[index]!==key){170return null;171}result=this.elementData[index+1];172var length=this.elementData.length;173while(true){174next=(next+2)%length;175object=this.elementData[next];176if(object==null){177break;178}hash=this.getModuloHash(object,length);179hashedOk=hash>index;180if(next<index){181hashedOk=hashedOk||(hash<=next);182}else{183hashedOk=hashedOk&&(hash<=next);184}if(!hashedOk){185this.elementData[index]=object;186this.elementData[index+1]=this.elementData[next+1];187index=next;188}}189this.$size--;190this.modCount++;191this.elementData[index]=null;192this.elementData[index+1]=null;193return this.massageValue(result);194},"~O");195$_V(c$,"entrySet",196function(){197return new java.util.IdentityHashMap.IdentityHashMapEntrySet(this);198});199$_V(c$,"keySet",200function(){201if(this.$keySet==null){202this.$keySet=(($_D("java.util.IdentityHashMap$1")?0:java.util.IdentityHashMap.$IdentityHashMap$1$()),$_N(java.util.IdentityHashMap$1,this,null));203}return this.$keySet;204});205$_V(c$,"values",206function(){207if(this.valuesCollection==null){208this.valuesCollection=(($_D("java.util.IdentityHashMap$2")?0:java.util.IdentityHashMap.$IdentityHashMap$2$()),$_N(java.util.IdentityHashMap$2,this,null));209}return this.valuesCollection;210});211$_V(c$,"equals",212function(object){213if(this===object){214return true;215}if($_O(object,java.util.Map)){216var map=object;217if(this.size()!=map.size()){218return false;219}var set=this.entrySet();220return set.equals(map.entrySet());221}return false;222},"~O");223$_M(c$,"clone",224function(){225try{226return $_U(this,java.util.IdentityHashMap,"clone",[]);227}catch(e){228if($_O(e,CloneNotSupportedException)){229return null;230}else{231throw e;232}233}234});235$_V(c$,"isEmpty",236function(){237return this.$size==0;238});239$_V(c$,"size",240function(){241return this.$size;242});243$_M(c$,"putAllImpl",244($fz=function(map){245if(map.entrySet()!=null){246$_U(this,java.util.IdentityHashMap,"putAll",[map]);247}},$fz.isPrivate=true,$fz),"java.util.Map");248c$.$IdentityHashMap$1$=function(){249$_H();250c$=$_W(java.util,"IdentityHashMap$1",java.util.AbstractSet);251$_V(c$,"contains",252function(object){253return this.b$["java.util.IdentityHashMap"].containsKey(object);254},"~O");255$_V(c$,"size",256function(){257return this.b$["java.util.IdentityHashMap"].size();258});259$_V(c$,"clear",260function(){261this.b$["java.util.IdentityHashMap"].clear();262});263$_V(c$,"remove",264function(key){265if(this.b$["java.util.IdentityHashMap"].containsKey(key)){266this.b$["java.util.IdentityHashMap"].remove(key);267return true;268}return false;269},"~O");270$_V(c$,"iterator",271function(){272return new java.util.IdentityHashMap.IdentityHashMapIterator((($_D("java.util.IdentityHashMap$1$1")?0:java.util.IdentityHashMap.$IdentityHashMap$1$1$()),$_N(java.util.IdentityHashMap$1$1,this,null)),this.b$["java.util.IdentityHashMap"]);273});274c$=$_P();275};276c$.$IdentityHashMap$1$1$=function(){277$_H();278c$=$_W(java.util,"IdentityHashMap$1$1",null,java.util.MapEntry.Type);279$_V(c$,"get",280function(entry){281return entry.key;282},"java.util.MapEntry");283c$=$_P();284};285c$.$IdentityHashMap$2$=function(){286$_H();287c$=$_W(java.util,"IdentityHashMap$2",java.util.AbstractCollection);288$_V(c$,"contains",289function(object){290return this.b$["java.util.IdentityHashMap"].containsValue(object);291},"~O");292$_V(c$,"size",293function(){294return this.b$["java.util.IdentityHashMap"].size();295});296$_V(c$,"clear",297function(){298this.b$["java.util.IdentityHashMap"].clear();299});300$_V(c$,"iterator",301function(){302return new java.util.IdentityHashMap.IdentityHashMapIterator((($_D("java.util.IdentityHashMap$2$1")?0:java.util.IdentityHashMap.$IdentityHashMap$2$1$()),$_N(java.util.IdentityHashMap$2$1,this,null)),this.b$["java.util.IdentityHashMap"]);303});304$_V(c$,"remove",305function(object){306var it=this.iterator();307while(it.hasNext()){308if(object===it.next()){309it.remove();310return true;311}}312return false;313},"~O");314c$=$_P();315};316c$.$IdentityHashMap$2$1$=function(){317$_H();318c$=$_W(java.util,"IdentityHashMap$2$1",null,java.util.MapEntry.Type);319$_V(c$,"get",320function(entry){321return entry.value;322},"java.util.MapEntry");323c$=$_P();324};325$_H();326c$=$_T(java.util.IdentityHashMap,"IdentityHashMapEntry",java.util.MapEntry);327$_V(c$,"equals",328function(a){329if(this===a){330return true;331}if($_O(a,java.util.Map.Entry)){332var b=a;333return(this.key===b.getKey())&&(this.value===b.getValue());334}return false;335},"~O");336$_V(c$,"hashCode",337function(){338return System.identityHashCode(this.key)^System.identityHashCode(this.value);339});340$_V(c$,"toString",341function(){342return this.key+"="+this.value;343});344c$=$_P();345$_H();346c$=$_C(function(){347this.position=0;348this.lastPosition=0;349this.associatedMap=null;350this.expectedModCount=0;351this.type=null;352this.canRemove=false;353$_Z(this,arguments);354},java.util.IdentityHashMap,"IdentityHashMapIterator",null,java.util.Iterator);355$_K(c$,356function(a,b){357this.associatedMap=b;358this.type=a;359this.expectedModCount=b.modCount;360},"java.util.MapEntry.Type,java.util.IdentityHashMap");361$_V(c$,"hasNext",362function(){363while(this.position<this.associatedMap.elementData.length){364if(this.associatedMap.elementData[this.position]==null){365this.position+=2;366}else{367return true;368}}369return false;370});371$_M(c$,"checkConcurrentMod",372function(){373if(this.expectedModCount!=this.associatedMap.modCount){374throw new java.util.ConcurrentModificationException();375}});376$_V(c$,"next",377function(){378this.checkConcurrentMod();379if(!this.hasNext()){380throw new java.util.NoSuchElementException();381}var a=this.associatedMap.getEntry(this.position);382this.lastPosition=this.position;383this.position+=2;384this.canRemove=true;385return this.type.get(a);386});387$_V(c$,"remove",388function(){389this.checkConcurrentMod();390if(!this.canRemove){391throw new IllegalStateException();392}this.canRemove=false;393this.associatedMap.remove(this.associatedMap.elementData[this.lastPosition]);394this.position=this.lastPosition;395this.expectedModCount++;396});397c$=$_P();398$_H();399c$=$_C(function(){400this.associatedMap=null;401$_Z(this,arguments);402},java.util.IdentityHashMap,"IdentityHashMapEntrySet",java.util.AbstractSet);403$_K(c$,404function(a){405$_R(this,java.util.IdentityHashMap.IdentityHashMapEntrySet,[]);406this.associatedMap=a;407},"java.util.IdentityHashMap");408$_M(c$,"hashMap",409function(){410return this.associatedMap;411});412$_V(c$,"size",413function(){414return this.associatedMap.$size;415});416$_V(c$,"clear",417function(){418this.associatedMap.clear();419});420$_V(c$,"remove",421function(a){422if(this.contains(a)){423this.associatedMap.remove((a).getKey());424return true;425}return false;426},"~O");427$_V(c$,"contains",428function(a){429if($_O(a,java.util.Map.Entry)){430var b=this.associatedMap.getEntry((a).getKey());431return b!=null&&b.equals(a);432}return false;433},"~O");434$_V(c$,"iterator",435function(){436return new java.util.IdentityHashMap.IdentityHashMapIterator((($_D("java.util.IdentityHashMap$IdentityHashMapEntrySet$1")?0:java.util.IdentityHashMap.IdentityHashMapEntrySet.$IdentityHashMap$IdentityHashMapEntrySet$1$()),$_N(java.util.IdentityHashMap$IdentityHashMapEntrySet$1,this,null)),this.associatedMap);437});438c$.$IdentityHashMap$IdentityHashMapEntrySet$1$=function(){439$_H();440c$=$_W(java.util,"IdentityHashMap$IdentityHashMapEntrySet$1",null,java.util.MapEntry.Type);441$_V(c$,"get",442function(a){443return a;444},"java.util.MapEntry");445c$=$_P();446};447c$=$_P();448$_S(c$,449"DEFAULT_MAX_SIZE",21,450"loadFactor",7500);451c$.NULL_OBJECT=c$.prototype.NULL_OBJECT=new JavaObject();...
core.js
Source:core.js
1var systemObject = {2 defaultMax : 10,3 buttonsMax : 5,4 tableMax : [], 5 currentPage : [],6 tableData : [],7 tableDataIndex : [],8 tableDataText : [], 9 tableDataFiltered : [],10 pagesAll : [],11 recordsAll : [],12 blocksAll : [],13 blockCurrent : [],14 indexStart : [],15 indexEnd : [],16 indexPrevious : [],17 indexNext : [],18 isEmpty : function(thisValue) {19 "use strict";20 if ($.isArray(thisValue)) {21 return thisValue.length > 0 ? false : true;22 } else {23 return thisValue !== '' && typeof thisValue !== 'undefined' ? false : true;24 }25 },26 outerHtml : function(obj) {27 "use strict";28 return obj.wrap('<div>').parent().html(); 29 },30 setCurrentPage : function(thisIdentity, thisPage) {31 "use strict";32 thisPage = !this.isEmpty(thisPage) ? thisPage : 1;33 this.currentPage[thisIdentity] = thisPage;34 $('#' + thisIdentity).attr('data-page', thisPage);35 },36 pagingTemplate : function(thisIdentity, thisButtons) {37 "use strict";38 if (!this.isEmpty(thisButtons)) {39 var thisPaging = '<ul class="paging" data-form="' + thisIdentity + '">';40 thisPaging += thisButtons;41 thisPaging += '</ul>';42 return thisPaging;43 }44 },45 feedPaging : function(thisIdentity, thisButtons) {46 "use strict";47 // replace pagination48 $('#' + thisIdentity + 'Paging').html(this.pagingTemplate(thisIdentity, thisButtons));49 // replace number of records50 $('#' + thisIdentity + 'Count').html(this.recordsAll[thisIdentity]);51 // replace page52 $('#' + thisIdentity + 'Page').html(this.currentPage[thisIdentity]);53 // replace page of54 $('#' + thisIdentity + 'PageOf').html(this.pagesAll[thisIdentity]);55 },56 pagingLoad : function(thisIdentity, thisArray) {57 "use strict";58 if (!this.isEmpty(thisIdentity)) {59 var thisButtons = [];60 if (!this.isEmpty(thisArray)) {61 62 if ($('#' + thisIdentity + 'Paging').length > 0) {63 64 // first / previous buttons65 if (this.currentPage[thisIdentity] > 1) {66 67 thisButtons.push('<li><span data-index="1"><<</span></li>');68 thisButtons.push('<li><span data-index="' + parseInt((this.currentPage[thisIdentity] - 1), 10) + '"><</span></li>');69 70 } else {71 72 thisButtons.push('<li class="inactive"><<</li>');73 thisButtons.push('<li class="inactive"><</li>');74 75 }76 77 // previous block button78 if (this.blockCurrent[thisIdentity] > 1) {79 thisButtons.push('<li><span data-index="' + this.indexPrevious[thisIdentity] + '">...</span></li>');80 } 81 82 // middle buttons83 for (var i = this.indexStart[thisIdentity]; i <= this.indexEnd[thisIdentity]; i++) {84 var thisButton;85 if (i == this.currentPage[thisIdentity]) {86 thisButton = '<li><span class="active">' + i + '</span></li>';87 } else {88 thisButton = '<li><span data-index="' + i + '">' + i + '</span></li>';89 }90 thisButtons.push(thisButton);91 }92 93 // next block button94 if (this.blockCurrent[thisIdentity] < this.blocksAll[thisIdentity]) {95 thisButtons.push('<li><span data-index="' + this.indexNext[thisIdentity] + '">...</span></li>');96 }97 98 // next / last buttons99 if (this.currentPage[thisIdentity] < this.pagesAll[thisIdentity]) {100 101 thisButtons.push('<li><span data-index="' + (parseInt(this.currentPage[thisIdentity], 10) + 1) + '">></span></li>'); 102 thisButtons.push('<li><span data-index="' + this.pagesAll[thisIdentity] + '">>></span></li>');103 104 } else {105 106 thisButtons.push('<li class="inactive">></li>'); 107 thisButtons.push('<li class="inactive">>></li>');108 109 }110 111 this.feedPaging(thisIdentity, thisButtons.join(''));112 113 }114 115 } else {116 117 // if array is empty118 thisButtons.push('<li class="inactive"><<</li>'); 119 thisButtons.push('<li class="inactive"><</li>');120 thisButtons.push('<li class="inactive">1</li>');121 thisButtons.push('<li class="inactive">></li>'); 122 thisButtons.push('<li class="inactive">>></li>');123 124 this.feedPaging(thisIdentity, thisButtons.join(''));125 126 }127 }128 },129 calculate : function(thisIdentity, thisArray) {130 "use strict";131 // all records132 this.recordsAll[thisIdentity] = thisArray.length;133 // rounding up the number of pages134 this.pagesAll[thisIdentity] = Math.ceil(this.recordsAll[thisIdentity] / this.tableMax[thisIdentity]);135 // correct current page if necessary136 this.currentPage[thisIdentity] = this.currentPage[thisIdentity] < this.pagesAll[thisIdentity] ?137 this.currentPage[thisIdentity] : this.pagesAll[thisIdentity];138 // setting current page number139 this.setCurrentPage(thisIdentity, this.currentPage[thisIdentity]);140 // calculate blocks141 this.blocksAll[thisIdentity] = Math.ceil(this.pagesAll[thisIdentity] / this.buttonsMax);142 this.blockCurrent[thisIdentity] = Math.ceil(this.currentPage[thisIdentity] / this.buttonsMax);143 // start index144 this.indexStart[thisIdentity] = Math.ceil( 145 ( 146 (this.blockCurrent[thisIdentity] - 1) * this.buttonsMax 147 ) + 1 148 );149 // if there is only one block150 // or it's the last block151 // get the right number of buttons152 var thisButtonsMaxEnd = this.buttonsMax;153 if (this.blockCurrent[thisIdentity] == this.blocksAll[thisIdentity]) {154 // if there's only one block of buttons155 if (this.blocksAll[thisIdentity] == 1) {156 thisButtonsMaxEnd = this.pagesAll[thisIdentity];157 } else {158 thisButtonsMaxEnd = Math.ceil(159 parseInt( (this.pagesAll[thisIdentity] - this.indexStart[thisIdentity]), 10) + 1160 );161 }162 }163 this.indexEnd[thisIdentity] = parseInt(164 ( (this.indexStart[thisIdentity] - 1) + thisButtonsMaxEnd ), 10165 );166 this.indexPrevious[thisIdentity] = parseInt(167 (this.indexStart[thisIdentity] - this.buttonsMax), 10168 );169 this.indexNext[thisIdentity] = parseInt(170 (this.indexEnd[thisIdentity] + 1), 10171 );172 },173 paging : function(obj) {174 "use strict";175 obj.live('click', function(e) {176 e.preventDefault();177 var thisIdentity = $(this).closest('ul').attr('data-form');178 var thisIndex = $(this).attr('data-index');179 if (!systemObject.isEmpty(thisIdentity)) {180 // update current page number181 systemObject.setCurrentPage(thisIdentity, thisIndex);182 if (!systemObject.isEmpty(systemObject.tableDataFiltered[thisIdentity])) {183 systemObject.limit(thisIdentity, systemObject.tableDataFiltered[thisIdentity]);184 } else {185 systemObject.limit(thisIdentity, systemObject.tableData[thisIdentity]);186 }187 }188 });189 },190 limit : function(thisIdentity, thisArray) {191 "use strict";192 if (!this.isEmpty(thisIdentity)) {193 this.calculate(thisIdentity, thisArray);194 if (!this.isEmpty(thisArray)) {195 var thisFiltered = [];196 if (this.pagesAll[thisIdentity] > 1) {197 var thisStartIndex = ( 198 parseInt((this.currentPage[thisIdentity] - 1), 10) * 199 this.tableMax[thisIdentity]200 );201 var thisEndIndex = (202 parseInt(thisStartIndex, 10) + this.tableMax[thisIdentity]203 );204 thisFiltered = thisArray.slice(thisStartIndex, thisEndIndex);205 } else {206 thisFiltered = thisArray.slice(0, this.tableMax[thisIdentity]);207 }208 $('#' + thisIdentity + 'Table tbody').html(thisFiltered.join(''));209 } else {210 var thisSpan = $('#' + thisIdentity + 'Table th').length;211 var thisNoRecords = '<tr><td colspan="' + thisSpan + '"';212 thisNoRecords += ' class="bgOrange">';213 thisNoRecords += 'There are no records matching your search criteria.';214 thisNoRecords += '</td></tr>'; 215 $('#' + thisIdentity + 'Table tbody').html($(thisNoRecords).show());216 }217 this.pagingLoad(thisIdentity, thisArray);218 } 219 },220 loadTable : function(obj) {221 "use strict";222 if (obj.length > 0) {223 $.each(obj, function() {224 var thisObj = $(this);225 var thisUrl = thisObj.attr('data-url');226 var thisIdentity = thisObj.attr('id');227 var thisMax = thisObj.attr('data-max');228 systemObject.tableMax[thisIdentity] = !systemObject.isEmpty(thisMax) ? 229 parseInt(thisMax, 10) : systemObject.defaultMax;230 var thisCurrentPage = thisObj.attr('data-page');231 systemObject.currentPage[thisIdentity] = !systemObject.isEmpty(thisCurrentPage) ? 232 parseInt(thisCurrentPage, 10) : 1;233 $.ajax({234 type : 'GET',235 url : thisUrl,236 dataType : 'json',237 success : function(data) {238 if (data && data.rows && data.rowsIndex && data.text) {239 systemObject.tableData[thisIdentity] = data.rows;240 systemObject.tableDataIndex[thisIdentity] = data.rowsIndex;241 systemObject.tableDataText[thisIdentity] = data.text;242 systemObject.limit(thisIdentity, systemObject.tableData[thisIdentity]);243 }244 }245 });246 });247 }248 },249 search : function(obj) {250 "use strict";251 $.each(obj, function() {252 var thisObj = $(this);253 var thisIdentity = thisObj.attr('data-form');254 thisObj.live('keyup keypress', function(e) {255 var thisCode = (e.keyCode ? e.keyCode : e.which);256 if (thisCode === 13) {257 e.preventDefault();258 } else {259 if (!systemObject.isEmpty(systemObject.tableData[thisIdentity])) {260 if (e.type === 'keyup') {261 systemObject.setCurrentPage(thisIdentity);262 systemObject.tableDataFiltered[thisIdentity] = [];263 var thisValue = $(this).val().toLowerCase();264 if (!systemObject.isEmpty(thisValue)) {265 var thisValues = thisValue.split(' ');266 for (var tIndex in systemObject.tableDataText[thisIdentity]) {267 $.each(thisValues, function(k, v) {268 if (systemObject.tableDataText[thisIdentity][tIndex].indexOf(v) !== -1) {269 var thisItem = systemObject.outerHtml($(systemObject.tableDataIndex[thisIdentity][tIndex]));270 systemObject.tableDataFiltered[thisIdentity].push(thisItem);271 return false;272 }273 });274 }275 systemObject.limit(thisIdentity, systemObject.tableDataFiltered[thisIdentity]);276 } else {277 systemObject.limit(thisIdentity, systemObject.tableData[thisIdentity]);278 }279 }280 }281 }282 });283 });284 }285};286$(function() {287 "use strict";288 systemObject.loadTable($('.loadTable'));289 systemObject.paging($('.paging li span'));290 systemObject.search($('.search'));...
custom_oauth_server.js
Source:custom_oauth_server.js
1/*globals OAuth*/2import _ from 'underscore';3const logger = new Logger('CustomOAuth');4const Services = {};5const BeforeUpdateOrCreateUserFromExternalService = [];6export class CustomOAuth {7 constructor(name, options) {8 logger.debug('Init CustomOAuth', name, options);9 this.name = name;10 if (!Match.test(this.name, String)) {11 throw new Meteor.Error('CustomOAuth: Name is required and must be String');12 }13 if (Services[this.name]) {14 Services[this.name].configure(options);15 return;16 }17 Services[this.name] = this;18 this.configure(options);19 this.userAgent = 'Meteor';20 if (Meteor.release) {21 this.userAgent += `/${ Meteor.release }`;22 }23 Accounts.oauth.registerService(this.name);24 this.registerService();25 this.addHookToProcessUser();26 }27 configure(options) {28 if (!Match.test(options, Object)) {29 throw new Meteor.Error('CustomOAuth: Options is required and must be Object');30 }31 if (!Match.test(options.serverURL, String)) {32 throw new Meteor.Error('CustomOAuth: Options.serverURL is required and must be String');33 }34 if (!Match.test(options.tokenPath, String)) {35 options.tokenPath = '/oauth/token';36 }37 if (!Match.test(options.identityPath, String)) {38 options.identityPath = '/me';39 }40 this.serverURL = options.serverURL;41 this.tokenPath = options.tokenPath;42 this.identityPath = options.identityPath;43 this.tokenSentVia = options.tokenSentVia;44 this.identityTokenSentVia = options.identityTokenSentVia;45 this.usernameField = (options.usernameField || '').trim();46 this.mergeUsers = options.mergeUsers;47 if (this.identityTokenSentVia == null || this.identityTokenSentVia === 'default') {48 this.identityTokenSentVia = this.tokenSentVia;49 }50 if (!/^https?:\/\/.+/.test(this.tokenPath)) {51 this.tokenPath = this.serverURL + this.tokenPath;52 }53 if (!/^https?:\/\/.+/.test(this.identityPath)) {54 this.identityPath = this.serverURL + this.identityPath;55 }56 if (Match.test(options.addAutopublishFields, Object)) {57 Accounts.addAutopublishFields(options.addAutopublishFields);58 }59 }60 getAccessToken(query) {61 const config = ServiceConfiguration.configurations.findOne({service: this.name});62 if (!config) {63 throw new ServiceConfiguration.ConfigError();64 }65 let response = undefined;66 const allOptions = {67 headers: {68 'User-Agent': this.userAgent, // http://doc.gitlab.com/ce/api/users.html#Current-user69 Accept: 'application/json'70 },71 params: {72 code: query.code,73 redirect_uri: OAuth._redirectUri(this.name, config),74 grant_type: 'authorization_code',75 state: query.state76 }77 };78 // Only send clientID / secret once on header or payload.79 if (this.tokenSentVia === 'header') {80 allOptions['auth'] = `${ config.clientId }:${ OAuth.openSecret(config.secret) }`;81 } else {82 allOptions['params']['client_secret'] = OAuth.openSecret(config.secret);83 allOptions['params']['client_id'] = config.clientId;84 }85 try {86 response = HTTP.post(this.tokenPath, allOptions);87 } catch (err) {88 const error = new Error(`Failed to complete OAuth handshake with ${ this.name } at ${ this.tokenPath }. ${ err.message }`);89 throw _.extend(error, {response: err.response});90 }91 let data;92 if (response.data) {93 data = response.data;94 } else {95 data = JSON.parse(response.content);96 }97 if (data.error) { //if the http response was a json object with an error attribute98 throw new Error(`Failed to complete OAuth handshake with ${ this.name } at ${ this.tokenPath }. ${ data.error }`);99 } else {100 return data.access_token;101 }102 }103 getIdentity(accessToken) {104 const params = {};105 const headers = {106 'User-Agent': this.userAgent // http://doc.gitlab.com/ce/api/users.html#Current-user107 };108 if (this.identityTokenSentVia === 'header') {109 headers['Authorization'] = `Bearer ${ accessToken }`;110 } else {111 params['access_token'] = accessToken;112 }113 try {114 const response = HTTP.get(this.identityPath, {115 headers,116 params117 });118 let data;119 if (response.data) {120 data = response.data;121 } else {122 data = JSON.parse(response.content);123 }124 logger.debug('Identity response', JSON.stringify(data, null, 2));125 return data;126 } catch (err) {127 const error = new Error(`Failed to fetch identity from ${ this.name } at ${ this.identityPath }. ${ err.message }`);128 throw _.extend(error, {response: err.response});129 }130 }131 registerService() {132 const self = this;133 OAuth.registerService(this.name, 2, null, (query) => {134 const accessToken = self.getAccessToken(query);135 // console.log 'at:', accessToken136 let identity = self.getIdentity(accessToken);137 if (identity) {138 // Set 'id' to '_id' for any sources that provide it139 if (identity._id && !identity.id) {140 identity.id = identity._id;141 }142 // Fix for Reddit143 if (identity.result) {144 identity = identity.result;145 }146 // Fix WordPress-like identities having 'ID' instead of 'id'147 if (identity.ID && !identity.id) {148 identity.id = identity.ID;149 }150 // Fix Auth0-like identities having 'user_id' instead of 'id'151 if (identity.user_id && !identity.id) {152 identity.id = identity.user_id;153 }154 if (identity.CharacterID && !identity.id) {155 identity.id = identity.CharacterID;156 }157 // Fix Dataporten having 'user.userid' instead of 'id'158 if (identity.user && identity.user.userid && !identity.id) {159 if (identity.user.userid_sec && identity.user.userid_sec[0]) {160 identity.id = identity.user.userid_sec[0];161 } else {162 identity.id = identity.user.userid;163 }164 identity.email = identity.user.email;165 }166 // Fix for Xenforo [BD]API plugin for 'user.user_id; instead of 'id'167 if (identity.user && identity.user.user_id && !identity.id) {168 identity.id = identity.user.user_id;169 identity.email = identity.user.user_email;170 }171 // Fix general 'phid' instead of 'id' from phabricator172 if (identity.phid && !identity.id) {173 identity.id = identity.phid;174 }175 // Fix Keycloak-like identities having 'sub' instead of 'id'176 if (identity.sub && !identity.id) {177 identity.id = identity.sub;178 }179 // Fix general 'userid' instead of 'id' from provider180 if (identity.userid && !identity.id) {181 identity.id = identity.userid;182 }183 // Fix when authenticating from a meteor app with 'emails' field184 if (!identity.email && (identity.emails && Array.isArray(identity.emails) && identity.emails.length >= 1)) {185 identity.email = identity.emails[0].address ? identity.emails[0].address : undefined;186 }187 }188 // console.log 'id:', JSON.stringify identity, null, ' '189 const serviceData = {190 _OAuthCustom: true,191 accessToken192 };193 _.extend(serviceData, identity);194 const data = {195 serviceData,196 options: {197 profile: {198 name: identity.name || identity.username || identity.nickname || identity.CharacterName || identity.userName || identity.preferred_username || (identity.user && identity.user.name)199 }200 }201 };202 // console.log data203 return data;204 });205 }206 retrieveCredential(credentialToken, credentialSecret) {207 return OAuth.retrieveCredential(credentialToken, credentialSecret);208 }209 getUsername(data) {210 let username = '';211 username = this.usernameField.split('.').reduce(function(prev, curr) {212 return prev ? prev[curr] : undefined;213 }, data);214 if (!username) {215 throw new Meteor.Error('field_not_found', `Username field "${ this.usernameField }" not found in data`, data);216 }217 return username;218 }219 addHookToProcessUser() {220 BeforeUpdateOrCreateUserFromExternalService.push((serviceName, serviceData/*, options*/) => {221 if (serviceName !== this.name) {222 return;223 }224 if (this.usernameField) {225 const username = this.getUsername(serviceData);226 const user = RocketChat.models.Users.findOneByUsername(username);227 if (!user) {228 return;229 }230 // User already created or merged231 if (user.services && user.services[serviceName] && user.services[serviceName].id === serviceData.id) {232 return;233 }234 if (this.mergeUsers !== true) {235 throw new Meteor.Error('CustomOAuth', `User with username ${ user.username } already exists`);236 }237 const serviceIdKey = `services.${ serviceName }.id`;238 const update = {239 $set: {240 [serviceIdKey]: serviceData.id241 }242 };243 RocketChat.models.Users.update({_id: user._id}, update);244 }245 });246 Accounts.validateNewUser((user) => {247 if (!user.services || !user.services[this.name] || !user.services[this.name].id) {248 return true;249 }250 if (this.usernameField) {251 user.username = this.getUsername(user.services[this.name]);252 }253 return true;254 });255 }256}257const updateOrCreateUserFromExternalService = Accounts.updateOrCreateUserFromExternalService;258Accounts.updateOrCreateUserFromExternalService = function(/*serviceName, serviceData, options*/) {259 for (const hook of BeforeUpdateOrCreateUserFromExternalService) {260 hook.apply(this, arguments);261 }262 return updateOrCreateUserFromExternalService.apply(this, arguments);...
index.js
Source:index.js
1import signal from 'pico-signals';2import { assertApp } from '../identities';3import { UnknownSessionError, IdentityRevokedError } from '../utils/errors';4import { loadSessions, createSession, removeSession, assertSessionOptions } from './session';5class Sessions {6 #sessions;7 #storage;8 #identities;9 #identityListeners = new Map();10 #onDestroy = signal();11 constructor(sessions, storage, identities) {12 this.#sessions = sessions;13 this.#storage = storage;14 this.#identities = identities;15 this.#identities.onLoad(this.#handleIdentitiesLoad);16 this.#identities.onChange(this.#handleIdentitiesChange);17 }18 get(sessionId) {19 const session = this.#sessions[sessionId];20 if (!session || !session.isValid(sessionId)) {21 throw new UnknownSessionError(sessionId);22 }23 return session;24 }25 isValid(sessionId) {26 const session = this.#sessions[sessionId];27 return Boolean(session && session.isValid());28 }29 async create(identityId, app, options) {30 assertApp(app);31 assertSessionOptions(options);32 const identity = this.#identities.get(identityId);33 if (identity.isRevoked()) {34 throw new IdentityRevokedError(`Unable to create session for revoked identity: ${identityId}`);35 }36 const session = this.#getSessionByIdentityAndAppId(identityId, app.id);37 if (session) {38 if (session.isValid()) {39 return session;40 }41 await this.destroy(session.getId());42 }43 const newSession = await createSession(identity, app, options, this.#storage, this.#identities);44 const newSessionId = newSession.getId();45 this.#sessions[newSessionId] = newSession;46 try {47 await identity.apps.add(app);48 await identity.apps.linkCurrentDevice(app.id);49 } catch (err) {50 delete this.#sessions[newSessionId];51 try {52 await removeSession(newSessionId, this.#storage).catch(() => {});53 } catch (err) {54 console.warn(`Unable to remove session "${newSessionId}" after failed attempt to create app "${app.id}" or link it to "${identityId}". Will cleanup on when identities got loaded again.`, err);55 }56 throw err;57 }58 return newSession;59 }60 async destroy(sessionId) {61 const session = this.#sessions[sessionId];62 if (!session) {63 return;64 }65 await removeSession(sessionId, this.#storage);66 delete this.#sessions[sessionId];67 const appId = session.getAppId();68 const identityId = session.getIdentityId();69 if (this.#identities.isLoaded() && this.#identities.has(identityId)) {70 const identity = this.#identities.get(identityId);71 try {72 await identity.apps.unlinkCurrentDevice(appId);73 } catch (err) {74 console.warn(`Something went wrong unlinking current device with app "${appId}" for identity "${identityId}". Will retry on reload.`, err);75 }76 }77 this.#onDestroy.dispatch(sessionId, session.getMeta());78 }79 onDestroy(fn) {80 return this.#onDestroy.add(fn);81 }82 #getSessionByIdentityAndAppId = (identityId, appId, sessions = this.#sessions) =>83 Object.values(sessions).find((session) => session.getAppId() === appId && session.getIdentityId() === identityId);84 #getSessionsByIdentityId = (identityId, sessions = this.#sessions) =>85 Object.values(sessions).filter((session) => session.getIdentityId() === identityId);86 #destroySessionsByIdentityId = async (identityId) => {87 const identitySessions = this.#getSessionsByIdentityId(identityId);88 await Promise.all(identitySessions.map((session) => this.destroy(session.getId())));89 }90 #addIdentityListeners = (identityId) => {91 if (this.#identityListeners.has(identityId)) {92 return;93 }94 const identity = this.#identities.get(identityId);95 const removeRevokeListener = identity.onRevoke((...args) => this.#handleIdentityRevoke(identityId, ...args));96 const removeLinkChangeListener = identity.apps.onLinkCurrentChange((...args) => this.#handleLinkCurrentChange(identityId, ...args));97 this.#identityListeners.set(identityId, { removeRevokeListener, removeLinkChangeListener });98 }99 #removeIdentityListeners = (identityId) => {100 if (!this.#identityListeners.has(identityId)) {101 return;102 }103 const listeners = this.#identityListeners.get(identityId);104 listeners.removeRevokeListener();105 listeners.removeLinkChangeListener();106 this.#identityListeners.delete(identityId);107 }108 #handleIdentitiesLoad = () => {109 Object.values(this.#identities.list()).forEach((identity) => {110 const apps = identity.apps.list();111 const identityId = identity.getId();112 apps.forEach((app) => {113 const session = this.#getSessionByIdentityAndAppId(identityId, app.id);114 if (!session) {115 identity.apps.unlinkCurrentDevice(app.id)116 .catch((err) => console.warn(`Something went wrong unlinking current device with app "${app.id}" for identity "${identityId}". Will retry on reload.`, err));117 }118 });119 this.#addIdentityListeners(identity.getId());120 });121 Object.values(this.#sessions).forEach((session) => {122 const sessionId = session.getId();123 const identityId = session.getIdentityId();124 if (!this.#identities.has(identityId) || this.#identities.get(identityId).isRevoked()) {125 this.destroy(sessionId)126 .catch((err) => console.warn(`Something went wrong destroying session "${sessionId}" for identity "${identityId}". Will retry on reload.`, err));127 }128 });129 }130 #handleIdentitiesChange = async (identities, operation) => {131 const { type, id: identityId } = operation;132 if (type !== 'remove') {133 this.#addIdentityListeners(identityId);134 return;135 }136 try {137 await this.#destroySessionsByIdentityId(identityId);138 this.#removeIdentityListeners(identityId);139 } catch (err) {140 console.warn(`Something went wrong destroying sessions for removed identity "${identityId}". Will retry on reload.`);141 }142 }143 #handleIdentityRevoke = async (identityId) => {144 try {145 await this.#destroySessionsByIdentityId(identityId);146 } catch (err) {147 console.warn(`Something went wrong destroying sessions for revoked identity "${identityId}". Will retry on reload.`);148 }149 }150 #handleLinkCurrentChange = async (identityId, { appId, isLinked }) => {151 const session = this.#getSessionByIdentityAndAppId(identityId, appId);152 if (session && !isLinked) {153 const sessionId = session.getId();154 try {155 await this.destroy(session.getId());156 } catch (err) {157 console.warn(`Something went wrong destroying session "${sessionId}" for app "${appId}" of identity "${identityId}" . Will retry on reload.`);158 }159 } else if (!session && isLinked) {160 console.warn(`App "${appId}" of identity "${identityId}" is linked but there's no session. Will fix on reload.`);161 }162 }163}164const createSessions = async (storage, identities) => {165 const sessions = await loadSessions(storage);166 return new Sessions(sessions, storage, identities);167};...
identity-test.js
Source:identity-test.js
...6 "identity": {7 topic: load("scale/identity").expression("d3.scale.identity"),8 "domain and range": {9 "are identical": function(identity) {10 var x = identity();11 assert.strictEqual(x.domain, x.range);12 assert.strictEqual(x.domain(), x.range());13 var x = identity().domain([-10, 0, 100]);14 assert.deepEqual(x.range(), [-10, 0, 100]);15 var x = identity().range([-10, 0, 100]);16 assert.deepEqual(x.domain(), [-10, 0, 100]);17 },18 "default to [0, 1]": function(identity) {19 var x = identity();20 assert.deepEqual(x.domain(), [0, 1]);21 assert.deepEqual(x.range(), [0, 1]);22 assert.strictEqual(x(.5), .5);23 },24 "coerce values to numbers": function(identity) {25 var x = identity().domain([new Date(1990, 0, 1), new Date(1991, 0, 1)]);26 assert.typeOf(x.domain()[0], "number");27 assert.typeOf(x.domain()[1], "number");28 assert.strictEqual(x.domain()[0], +new Date(1990, 0, 1));29 assert.strictEqual(x.domain()[1], +new Date(1991, 0, 1));30 assert.typeOf(x(new Date(1989, 09, 20)), "number");31 assert.strictEqual(x(new Date(1989, 09, 20)), +new Date(1989, 09, 20));32 var x = identity().domain(["0", "1"]);33 assert.typeOf(x.domain()[0], "number");34 assert.typeOf(x.domain()[1], "number");35 assert.strictEqual(x(.5), .5);36 var x = identity().domain([new Number(0), new Number(1)]);37 assert.typeOf(x.domain()[0], "number");38 assert.typeOf(x.domain()[1], "number");39 assert.strictEqual(x(.5), .5);40 var x = identity().range([new Date(1990, 0, 1), new Date(1991, 0, 1)]);41 assert.typeOf(x.range()[0], "number");42 assert.typeOf(x.range()[1], "number");43 assert.strictEqual(x.range()[0], +new Date(1990, 0, 1));44 assert.strictEqual(x.range()[1], +new Date(1991, 0, 1));45 assert.typeOf(x(new Date(1989, 09, 20)), "number");46 assert.strictEqual(x(new Date(1989, 09, 20)), +new Date(1989, 09, 20));47 var x = identity().range(["0", "1"]);48 assert.typeOf(x.range()[0], "number");49 assert.typeOf(x.range()[1], "number");50 assert.strictEqual(x(.5), .5);51 var x = identity().range([new Number(0), new Number(1)]);52 assert.typeOf(x.range()[0], "number");53 assert.typeOf(x.range()[1], "number");54 assert.strictEqual(x(.5), .5);55 },56 "can specify a polyidentity domain and range": function(identity) {57 var x = identity().domain([-10, 0, 100]);58 assert.deepEqual(x.domain(), [-10, 0, 100]);59 assert.strictEqual(x(-5), -5);60 assert.strictEqual(x(50), 50);61 assert.strictEqual(x(75), 75);62 var x = identity().range([-10, 0, 100]);63 assert.deepEqual(x.range(), [-10, 0, 100]);64 assert.strictEqual(x(-5), -5);65 assert.strictEqual(x(50), 50);66 assert.strictEqual(x(75), 75);67 },68 "do not affect the identity function": function(identity) {69 var x = identity().domain([Infinity, NaN]);70 assert.strictEqual(x(42), 42);71 assert.strictEqual(x.invert(-42), -42);72 }73 },74 "is the identity function": function(identity) {75 var x = identity().domain([1, 2]);76 assert.strictEqual(x(.5), .5);77 assert.strictEqual(x(1), 1);78 assert.strictEqual(x(1.5), 1.5);79 assert.strictEqual(x(2), 2);80 assert.strictEqual(x(2.5), 2.5);81 },82 "coerces input to a number": function(identity) {83 var x = identity().domain([1, 2]);84 assert.strictEqual(x("2"), 2);85 },86 "invert": {87 "is the identity function": function(identity) {88 var x = identity().domain([1, 2]);89 assert.strictEqual(x.invert(.5), .5);90 assert.strictEqual(x.invert(1), 1);91 assert.strictEqual(x.invert(1.5), 1.5);92 assert.strictEqual(x.invert(2), 2);93 assert.strictEqual(x.invert(2.5), 2.5);94 },95 "coerces range value to numbers": function(identity) {96 var x = identity().range(["0", "2"]);97 assert.strictEqual(x.invert("1"), 1);98 var x = identity().range([new Date(1990, 0, 1), new Date(1991, 0, 1)]);99 assert.strictEqual(x.invert(new Date(1990, 6, 2, 13)), +new Date(1990, 6, 2, 13));100 var x = identity().range(["#000", "#fff"]);101 assert.isNaN(x.invert("#999"));102 },103 "coerces input to a number": function(identity) {104 var x = identity().domain([1, 2]);105 assert.strictEqual(x.invert("2"), 2);106 }107 },108 "ticks": {109 "generates ticks of varying degree": function(identity) {110 var x = identity();111 assert.deepEqual(x.ticks(1).map(x.tickFormat(1)), [0, 1]);112 assert.deepEqual(x.ticks(2).map(x.tickFormat(2)), [0, .5, 1]);113 assert.deepEqual(x.ticks(5).map(x.tickFormat(5)), [0, .2, .4, .6, .8, 1]);114 assert.deepEqual(x.ticks(10).map(x.tickFormat(10)), [0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1]);115 var x = identity().domain([1, 0]);116 assert.deepEqual(x.ticks(1).map(x.tickFormat(1)), [0, 1]);117 assert.deepEqual(x.ticks(2).map(x.tickFormat(2)), [0, .5, 1]);118 assert.deepEqual(x.ticks(5).map(x.tickFormat(5)), [0, .2, .4, .6, .8, 1]);119 assert.deepEqual(x.ticks(10).map(x.tickFormat(10)), [0, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1]);120 },121 "formats ticks with the appropriate precision": function(identity) {122 var x = identity().domain([.123456789, 1.23456789]);123 assert.strictEqual(x.tickFormat(1)(x.ticks(1)[0]), "1");124 assert.strictEqual(x.tickFormat(2)(x.ticks(2)[0]), "0.5");125 assert.strictEqual(x.tickFormat(4)(x.ticks(4)[0]), "0.2");126 assert.strictEqual(x.tickFormat(8)(x.ticks(8)[0]), "0.2");127 assert.strictEqual(x.tickFormat(16)(x.ticks(16)[0]), "0.2");128 assert.strictEqual(x.tickFormat(32)(x.ticks(32)[0]), "0.15");129 assert.strictEqual(x.tickFormat(64)(x.ticks(64)[0]), "0.14");130 assert.strictEqual(x.tickFormat(128)(x.ticks(128)[0]), "0.13");131 assert.strictEqual(x.tickFormat(256)(x.ticks(256)[0]), "0.125");132 }133 },134 "copy": {135 "changes to the domain or range are isolated": function(identity) {136 var x = identity(), y = x.copy();137 x.domain([1, 2]);138 assert.deepEqual(y.domain(), [0, 1]);139 y.domain([2, 3]);140 assert.deepEqual(x.domain(), [1, 2]);141 assert.deepEqual(y.domain(), [2, 3]);142 var x = identity(), y = x.copy();143 x.range([1, 2]);144 assert.deepEqual(y.range(), [0, 1]);145 y.range([2, 3]);146 assert.deepEqual(x.range(), [1, 2]);147 assert.deepEqual(y.range(), [2, 3]);148 }149 }150 }151});...
numerical-integration.js
Source:numerical-integration.js
...9 if (func == "reciprocal") {10 sum += reciprocal(i-h*(1-k));11 }12 if (func == "identity") {13 sum += identity(i-h*(1-k));14 } 15 }16 sum *= h;17}18function integrateTrapezoid(func, a, b, n) {19 var h = (b-a)/n;20 var sum = 0;21 for (var i = a, j=a; i < b; i+=(b/n), ++j) {22 if (func == "cube") {23 if (i < b-1) {24 sum += cube(i) + cube(i+1); 25 } else {26 sum += cube(i) + cube(i+1-b);27 }28 } 29 if (func == "reciprocal") {30 if (i < b-1) {31 sum += reciprocal(i) + reciprocal(i+1); 32 } else {33 sum += reciprocal(i) + reciprocal(i+1-b);34 }35 } 36 if (func == "identity") {37 if (i < b-1) {38 sum += identity(i) + identity(i+1); 39 } else {40 sum += identity(i) + identity(i+1-b);41 }42 } 43 }44 sum *= h/2;45}46function integrateSimpsons(func, a, b, n) {47 var h = (b-a)/h;48 var sum = 0;49 for (var i = a, j=a; i < b; i+=(b/n), ++j) {50 if (func == "cube") {51 if (i < b -1) {52 sum += cube(i) + (4 * cube(i - (h / 2))) + cube(i + 1);53 } else {54 sum += cube(i) + (4 * cube(i - (h / 2))) + cube(i + 1 - b);55 }56 }57 if (func == "reciprocal") {58 if (i < b -1) {59 sum += reciprocal(i) + (4 * reciprocal(i - (h / 2))) + reciprocal(i + 1);60 } else {61 sum += reciprocal(i) + (4 * reciprocal(i - (h / 2))) + reciprocal(i + 1 - b);62 }63 }64 if (func == "identity") {65 if (i < b -1) {66 sum += identity(i) + (4 * identity(i - (h / 2))) + identity(i + 1);67 } else {68 sum += identity(i) + (4 * identity(i - (h / 2))) + identity(i + 1 - b);69 }70 }71 }72 sum *= h/6;73}74function cube(x) {75 return (x*x*x+aVar);76}77function reciprocal(x) {78 return 1/(x+aVar);79}80function identity(x) {81 return x+aVar;82}83function executeTask(i) {84integrateRectagle("cube",0,1,100,0);85integrateRectagle("cube",0,1,100,0.5);86integrateRectagle("cube",0,1,100,1);87integrateTrapezoid("cube",0,1,100);88integrateSimpsons("cube",0,1,100);89integrateRectagle("reciprocal",1,100,1000,0);90integrateRectagle("reciprocal",1,100,1000,0.5);91integrateRectagle("reciprocal",1,100,1000,1);92integrateTrapezoid("reciprocal",1,100,1000);93integrateSimpsons("reciprocal",1,100,1000);94integrateRectagle("identity",0,5000,5000000,0);...
principal.service.js
Source:principal.service.js
...34 function hasAuthority (authority) {35 if (!_authenticated) {36 return $q.when(false);37 }38 return this.identity().then(function(_id) {39 return _id.authorities && _id.authorities.indexOf(authority) !== -1;40 }, function(){41 return false;42 });43 }44 function identity (force) {45 var deferred = $q.defer();46 if (force === true) {47 _identity = undefined;48 }49 // check and see if we have retrieved the identity data from the server.50 // if we have, reuse it by immediately resolving51 if (angular.isDefined(_identity)) {52 deferred.resolve(_identity);...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.fill('input[name="q"]', 'playwright');7 await page.press('input[name="q"]', 'Enter');8 await page.waitForNavigation();9 await page.screenshot({ path: `example.png` });10 await browser.close();11})();12const { chromium } = require('playwright');13(async () => {14 const browser = await chromium.launch();15 const context = await browser.newContext();16 const page = await context.newPage();17 await page.fill('input[name="q"]', 'playwright');18 await page.press('input[name="q"]', 'Enter');19 await page.waitForNavigation();20 await page.screenshot({ path: `example.png` });21 await browser.close();22})();23const { chromium } = require('playwright');24(async () => {25 const browser = await chromium.launch();26 const context = await browser.newContext();27 const page = await context.newPage();28 await page.fill('input[name="q"]', 'playwright');29 await page.press('input[name="q"]', 'Enter');30 await page.waitForNavigation();31 await page.screenshot({ path: `example.png` });32 await browser.close();33})();34const { chromium } = require('playwright');35(async () => {36 const browser = await chromium.launch();37 const context = await browser.newContext();38 const page = await context.newPage();39 await page.fill('input[name="q"]', 'playwright');40 await page.press('input[name="q"]', 'Enter');41 await page.waitForNavigation();42 await page.screenshot({ path: `example.png` });43 await browser.close();44})();45const { chromium } =
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({4 });5 const context = await browser.newContext();6 const page = await context.newPage();7 const cookies = await page.context().cookies();8 console.log(cookies);9 await browser.close();10})();11const { chromium } = require('playwright');12(async () => {13 const browser = await chromium.launch({14 });15 const context = await browser.newContext();16 const page = await context.newPage();17 const cookies = await page.context().cookies();18 console.log(cookies);19 await browser.close();20})();21const { chromium } = require('playwright');22(async () => {23 const browser = await chromium.launch({24 });25 const context = await browser.newContext();26 const page = await context.newPage();27 const cookies = await page.context().cookies();28 console.log(cookies);29 await browser.close();30})();31const { chromium } = require('playwright');32(async () => {33 const browser = await chromium.launch({34 });35 const context = await browser.newContext();36 const page = await context.newPage();37 const cookies = await page.context().cookies();38 console.log(cookies);39 await browser.close();40})();41const { chromium } = require('playwright');42(async () => {43 const browser = await chromium.launch({44 });45 const context = await browser.newContext();46 const page = await context.newPage();47 const cookies = await page.context().cookies();48 console.log(cookies);49 await browser.close();50})();51const { chromium } = require('playwright');52(async () => {53 const browser = await chromium.launch({54 });
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 const browser = await playwright['chromium'].launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: 'example.png' });7 await browser.close();8})();9const playwright = require('playwright');10(async () => {11 const browser = await playwright['chromium'].launch();12 const context = await browser.newContext();13 const page = await context.newPage();14 await page.screenshot({ path: 'example.png' });15 await browser.close();16})();17const playwright = require('playwright');18(async () => {19 const browser = await playwright['chromium'].launch();20 const context = await browser.newContext();21 const page = await context.newPage();22 await page.screenshot({ path: 'example.png' });23 await browser.close();24})();25const playwright = require('playwright');26(async () => {27 const browser = await playwright['chromium'].launch();28 const context = await browser.newContext();29 const page = await context.newPage();30 await page.screenshot({ path: 'example.png' });31 await browser.close();32})();33const playwright = require('playwright');34(async () => {35 const browser = await playwright['chromium'].launch();36 const context = await browser.newContext();37 const page = await context.newPage();38 await page.screenshot({ path: 'example.png' });39 await browser.close();40})();41const playwright = require('playwright');42(async () => {43 const browser = await playwright['chromium'].launch();44 const context = await browser.newContext();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const browserContext = page.context();7 const browserName = browserContext._options.browserName;8 console.log(browserName);9 await browser.close();10})();11const { chromium } = require('playwright');12(async () => {13 const browser = await chromium.launch();14 const context = await browser.newContext();15 const page = await context.newPage();16 const browserContext = page.context();17 const browserName = browserContext.constructor.name;18 console.log(browserName);19 await browser.close();20})();
Using AI Code Generation
1const playwright = require('playwright');2const { chromium } = require('playwright');3(async () => {4 const browser = await chromium.launch({ headless: false });5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.screenshot({ path: `example.png` });8 await browser.close();9})();10const playwright = require('playwright');11const { chromium } = require('playwright');12(async () => {13 const browser = await chromium.launch({ headless: false });14 const context = await browser.newContext();15 const page = await context.newPage();16 await page.screenshot({ path: `example.png` });17 await browser.close();18})();
Using AI Code Generation
1const playwright = require('playwright');2const { identity } = playwright.internalAPI;3(async () => {4 const context = await identity.launch();5 const page = await context.newPage();6 await page.screenshot({ path: 'example.png' });7 await context.close();8})();9const playwright = require('playwright');10const { identity } = playwright.internalAPI;11(async () => {12 const context = await identity.launch();13 const page = await context.newPage();14 await page.screenshot({ path: 'example.png' });15 await context.close();16})();17const playwright = require('playwright');18const { identity } = playwright.internalAPI;19(async () => {20 const context = await identity.launch();21 const page = await context.newPage();22 await page.screenshot({ path: 'example.png' });23 await context.close();24})();25const playwright = require('playwright');26const { identity } = playwright.internalAPI;27(async () => {28 const context = await identity.launch();29 const page = await context.newPage();30 await page.screenshot({ path: 'example.png' });31 await context.close();32})();33const playwright = require('playwright');34const { identity } = playwright.internalAPI;35(async () => {36 const context = await identity.launch();37 const page = await context.newPage();38 await page.screenshot({ path: 'example.png' });39 await context.close();40})();41const playwright = require('playwright');42const { identity } = playwright.internalAPI;43(async () => {44 const context = await identity.launch();45 const page = await context.newPage();46 await page.screenshot({ path: 'example.png' });47 await context.close();
Using AI Code Generation
1const { identity } = require('playwright/lib/server/frames');2const { identity } = require('playwright');3await page.selectOption('select[id="country"]', 'United States');4await page.click('#btnSubmit');5await page.selectOption('select[id="country"]', 'United States');6await page.click('#btnSubmit');7await page.selectOption('select[id="country"]', 'United States');8await page.click('#btnSubmit');
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 for (const browserType of BROWSER) {4 const browser = await playwright[browserType].launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const identity = await page.identity();8 console.log('Page Identity: ', identity);9 await browser.close();10 console.log('Page Identity: ', identity);11 }12})();
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!