diff --git a/atom_tools/__init__.py b/atom_tools/__init__.py index 08b3359..12f9184 100644 --- a/atom_tools/__init__.py +++ b/atom_tools/__init__.py @@ -1,4 +1,4 @@ """ A cli, classes and functions for converting an atom slice to a different format """ -__version__ = '0.4.3' +__version__ = '0.4.4' diff --git a/atom_tools/lib/converter.py b/atom_tools/lib/converter.py index 7bec4cd..cac6fa0 100644 --- a/atom_tools/lib/converter.py +++ b/atom_tools/lib/converter.py @@ -44,35 +44,36 @@ def __init__( self.regex_param_count = 0 self.target_line_nums: Dict[str, Dict] = {} - def convert_usages(self) -> Dict[str, Any]: + def convert_usages(self) -> Dict[str, Dict]: """ Converts usages to OpenAPI. """ methods = self._process_methods() methods = self.methods_to_endpoints(methods) - self.create_file_to_method_dict(methods) - self._identify_target_line_nums(methods) + self.target_line_nums = self._identify_target_line_nums(methods) + self.file_endpoint_map = self.create_file_to_method_dict(methods) methods = self._process_calls(methods) return self.populate_endpoints(methods) - def create_file_to_method_dict(self, method_map): + def create_file_to_method_dict(self, method_map: Dict[str, Any]) -> Dict[str, List]: """ Creates a dictionary of endpoints and methods. """ - file_names = list(method_map.get('file_names').keys()) - file_endpoint_map = {i: [] for i in file_names} + if not method_map: + return {} + file_names = list(method_map.get('file_names', {}).keys()) + file_endpoint_map: Dict = {i: [] for i in file_names} for full_name in file_names: for values in method_map['file_names'][full_name]['resolved_methods'].values(): file_endpoint_map[full_name].extend(values.get('endpoints')) for k, v in file_endpoint_map.items(): - # filename = k.split(':')[0] endpoints = set(v) for i in endpoints: if self.file_endpoint_map.get(i): self.file_endpoint_map[i].add(k) else: self.file_endpoint_map[i] = {k} - self.file_endpoint_map = {k: list(v) for k, v in self.file_endpoint_map.items()} + return {k: list(v) for k, v in self.file_endpoint_map.items()} def create_paths_item(self, filename: str, paths_dict: Dict) -> Dict: """ @@ -98,11 +99,11 @@ def create_paths_item(self, filename: str, paths_dict: Dict) -> Dict: calls, ep, filename, call_line_numbers, target_line_number ) if paths_object.get(ep): - paths_object[ep] |= paths_item_object + paths_object[ep] = merge_path_objects(paths_object[ep], paths_item_object) else: paths_object |= {ep: paths_item_object} - return _remove_nested_parameters(paths_object) + return remove_nested_parameters(paths_object) def endpoints_to_openapi(self, server: str = '') -> Any: """ @@ -133,7 +134,6 @@ def methods_to_endpoints(self, method_map: Dict[str, Any]) -> Dict[str, Any]: for file_name, resolved_methods in method_map.items(): if new_resolved := self._process_resolved_methods(resolved_methods): new_method_map['file_names'][file_name] = {'resolved_methods': new_resolved} - return new_method_map def populate_endpoints(self, method_map: Dict) -> Dict[str, Any]: @@ -155,7 +155,6 @@ def populate_endpoints(self, method_map: Dict) -> Dict[str, Any]: paths_object = merge_path_objects(paths_object, new_path_item) else: paths_object = new_path_item - return paths_object def _calls_to_params(self, ep: str, orig_ep: str, call: Dict | None) -> Dict[str, Any]: @@ -308,24 +307,24 @@ def _generic_params_helper(self, endpoint: str, orig_endpoint: str) -> List[Dict ) return params - def _identify_target_line_nums(self, methods): + def _identify_target_line_nums(self, methods: Dict[str, Any]) -> Dict: file_names = list(methods['file_names'].keys()) if not file_names: - return - conditional = [f'fileName==`{json.dumps(i)}`' for i in file_names] - conditional = '*[?' + ' || '.join(conditional) + ( + return {} + conditional = [f'fileName==`{i}`' for i in file_names] + conditional = '*[?' + ' || '.join(conditional) + ( # type: ignore '][].{file_name: fileName, methods: usages[].targetObj[].{resolved_method: ' 'resolvedMethod || callName || code || name, line_number: lineNumber}}') - pattern = jmespath.compile(conditional) + pattern = jmespath.compile(conditional) # type: ignore result = pattern.search(self.usages.content) result = {i['file_name']: i['methods'] for i in result if i['methods']} - targets = {i: {} for i in result} + targets: Dict = {i: {} for i in result} for k, v in result.items(): for i in v: - targets[k] |= {i['resolved_method']: i['line_number']} + targets[k] = merge_targets(targets[k], {i['resolved_method']: i['line_number']}) - self.target_line_nums = targets + return targets def _paths_object_helper( self, @@ -351,11 +350,13 @@ def _paths_object_helper( if calls: for call in calls: paths_item_object |= self._calls_to_params(ep, orig_ep, call) - if (call_line_numbers or line_number) and (line_nos := _create_ln_entries( + if (call_line_numbers or line_number) and (line_nos := create_ln_entries( filename, list(set(call_line_numbers)), line_number)): - paths_item_object |= line_nos - # if line_number: - # paths_item_object['x-atom-usages-target'] = {filename: line_number} + if 'x-atom-usages' in paths_item_object: + paths_item_object['x-atom-usages'] = merge_x_atom( + paths_item_object['x-atom-usages'], line_nos) + else: + paths_item_object |= line_nos return ep, paths_item_object def _parse_path_regexes(self, endpoint: str) -> str: @@ -535,28 +536,51 @@ def _query_calls_helper(self, file_name: str) -> List[Dict]: Returns: list: The result of searching for the calls pattern in the usages. """ - pattern = f'objectSlices[?fileName==`{json.dumps(file_name)}`].usages[].*[?callName][][]' + pattern = (f'objectSlices[?fileName==`{json.dumps(file_name.encode().decode())}`].usages[]' + f'.*[?callName][][]') compiled_pattern = jmespath.compile(pattern) return compiled_pattern.search(self.usages.content) -def merge_path_objects(p1: Dict, p2: Dict) -> Dict: +def create_ln_entries(filename: str, call_line_numbers: List, line_number: int | None) -> Dict: """ - Merge two dictionaries representing path objects. + Creates line number entries for a given filename and line numbers. Args: - p1 (dict): The first dictionary representing a path object. - p2 (dict): The second dictionary representing a path object. + filename (str): The name of the file. + call_line_numbers (list): A list of call line numbers. + line_number (int): Target line number. Returns: - dict: The merged dictionary representing the path object. + dict: A dictionary containing line number entries. """ - for key, value in p2.items(): - if p1.get(key): - p1[key].update(value) - else: - p1[key] = value - return p1 + fn = filename.split(':')[0] + x_atom: Dict = {'x-atom-usages': {}} + if call_line_numbers: + x_atom['x-atom-usages']['call'] = {fn: call_line_numbers} + if line_number: + x_atom['x-atom-usages']['target'] = {fn: line_number} + return x_atom + + +def determine_operations(call: Dict, params: List) -> Dict[str, Any]: + """ + Determine the supported operations based on the call and parameters. + + Args: + call (dict): The call information. + params (list): The parameters for the call. + + Returns: + dict: A dictionary containing the supported operations and their + parameters and responses. + """ + ops = {'get', 'put', 'post', 'delete', 'options', 'head', 'patch'} + if found := [op for op in ops if op in call.get('resolvedMethod', '').lower()]: + if params: + return {op: {'parameters': params, 'responses': {}} for op in found} + return {op: {'responses': {}} for op in found} + return {'parameters': params} if params else {} def filter_calls( @@ -584,59 +608,127 @@ def filter_calls( return resolved_methods -def determine_operations(call: Dict, params: List) -> Dict[str, Any]: +def merge_operations(op1: Dict, op2: Dict) -> Dict: """ - Determine the supported operations based on the call and parameters. + Merge two dictionaries of operations. Args: - call (dict): The call information. - params (list): The parameters for the call. + op1 (dict): The first dictionary of operations. + op2 (dict): The second dictionary of operations. Returns: - dict: A dictionary containing the supported operations and their - parameters and responses. + dict: The merged dictionary of operations. """ - ops = {'get', 'put', 'post', 'delete', 'options', 'head', 'patch'} - if found := [op for op in ops if op in call.get('resolvedMethod', '').lower()]: - if params: - return {op: {'parameters': params, 'responses': {}} for op in found} - return {op: {'responses': {}} for op in found} - return {'parameters': params} if params else {} + for k, v in op2.items(): + if v and not op1.get(k) or op1[k] == {}: + op1[k] = v + elif k == 'parameters' and v: + op1[k] = merge_params(op1[k], v) + return op1 -def _remove_nested_parameters(data: Dict) -> Dict[str, Dict | List]: +def merge_params(p1: List, p2: List) -> List: """ - Removes nested path parameters from the given data. + Merge two lists of parameters. Args: - data (dict): The data containing nested path parameters. + p1 (list): The first list of parameters. + p2 (list): The second list of parameters. Returns: - dict: The modified data with the nested path parameters removed. + list: The merged list of parameters. """ - for value in data.values(): - for v in value.values(): - if isinstance(v, dict) and "parameters" in v and isinstance(v["parameters"], list): - v["parameters"] = [param for param in v["parameters"] if - param.get("in") != "path"] - return data + names = [i.get('name') for i in p1] + for i in p2: + if i.get('name', '') not in names: + p1.append(i) + return p1 -def _create_ln_entries(filename, call_line_numbers, line_numbers): +def merge_path_objects(p1: Dict, p2: Dict) -> Dict: """ - Creates line number entries for a given filename and line numbers. + Merge two dictionaries representing path objects. Args: - filename (str): The name of the file. - call_line_numbers (list): A list of line numbers. + p1 (dict): The first dictionary representing a path object. + p2 (dict): The second dictionary representing a path object. Returns: - dict: A dictionary containing line number entries. + dict: The merged dictionary representing the path object. """ - fn = filename.split(':')[0] - x_atom = {'x-atom-usages': {}} - if call_line_numbers: - x_atom['x-atom-usages']['call'] = {fn: call_line_numbers} - if line_numbers: - x_atom['x-atom-usages']['target'] = {fn: line_numbers} - return x_atom + for key, value in p2.items(): + if key not in p1: + p1[key] = value + continue + for k, v in value.items(): + if p1[key].get(k): + if k == 'x-atom-usages': + p1[key][k] = merge_x_atom(p1[key][k], v) + elif k == 'parameters': + p1[key][k] = merge_params(p1[key][k], v) + elif k in {'get', 'put', 'post', 'delete', 'options', 'head', 'patch'}: + p1[key][k] = merge_operations(p1[key][k], v) + continue + p1[key][k] = v + + return p1 + + +def merge_targets(t1: Dict, t2: Dict) -> Dict: + """ + Merge two dictionaries of targets. + + Args: + t1 (dict): The first dictionary of targets. + t2 (dict): The second dictionary of targets. + + Returns: + dict: The merged dictionary of targets. + """ + for k, v in t2.items(): + if k in t1: + t1[k].append(v) + else: + t1[k] = [v] + return t1 + + +def merge_x_atom(x1: Dict, x2: Dict) -> Dict: + """ + Merge two dictionaries of x-atom-usages. + + Args: + x1 (dict): The first dictionary of x atoms. + x2 (dict): The second dictionary of x atoms. + + Returns: + dict: The merged dictionary of x atoms. + """ + for key, value in x2.items(): + if key not in x1: + x1[key] = value + continue + for k, v in value.items(): + if x1[key].get(k): + x1[key][k].extend(v) + else: + x1[key][k] = v + return x1 + + +def remove_nested_parameters(data: Dict) -> Dict[str, Dict | List]: + """ + Removes nested path parameters from the given data. + + Args: + data (dict): The data containing nested path parameters. + + Returns: + dict: The modified data with the nested path parameters removed. + """ + for value in data.values(): + for v in value.values(): + if isinstance(v, dict) and 'parameters' in v and isinstance(v['parameters'], list): + v['parameters'] = [param for param in v['parameters'] if + param.get('in') != 'path'] + return data diff --git a/atom_tools/lib/regex_utils.py b/atom_tools/lib/regex_utils.py index 6573215..78eb4ca 100644 --- a/atom_tools/lib/regex_utils.py +++ b/atom_tools/lib/regex_utils.py @@ -6,7 +6,9 @@ from dataclasses import dataclass from typing import Tuple, List, Dict, Any + logger: logging.Logger = logging.getLogger(__name__) +py_type_mapping = {'int': 'integer', 'string': 'string', 'float': 'number', 'path': 'string'} @dataclass @@ -151,6 +153,3 @@ def create_tmp_regex_name(element: str, m: Tuple | str, count: int) -> Tuple[str def fwd_slash_repl(match: re.Match) -> str: """For substituting forward slashes.""" return str(match['paren'].replace('/', '$L@$H')) - - -py_type_mapping = {'int': 'integer', 'string': 'string', 'float': 'number', 'path': 'string'} diff --git a/atom_tools/lib/slices.py b/atom_tools/lib/slices.py index 15cc02e..f88d3ff 100644 --- a/atom_tools/lib/slices.py +++ b/atom_tools/lib/slices.py @@ -55,7 +55,9 @@ def import_slice(filename: str | Path) -> Tuple[Dict, str]: return {}, 'unknown' try: with open(filename, 'r', encoding='utf-8') as f: - content = json.load(f) + raw_content = f.read() + raw_content = raw_content.replace(r'\\', '/') + content = json.loads(raw_content) if content.get('objectSlices'): return content, 'usages' if content.get('reachables'): diff --git a/pyproject.toml b/pyproject.toml index 41c6ff3..a67cda2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "atom-tools" -version = "0.4.3" +version = "0.4.4" description = "Collection of tools for use with AppThreat/atom." authors = [ { name = "Caroline Russell", email = "caroline@appthreat.dev" }, diff --git a/test/test_converter.py b/test/test_converter.py index f943c00..6d17db7 100644 --- a/test/test_converter.py +++ b/test/test_converter.py @@ -1,8 +1,31 @@ -import os - import pytest -from atom_tools.lib.converter import OpenAPI +from atom_tools.lib.converter import filter_calls, OpenAPI + + +def sort_result(result): + for k, v in result.items(): + if k == 'x-atom-usages': + for k, v in result['x-atom-usages'].items(): + for key, value in v.items(): + value.sort() + result['x-atom-usages'][k][key] = value + elif isinstance(v, list) and len(v) >= 2: + result[k] = sort_list(v) + elif isinstance(v, dict): + result[k] = sort_result(v) + return result + + +def sort_list(lst): + if not lst: + return lst + if isinstance(lst[0], (str, int)): + lst.sort() + return lst + if isinstance(lst[0], dict): + return sorted(lst, key=lambda x: x['name']) + return lst @pytest.fixture @@ -42,18 +65,18 @@ def test_populate_endpoints(js_usages_1, js_usages_2): # differ. methods = js_usages_1._process_methods() methods = js_usages_1.methods_to_endpoints(methods) - assert methods == {'file_names': {'routes\\dataErasure.ts': {'resolved_methods': {"router.get('/',async(req:Request,res:Response,next:NextFunction):Promise=>{\rconstloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\rif(!loggedInUser){\rnext(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\rreturn\r}\rconstemail=loggedInUser.data.email\r\rtry{\rconstanswer=awaitSecurityAnswerModel.findOne({\rinclude:[{\rmodel:UserModel,\rwhere:{email}\r}]\r})\rif(answer==null){\rthrownewError('Noanswerfound!')\r}\rconstquestion=awaitSecurityQuestionModel.findByPk(answer.SecurityQuestionId)\rif(question==null){\rthrownewError('Noquestionfound!')\r}\r\rres.render('dataErasureForm',{userEmail:email,securityQuestion:question.question})\r}catch(error){\rnext(error)\r}\r})": {'endpoints': ['/', - '/Blockedillegalactivityby', - '/Noanswerfound!', - '/Noquestionfound!', - '/dataErasureForm']}, - "router.post('/',async(req:Request,Record,DataErasureRequestParams>,res:Response,next:NextFunction):Promise=>{\rconstloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\rif(!loggedInUser){\rnext(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\rreturn\r}\r\rtry{\rawaitPrivacyRequestModel.create({\rUserId:loggedInUser.data.id,\rdeletionRequested:true\r})\r\rres.clearCookie('token')\rif(req.body.layout){\rconstfilePath:string=path.resolve(req.body.layout).toLowerCase()\rconstisForbiddenFile:boolean=(filePath.includes('ftp')||filePath.includes('ctf.key')||filePath.includes('encryptionkeys'))\rif(!isForbiddenFile){\rres.render('dataErasureResult',{\r...req.body\r},(error,html)=>{\rif(!html||error){\rnext(newError(error.message))\r}else{\r...": {'endpoints': ['/', - '/Blockedillegalactivityby', - '/token', - '/ftp', - '/ctf.key', - '/encryptionkeys', - '/dataErasureResult']}}}, + assert methods == {'file_names': {'routes/dataErasure.ts': {'resolved_methods': {"router.get('/',async(req:Request,res:Response,next:NextFunction):Promise=>{\rconstloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\rif(!loggedInUser){\rnext(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\rreturn\r}\rconstemail=loggedInUser.data.email\r\rtry{\rconstanswer=awaitSecurityAnswerModel.findOne({\rinclude:[{\rmodel:UserModel,\rwhere:{email}\r}]\r})\rif(answer==null){\rthrownewError('Noanswerfound!')\r}\rconstquestion=awaitSecurityQuestionModel.findByPk(answer.SecurityQuestionId)\rif(question==null){\rthrownewError('Noquestionfound!')\r}\r\rres.render('dataErasureForm',{userEmail:email,securityQuestion:question.question})\r}catch(error){\rnext(error)\r}\r})": {'endpoints': ['/', + '/Blockedillegalactivityby', + '/Noanswerfound!', + '/Noquestionfound!', + '/dataErasureForm']}, + "router.post('/',async(req:Request,Record,DataErasureRequestParams>,res:Response,next:NextFunction):Promise=>{\rconstloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\rif(!loggedInUser){\rnext(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\rreturn\r}\r\rtry{\rawaitPrivacyRequestModel.create({\rUserId:loggedInUser.data.id,\rdeletionRequested:true\r})\r\rres.clearCookie('token')\rif(req.body.layout){\rconstfilePath:string=path.resolve(req.body.layout).toLowerCase()\rconstisForbiddenFile:boolean=(filePath.includes('ftp')||filePath.includes('ctf.key')||filePath.includes('encryptionkeys'))\rif(!isForbiddenFile){\rres.render('dataErasureResult',{\r...req.body\r},(error,html)=>{\rif(!html||error){\rnext(newError(error.message))\r}else{\r...": {'endpoints': ['/', + '/Blockedillegalactivityby', + '/token', + '/ftp', + '/ctf.key', + '/encryptionkeys', + '/dataErasureResult']}}}, 'server.ts': {'resolved_methods': {"app.delete('/api/Addresss/:id',security.appendUserId(),address.delAddressById())": {'endpoints': ['/api/Addresss/:id']}, "app.delete('/api/Cards/:id',security.appendUserId(),payment.delPaymentMethodById())": {'endpoints': ['/api/Cards/:id']}, "app.delete('/api/Products/:id',security.denyAll())": {'endpoints': ['/api/Products/:id']}, @@ -366,36 +389,35 @@ def test_populate_endpoints(js_usages_1, js_usages_2): methods = js_usages_2._process_methods() methods = js_usages_2.methods_to_endpoints(methods) - assert methods == {'file_names': {'app\\routes\\index.js': {'resolved_methods': {'app.get("/",sessionHandler.displayWelcomePage)': {'endpoints': ['/']}, - 'app.get("/allocations/:userId",isLoggedIn,allocationsHandler.displayAllocations)': {'endpoints': ['/allocations/:userId']}, - 'app.get("/benefits",isLoggedIn,benefitsHandler.displayBenefits)': {'endpoints': ['/benefits']}, - 'app.get("/contributions",isLoggedIn,contributionsHandler.displayContributions)': {'endpoints': ['/contributions']}, - 'app.get("/dashboard",isLoggedIn,sessionHandler.displayWelcomePage)': {'endpoints': ['/dashboard']}, - 'app.get("/learn",isLoggedIn,(req,res)=>{//Insecurewaytohandleredirectsbytakingredirecturlfromquerystringreturnres.redirect(req.query.url);})': {'endpoints': ['/learn']}, - 'app.get("/login",sessionHandler.displayLoginPage)': {'endpoints': ['/login']}, - 'app.get("/logout",sessionHandler.displayLogoutPage)': {'endpoints': ['/logout']}, - 'app.get("/memos",isLoggedIn,memosHandler.displayMemos)': {'endpoints': ['/memos']}, - 'app.get("/profile",isLoggedIn,profileHandler.displayProfile)': {'endpoints': ['/profile']}, - 'app.get("/research",isLoggedIn,researchHandler.displayResearch)': {'endpoints': ['/research']}, - 'app.get("/signup",sessionHandler.displaySignupPage)': {'endpoints': ['/signup']}, - 'app.post("/benefits",isLoggedIn,benefitsHandler.updateBenefits)': {'endpoints': ['/benefits']}, - 'app.post("/contributions",isLoggedIn,contributionsHandler.handleContributionsUpdate)': {'endpoints': ['/contributions']}, - 'app.post("/login",sessionHandler.handleLoginRequest)': {'endpoints': ['/login']}, - 'app.post("/memos",isLoggedIn,memosHandler.addMemos)': {'endpoints': ['/memos']}, - 'app.post("/profile",isLoggedIn,profileHandler.handleProfileUpdate)': {'endpoints': ['/profile']}, - 'app.post("/signup",sessionHandler.handleSignup)': {'endpoints': ['/signup']}, - 'app.use("/tutorial",tutorialRouter)': {'endpoints': ['/tutorial']}}}, - 'app\\routes\\tutorial.js': {'resolved_methods': {'router.get("/",(req,res)=>{"usestrict";returnres.render("tutorial/a1",{environmentalScripts});})': {'endpoints': ['/', - '/usestrict', - '/tutorial/a1']}, - 'router.get(`/${page}`,(req,res)=>{"usestrict";returnres.render(`tutorial/${page}`,{environmentalScripts});})': {'endpoints': ['/usestrict']}}}, + assert methods == {'file_names': {'app/routes/index.js': {'resolved_methods': {'app.get("/",sessionHandler.displayWelcomePage)': {'endpoints': ['/']}, + 'app.get("/allocations/:userId",isLoggedIn,allocationsHandler.displayAllocations)': {'endpoints': ['/allocations/:userId']}, + 'app.get("/benefits",isLoggedIn,benefitsHandler.displayBenefits)': {'endpoints': ['/benefits']}, + 'app.get("/contributions",isLoggedIn,contributionsHandler.displayContributions)': {'endpoints': ['/contributions']}, + 'app.get("/dashboard",isLoggedIn,sessionHandler.displayWelcomePage)': {'endpoints': ['/dashboard']}, + 'app.get("/learn",isLoggedIn,(req,res)=>{//Insecurewaytohandleredirectsbytakingredirecturlfromquerystringreturnres.redirect(req.query.url);})': {'endpoints': ['/learn']}, + 'app.get("/login",sessionHandler.displayLoginPage)': {'endpoints': ['/login']}, + 'app.get("/logout",sessionHandler.displayLogoutPage)': {'endpoints': ['/logout']}, + 'app.get("/memos",isLoggedIn,memosHandler.displayMemos)': {'endpoints': ['/memos']}, + 'app.get("/profile",isLoggedIn,profileHandler.displayProfile)': {'endpoints': ['/profile']}, + 'app.get("/research",isLoggedIn,researchHandler.displayResearch)': {'endpoints': ['/research']}, + 'app.get("/signup",sessionHandler.displaySignupPage)': {'endpoints': ['/signup']}, + 'app.post("/benefits",isLoggedIn,benefitsHandler.updateBenefits)': {'endpoints': ['/benefits']}, + 'app.post("/contributions",isLoggedIn,contributionsHandler.handleContributionsUpdate)': {'endpoints': ['/contributions']}, + 'app.post("/login",sessionHandler.handleLoginRequest)': {'endpoints': ['/login']}, + 'app.post("/memos",isLoggedIn,memosHandler.addMemos)': {'endpoints': ['/memos']}, + 'app.post("/profile",isLoggedIn,profileHandler.handleProfileUpdate)': {'endpoints': ['/profile']}, + 'app.post("/signup",sessionHandler.handleSignup)': {'endpoints': ['/signup']}, + 'app.use("/tutorial",tutorialRouter)': {'endpoints': ['/tutorial']}}}, + 'app/routes/tutorial.js': {'resolved_methods': {'router.get("/",(req,res)=>{"usestrict";returnres.render("tutorial/a1",{environmentalScripts});})': {'endpoints': ['/', + '/usestrict', + '/tutorial/a1']}, + 'router.get(`/${page}`,(req,res)=>{"usestrict";returnres.render(`tutorial/${page}`,{environmentalScripts});})': {'endpoints': ['/usestrict']}}}, 'server.js': {'resolved_methods': {'app.set("viewengine","html")': {'endpoints': ['/viewengine', '/html']}, 'app.set("views",`${__dirname}/app/views`)': {'endpoints': ['/views']}, 'app.use(favicon(__dirname+"/app/assets/favicon.ico"))': {'endpoints': ['/app/assets/favicon.ico']}, 'app.use(session({//genid:(req)=>{//returngenuuid()//useUUIDsforsessionIDs//},secret:cookieSecret,//BothmandatoryinExpressv4saveUninitialized:true,resave:true/*//FixforA5-SecurityMisConfig//Usegenericcookienamekey:"sessionId",*//*//FixforA3-XSS//TODO:Add"maxAge"cookie:{httpOnly:true//RemembertostartanHTTPSservertogetthisworking//secure:true}*/}))': {'endpoints': ['/sessionId', - '/maxAge']}}}} - } + '/maxAge']}}}}} methods = js_usages_2._process_calls(methods) result = js_usages_2.populate_endpoints(methods) assert len(list(result['/login'].keys())) == 3 @@ -413,280 +435,1001 @@ def test_usages_class(java_usages_1): def test_convert_usages(java_usages_1, java_usages_2, js_usages_1, js_usages_2, py_usages_1, py_usages_2): - # assert java_usages_1.convert_usages() == {'/': {'post': {'responses': {}}, - # 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [35]}}}, - # '/accounts/{accountName}': {'get': {'responses': {}}, - # 'parameters': [{'in': 'path', - # 'name': 'accountName', - # 'required': True}], - # 'x-atom-usages': {'call': {'notification-service/src/main/java/com/piggymetrics/notification/client/AccountServiceClient.java': [12]}}}, - # '/current': {'get': {'responses': {}}, - # 'put': {'responses': {}}, - # 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [20]}}}, - # '/latest': {'get': {'responses': {}}, - # 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java': [13]}}}, - # '/statistics/{accountName}': {'parameters': [{'in': 'path', - # 'name': 'accountName', - # 'required': True}], - # 'put': {'responses': {}}, - # 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/client/StatisticsServiceClient.java': [13]}}}, - # '/uaa/users': {'post': {'responses': {}}, - # 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/client/AuthServiceClient.java': [12]}}}, - # '/{accountName}': {'get': {'responses': {}}, - # 'parameters': [{'in': 'path', - # 'name': 'accountName', - # 'required': True}], - # 'put': {'responses': {}}, - # 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [32]}, - # 'target': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': 32}}}, - # '/{name}': {'get': {'responses': {}}, - # 'parameters': [{'in': 'path', 'name': 'name', 'required': True}], - # 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [20]}}}} - assert java_usages_2.convert_usages() == {'/': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Test.java': [15]}}}, + assert sort_result(java_usages_1.convert_usages()) == { + '/': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [35]}}}, + '/accounts/{accountName}': {'get': {'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'accountName', + 'required': True}], + 'x-atom-usages': {'call': {'notification-service/src/main/java/com/piggymetrics/notification/client/AccountServiceClient.java': [12]}}}, + '/current': {'get': {'responses': {}}, + 'put': {'responses': {}}, + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [25,30], + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java': [22], + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java': [21,26], + 'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [20]}, + 'target': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [30], + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java': [22], + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java': [26]}}}, + '/latest': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java': [13]}}}, + '/statistics/{accountName}': {'parameters': [{'in': 'path', + 'name': 'accountName', + 'required': True}], + 'put': {'responses': {}}, + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/client/StatisticsServiceClient.java': [13]}}}, + '/uaa/users': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/client/AuthServiceClient.java': [12]}}}, + '/{accountName}': {'get': {'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'accountName', + 'required': True}], + 'put': {'responses': {}}, + 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [26,32]}, + 'target': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [32]}}}, + '/{name}': {'get': {'responses': {}}, + 'parameters': [{'in': 'path', 'name': 'name', 'required': True}], + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [20]}}}} + assert sort_result(java_usages_2.convert_usages()) == {'/': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/CSRF.java': [19], + 'src/main/java/org/joychou/controller/Index.java': [41], + 'src/main/java/org/joychou/controller/Test.java': [15]}, + 'target': {'src/main/java/org/joychou/controller/Index.java': [41]}}}, '/Digester/sec': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [213]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [213]}}}, '/Digester/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [198]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [198]}}}, '/DocumentBuilder/Sec': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [263]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [263]}}}, '/DocumentBuilder/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [236]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [236]}}}, '/DocumentBuilder/xinclude/sec': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [312]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [312]}}}, '/DocumentBuilder/xinclude/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [286]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [286]}}}, '/DocumentHelper/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [388]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [388]}}}, '/HttpSyncClients/vuln': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [265]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [265]}}}, '/HttpURLConnection/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [74]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [74]}}}, '/HttpURLConnection/vuln': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [87]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [87]}}}, '/IOUtils/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [246]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [246]}}}, '/ImageIO/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [153]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [153]}}}, '/Jsoup/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [226]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [226]}}}, '/ProcessBuilder': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Rce.java': [64]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Rce.java': [64]}}}, '/SAXBuilder/sec': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [102]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [102]}}}, '/SAXBuilder/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [86]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [86]}}}, '/SAXParser/sec': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [178]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [178]}}}, '/SAXParser/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [160]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [160]}}}, '/SAXReader/sec': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [141]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [141]}}}, '/SAXReader/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [123]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [123]}}}, '/XMLReader/sec': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [362]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [362]}}}, '/XMLReader/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [342]}}}, - '/aa': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Test.java': [27]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\Test.java': 27}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [342]}}}, + '/aa': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Test.java': [27]}, + 'target': {'src/main/java/org/joychou/controller/Test.java': [27]}}}, '/any': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\FileUpload.java': [39]}}}, - '/appInfo': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Index.java': [24]}}}, - '/classloader': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\ClassDataLoader.java': [15]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\ClassDataLoader.java': 15}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/FileUpload.java': [39]}}}, + '/appInfo': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Index.java': [24]}}}, + '/classloader': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/ClassDataLoader.java': [15]}, + 'target': {'src/main/java/org/joychou/controller/ClassDataLoader.java': [15]}}}, '/codeinject': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\CommandInject.java': [24]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/CommandInject.java': [24]}}}, '/codeinject/host': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\CommandInject.java': [39]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/CommandInject.java': [39]}}}, '/codeinject/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\CommandInject.java': [51]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\CommandInject.java': 51}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/CommandInject.java': [51]}, + 'target': {'src/main/java/org/joychou/controller/CommandInject.java': [51]}}}, '/commonsHttpClient/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [207]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [207]}}}, '/createToken': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Jwt.java': [31]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Jwt.java': [31]}}}, '/deserialize': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Fastjson.java': [17]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Fastjson.java': [17]}}}, '/dnsrebind/vuln': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [308]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [308]}}}, '/exclued/vuln': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\GetRequestURI.java': [34]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\GetRequestURI.java': 34}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/GetRequestURI.java': [34]}, + 'target': {'src/main/java/org/joychou/controller/GetRequestURI.java': [34]}}}, '/fastjsonp/getToken': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Jsonp.java': [128]}}}, - '/forward': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLRedirect.java': [64]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Jsonp.java': [128]}}}, + '/forward': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLRedirect.java': [64]}}}, '/getName': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Jwt.java': [56]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\Jwt.java': 56}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Jwt.java': [56]}, + 'target': {'src/main/java/org/joychou/controller/Jwt.java': [56]}}}, '/getToken': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Jsonp.java': [118]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Jsonp.java': [118]}}}, '/groovy': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Rce.java': [128]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Rce.java': [128]}}}, '/httpclient/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [187]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [187]}}}, '/hutool/vuln': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [298]}}}, - '/index': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Index.java': [46]}}}, - '/jdbc/ps/vuln': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [138]}}}, - '/jdbc/sec': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [94]}}}, - '/jdbc/vuln': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [51]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [298]}}}, + '/index': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Index.java': [46]}}}, + '/jdbc/ps/vuln': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [138]}}}, + '/jdbc/sec': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [94]}}}, + '/jdbc/vuln': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [51]}}}, '/jscmd': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Rce.java': [96]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Rce.java': [96]}}}, '/log4j': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Log4j.java': [19]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\Log4j.java': 19}}}, - '/login': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Login.java': [22]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Log4j.java': [19]}, + 'target': {'src/main/java/org/joychou/controller/Log4j.java': [19]}}}, + '/login': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Login.java': [22]}}}, '/logout': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Login.java': [27]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\Login.java': 27}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Login.java': [27]}, + 'target': {'src/main/java/org/joychou/controller/Login.java': [27]}}}, '/mybatis/orderby/sec04': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [240]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [240]}}}, '/mybatis/orderby/vuln03': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [201]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': 201}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [201]}, + 'target': {'src/main/java/org/joychou/controller/SQLI.java': [201]}}}, '/mybatis/sec01': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [211]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [211]}}}, '/mybatis/sec02': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [220]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [220]}}}, '/mybatis/sec03': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [230]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [230]}}}, '/mybatis/vuln01': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [181]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [181]}}}, '/mybatis/vuln02': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SQLI.java': [191]}}}, - '/noproxy': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\IPForge.java': [20]}}}, - '/object2jsonp': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Jsonp.java': [76]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SQLI.java': [191]}}}, + '/noproxy': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/IPForge.java': [20]}}}, + '/object2jsonp': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Jsonp.java': [76]}}}, '/okhttp/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [168]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [168]}}}, '/openStream': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [118]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [118]}}}, '/path_traversal/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\PathTraversal.java': [29]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/PathTraversal.java': [29]}}}, '/path_traversal/vul': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\PathTraversal.java': [24]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/PathTraversal.java': [24]}}}, '/pic': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\FileUpload.java': [45]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/FileUpload.java': [45]}}}, '/post': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\CSRF.java': [24]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/CSRF.java': [24]}}}, '/postgresql': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Rce.java': [137]}}}, - '/proxy': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\IPForge.java': [31]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Rce.java': [137]}}}, + '/proxy': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/IPForge.java': [31]}}}, '/readxlsx': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\othervulns\\xlsxStreamerXXE.java': [35]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\othervulns\\xlsxStreamerXXE.java': 35}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/othervulns/ooxmlXXE.java': [43], + 'src/main/java/org/joychou/controller/othervulns/xlsxStreamerXXE.java': [35]}, + 'target': {'src/main/java/org/joychou/controller/othervulns/xlsxStreamerXXE.java': [35]}}}, '/redirect': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLRedirect.java': [31]}}}, - '/reflect': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XSS.java': [27]}}}, - '/rememberMe/security': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Deserialize.java': [60]}}}, - '/rememberMe/vuln': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Deserialize.java': [35]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\Deserialize.java': 35}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLRedirect.java': [31]}}}, + '/reflect': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XSS.java': [27]}}}, + '/rememberMe/security': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Deserialize.java': [60]}}}, + '/rememberMe/vuln': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Deserialize.java': [35]}, + 'target': {'src/main/java/org/joychou/controller/Deserialize.java': [35]}}}, '/request/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [97]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': 97}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [97]}, + 'target': {'src/main/java/org/joychou/controller/SSRF.java': [97]}}}, '/restTemplate/vuln1': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [277]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [277]}}}, '/restTemplate/vuln2': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [285]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [285]}}}, '/runtime/exec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Rce.java': [31]}}}, - '/safe': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XSS.java': [65]}}}, - '/safecode': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\CRLFInjection.java': [20]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Rce.java': [31]}}}, + '/safe': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XSS.java': [65]}}}, + '/safecode': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/CRLFInjection.java': [20]}}}, '/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLWhiteList.java': [125]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLWhiteList.java': [125]}}}, '/sec/array_indexOf': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLWhiteList.java': [151]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLWhiteList.java': [151]}}}, '/sec/checkOrigin': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': [104]}}}, - '/sec/checkReferer': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Jsonp.java': [102]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\Jsonp.java': 102}}}, - '/sec/corsFilter': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': [98]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cors.java': [104]}}}, + '/sec/checkReferer': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Jsonp.java': [102]}, + 'target': {'src/main/java/org/joychou/controller/Jsonp.java': [102]}}}, + '/sec/corsFilter': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cors.java': [98]}}}, '/sec/crossOrigin': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': [54]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cors.java': [54]}}}, '/sec/httpCors': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': [76]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cors.java': [76]}}}, '/sec/originFilter': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': [87]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cors.java': [87]}}}, '/sec/webMvcConfigurer': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': [65]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cors.java': [65]}}}, '/sec/yarm': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Rce.java': [118]}}}, - '/sendRedirect': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLRedirect.java': [52]}}}, - '/sendRedirect/sec': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLRedirect.java': [81]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Rce.java': [118]}}}, + '/sendRedirect': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLRedirect.java': [52]}}}, + '/sendRedirect/sec': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLRedirect.java': [81]}}}, '/setHeader': {'head': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLRedirect.java': [40]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLRedirect.java': [40]}}}, '/spel/vuln': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SpEL.java': [24]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\SpEL.java': 24}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SpEL.java': [24]}, + 'target': {'src/main/java/org/joychou/controller/SpEL.java': [24]}}}, '/status': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\FileUpload.java': [76]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\FileUpload.java': 76}}}, - '/stored/show': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XSS.java': [55]}}}, - '/stored/store': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XSS.java': [40]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/FileUpload.java': [76]}, + 'target': {'src/main/java/org/joychou/controller/FileUpload.java': [76]}}}, + '/stored/show': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XSS.java': [55]}}}, + '/stored/store': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XSS.java': [40]}}}, '/upload': {'get': {'responses': {}}, 'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\othervulns\\xlsxStreamerXXE.java': [29]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/FileUpload.java': [50], + 'src/main/java/org/joychou/controller/othervulns/ooxmlXXE.java': [37], + 'src/main/java/org/joychou/controller/othervulns/xlsxStreamerXXE.java': [29]}}}, '/upload/picture': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\FileUpload.java': [82]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/FileUpload.java': [82]}}}, '/urlConnection/sec': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [50]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [50]}}}, '/urlConnection/vuln': {'get': {'responses': {}}, 'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSRF.java': [44]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSRF.java': [44]}}}, '/velocity': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\SSTI.java': [26]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\SSTI.java': 26}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/SSTI.java': [26]}, + 'target': {'src/main/java/org/joychou/controller/SSTI.java': [26]}}}, '/vuln/contains': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLWhiteList.java': [56]}}}, - '/vuln/crossOrigin': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': [42]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': 42}}}, - '/vuln/emptyReferer': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Jsonp.java': [57]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLWhiteList.java': [56]}}}, + '/vuln/crossOrigin': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cors.java': [42]}, + 'target': {'src/main/java/org/joychou/controller/Cors.java': [42]}}}, + '/vuln/emptyReferer': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Jsonp.java': [57]}}}, '/vuln/endsWith': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLWhiteList.java': [36]}}}, - '/vuln/mappingJackson2JsonView': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Jsonp.java': [89]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLWhiteList.java': [36]}}}, + '/vuln/mappingJackson2JsonView': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Jsonp.java': [89]}}}, '/vuln/origin': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': [25]}}}, - '/vuln/referer': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Jsonp.java': [45]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cors.java': [25]}}}, + '/vuln/referer': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Jsonp.java': [45]}}}, '/vuln/regex': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLWhiteList.java': [74]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLWhiteList.java': [74]}}}, '/vuln/setHeader': {'get': {'responses': {}}, 'head': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cors.java': [33]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cors.java': [33]}}}, '/vuln/url_bypass': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\URLWhiteList.java': [98]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\URLWhiteList.java': 98}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/URLWhiteList.java': [98]}, + 'target': {'src/main/java/org/joychou/controller/URLWhiteList.java': [98]}}}, '/vuln/yarm': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Rce.java': [112]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\Rce.java': 112}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Rce.java': [112]}, + 'target': {'src/main/java/org/joychou/controller/Rce.java': [112]}}}, '/vuln01': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cookies.java': [25]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cookies.java': [25]}}}, '/vuln02': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cookies.java': [32]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cookies.java': [32]}}}, '/vuln03': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cookies.java': [45]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cookies.java': [45]}}}, '/vuln04': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cookies.java': [61]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cookies.java': [61]}}}, '/vuln05': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cookies.java': [76]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cookies.java': [76]}}}, '/vuln06': {'get': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\Cookies.java': [82]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\Cookies.java': 82}}}, - '/websocket/cmd': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\WebSockets.java': [30]}}}, - '/websocket/proxy': {'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\WebSockets.java': [53]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\WebSockets.java': 53}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/Cookies.java': [82]}, + 'target': {'src/main/java/org/joychou/controller/Cookies.java': [82]}}}, + '/websocket/cmd': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/WebSockets.java': [30]}}}, + '/websocket/proxy': {'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/WebSockets.java': [53]}, + 'target': {'src/main/java/org/joychou/controller/WebSockets.java': [53]}}}, '/xmlReader/sec': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [63]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [63]}}}, '/xmlReader/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [48]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': 48}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [48]}, + 'target': {'src/main/java/org/joychou/controller/XXE.java': [48]}}}, '/xmlbeam/vuln': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XXE.java': [419]}}}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XXE.java': [419]}}}, '/xstream': {'post': {'responses': {}}, - 'x-atom-usages': {'call': {'src\\main\\java\\org\\joychou\\controller\\XStreamRce.java': [23]}, - 'target': {'src\\main\\java\\org\\joychou\\controller\\XStreamRce.java': 23}}}} - assert len(js_usages_1.convert_usages()) == 134 - assert len(js_usages_2.convert_usages()) == 21 - assert py_usages_1.convert_usages() == {'/admin': {}, + 'x-atom-usages': {'call': {'src/main/java/org/joychou/controller/XStreamRce.java': [23]}, + 'target': {'src/main/java/org/joychou/controller/XStreamRce.java': [23]}}}} + result = js_usages_1.convert_usages() + result = sort_result(result) + assert result == {'/': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18, 54], + 'server.ts': [185]}}}, + '/.well-known/security.txt': {'get': {'parameters': [{'in': 'header', + 'name': 'ANY'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [196, + 197]}}}, + '/123.456.789': {'x-atom-usages': {'call': {'server.ts': [395]}}}, + '/Blockedillegalactivityby': {'get': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18, + 54]}}}, + '/Invalidemail/passwordcannotbeempty': {'post': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [372]}}}, + '/Noanswerfound!': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18]}}}, + '/Noquestionfound!': {'get': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18]}}}, + '/Preferred-Languages': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [197]}}}, + '/api-docs': {'x-atom-usages': {'call': {'server.ts': [263]}}}, + '/api/Addresss': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [412, 413]}}}, + '/api/Addresss/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [414, + 415, + 416]}}}, + '/api/BasketItems': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [327, 391]}}}, + '/api/BasketItems/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [328, + 390]}}}, + '/api/Cards': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [402, 403]}}}, + '/api/Cards/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [404, 405, 406]}}}, + '/api/Challenges': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [342]}}}, + '/api/Challenges/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [343]}}}, + '/api/Complaints': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [345, 346]}}}, + '/api/Complaints/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [347]}}}, + '/api/Deliverys': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [417]}}}, + '/api/Deliverys/{id}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [418]}}}, + '/api/Feedbacks': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [366, 368, 370]}}}, + '/api/Feedbacks/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [330, 397]}}}, + '/api/PrivacyRequests': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [399, + 408, + 409]}}}, + '/api/PrivacyRequests/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [400, + 410]}}}, + '/api/Products': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [338]}}}, + '/api/Products/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [340]}}}, + '/api/Quantitys': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [394]}}}, + '/api/Quantitys/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [393, 395]}}}, + '/api/Recycles': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [349, 350]}}}, + '/api/Recycles/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [352, + 353, + 354]}}}, + '/api/SecurityAnswers': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [359]}}}, + '/api/SecurityAnswers/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [360]}}}, + '/api/SecurityQuestions': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [356]}}}, + '/api/SecurityQuestions/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [357]}}}, + '/api/Users': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [332, + 372, + 384, + 385, + 386]}}}, + '/api/Users/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [333]}}}, + '/application.securityTxt.acknowledgements': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [197]}}}, + '/application.securityTxt.contact': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [197]}}}, + '/application.securityTxt.encryption': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [197]}}}, + '/application.securityTxt.hiring': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [179, + 197]}}}, + '/assets/i18n': {'x-atom-usages': {'call': {'server.ts': [216]}}}, + '/assets/public/images/padding': {'x-atom-usages': {'call': {'server.ts': [213]}}}, + '/assets/public/images/products': {'x-atom-usages': {'call': {'server.ts': [214]}}}, + '/assets/public/images/uploads': {'x-atom-usages': {'call': {'server.ts': [215]}}}, + '/b2b/v2': {'x-atom-usages': {'call': {'server.ts': [388]}}}, + '/b2b/v2/orders': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [602]}}}, + '/combined': {'x-atom-usages': {'call': {'server.ts': [308]}}}, + '/ctf.key': {'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54]}}}, + '/dataErasureForm': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18]}}}, + '/dataErasureResult': {'post': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54]}}}, + '/dataerasure': {'x-atom-usages': {'call': {'server.ts': [610]}}}, + '/details': {'x-atom-usages': {'call': {'server.ts': [254, 258]}}}, + '/encryptionkeys': {'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54], + 'server.ts': [254]}}}, + '/encryptionkeys/{file}': {'parameters': [{'in': 'path', + 'name': 'file', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [255]}}}, + '/file': {'post': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [281, 282, 283]}}}, + '/file-upload': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [281]}}}, + '/frontend/dist/frontend': {'x-atom-usages': {'call': {'server.ts': [265]}}}, + '/ftp': {'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54], + 'server.ts': [207, 249]}}}, + '/ftp/quarantine/{file}': {'parameters': [{'in': 'path', + 'name': 'file', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [251]}}}, + '/hbs': {'x-atom-usages': {'call': {'server.ts': [149]}}}, + '/image': {'post': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [284]}}}, + '/kekse': {'x-atom-usages': {'call': {'server.ts': [266]}}}, + '/logs': {'x-atom-usages': {'call': {'server.ts': [258]}}}, + '/metrics': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [678]}}}, + '/profile': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [620, 621]}}}, + '/profile/image/file': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [282]}}}, + '/profile/image/url': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [283]}}}, + '/promotion': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [616]}}}, + '/redirect': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [613]}}}, + '/rest/2fa/disable': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [435]}}}, + '/rest/2fa/setup': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [429]}}}, + '/rest/2fa/status': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}, + {'in': 'header', + 'name': 'routes/2fa.ts::program:status'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [427]}}}, + '/rest/2fa/verify': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [422]}}}, + '/rest/admin/application-configuration': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [561]}}}, + '/rest/admin/application-version': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [560, + 569]}}}, + '/rest/basket': {'x-atom-usages': {'call': {'server.ts': [325]}}}, + '/rest/basket/{id}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [363, 557]}}}, + '/rest/basket/{id}/checkout': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'post': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [558]}}}, + '/rest/basket/{id}/coupon/{coupon}': {'parameters': [{'in': 'path', + 'name': 'coupon', + 'required': True}, + {'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [559]}}}, + '/rest/basket/{id}/order': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [364]}}}, + '/rest/captcha': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [570]}}}, + '/rest/chatbot/respond': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [587]}}}, + '/rest/chatbot/status': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [586]}}}, + '/rest/continue-code': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [563]}}}, + '/rest/continue-code-findIt': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [564]}}}, + '/rest/continue-code-findIt/apply/{continueCode}': {'parameters': [{'in': 'path', + 'name': 'continueCode', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [566]}}}, + '/rest/continue-code-fixIt': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [565]}}}, + '/rest/continue-code-fixIt/apply/{continueCode}': {'parameters': [{'in': 'path', + 'name': 'continueCode', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [567]}}}, + '/rest/continue-code/apply/{continueCode}': {'parameters': [{'in': 'path', + 'name': 'continueCode', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [568]}}}, + '/rest/country-mapping': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [573]}}}, + '/rest/deluxe-membership': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [583, + 584]}}}, + '/rest/image-captcha': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [571]}}}, + '/rest/languages': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [577]}}}, + '/rest/memories': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [284, 585]}}}, + '/rest/order-history': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [578]}}}, + '/rest/order-history/orders': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [579]}}}, + '/rest/order-history/{id}/delivery-status': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [580]}}}, + '/rest/products/reviews': {'patch': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [591, + 592]}}}, + '/rest/products/search': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [556]}}}, + '/rest/products/{id}/reviews': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [589, + 590]}}}, + '/rest/repeat-notification': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [562]}}}, + '/rest/saveLoginIp': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [574]}}}, + '/rest/track-order/{id}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [572]}}}, + '/rest/user/authentication-details': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [362, + 555]}}}, + '/rest/user/change-password': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [551]}}}, + '/rest/user/data-export': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [575, + 576]}}}, + '/rest/user/login': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [550]}}}, + '/rest/user/reset-password': {'head': {'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [313, + 552]}}}, + '/rest/user/security-question': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [553]}}}, + '/rest/user/whoami': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [554]}}}, + '/rest/wallet/balance': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'put': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [581, 582]}}}, + '/rest/web3/nftMintListen': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [597]}}}, + '/rest/web3/nftUnlocked': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [596]}}}, + '/rest/web3/submitKey': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [595]}}}, + '/rest/web3/walletExploitAddress': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [599]}}}, + '/rest/web3/walletNFTVerify': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [598]}}}, + '/security.txt': {'get': {'parameters': [{'in': 'header', 'name': 'ANY'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [196, 197]}}}, + '/snippets': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [624]}}}, + '/snippets/fixes': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [628]}}}, + '/snippets/fixes/{key}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'key', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [627]}}}, + '/snippets/verdict': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [626]}}}, + '/snippets/{challenge}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'challenge', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [625]}}}, + '/solve/challenges/server-side': {'x-atom-usages': {'call': {'server.ts': [219]}}}, + '/support/logs': {'x-atom-usages': {'call': {'server.ts': [258, 259]}}}, + '/support/logs/{file}': {'parameters': [{'in': 'path', + 'name': 'file', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [260]}}}, + '/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [605]}}}, + '/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [606]}}}, + '/token': {'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54]}}}, + '/trustproxy': {'x-atom-usages': {'call': {'server.ts': [312]}}}, + '/video': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [617]}}}, + '/viewengine': {'x-atom-usages': {'call': {'server.ts': [149]}}}, + '/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [607]}}}, + '/{regex_param_1}/{file}': {'parameters': [{'in': 'path', + 'name': 'file', + 'required': True}, + {'in': 'path', + 'name': 'regex_param_1', + 'required': True, + 'schema': {'pattern': 'ftp(?!/quarantine)', + 'type': 'string'}}], + 'x-atom-usages': {'call': {'server.ts': [250]}}}} + result = js_usages_2.convert_usages() + result = sort_result(result) + assert result == {'/': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [30], + 'app/routes/tutorial.js': [8]}}}, + '/allocations/{userId}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'userId', + 'required': True}], + 'x-atom-usages': {'call': {'app/routes/index.js': [63]}}}, + '/app/assets/favicon.ico': {'x-atom-usages': {'call': {'server.js': [68]}}}, + '/benefits': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [55, 56]}}}, + '/contributions': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [51, + 52]}}}, + '/dashboard': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [44]}}}, + '/html': {'x-atom-usages': {'call': {'server.js': [117]}}}, + '/learn': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [70]}}}, + '/login': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [33, 34]}}}, + '/logout': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [41]}}}, + '/maxAge': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.js': [78]}}}, + '/memos': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [66, 67]}}}, + '/profile': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [47, 48]}}}, + '/research': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'app/routes/session.js::program:SessionHandler:(isLoggedInMiddleware)'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [76]}}}, + '/sessionId': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.js': [78]}}}, + '/signup': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/index.js': [37, 38]}}}, + '/tutorial': {'x-atom-usages': {'call': {'app/routes/index.js': [79]}}}, + '/tutorial/a1': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/tutorial.js': [8]}}}, + '/usestrict': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'app/routes/tutorial.js': [8, 31]}}}, + '/viewengine': {'x-atom-usages': {'call': {'server.js': [117]}}}, + '/views': {'x-atom-usages': {'call': {'server.js': [118]}}}} + assert py_usages_1.convert_usages() == { + '/admin': {}, '/conversation': {}, '/conversation/{friend_pk}': {'parameters': [{'in': 'path', 'name': 'friend_pk', @@ -716,7 +1459,8 @@ def test_convert_usages(java_usages_1, java_usages_2, js_usages_1, js_usages_2, def test_endpoints_to_openapi(java_usages_1): - assert java_usages_1.endpoints_to_openapi() == {'info': {'title': 'OpenAPI Specification for data', 'version': '1.0.0'}, + result = sort_result(java_usages_1.endpoints_to_openapi()) + assert result == {'info': {'title': 'OpenAPI Specification for data', 'version': '1.0.0'}, 'openapi': '3.1.0', 'paths': {'/': {'post': {'responses': {}}, 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [35]}}}, @@ -727,7 +1471,15 @@ def test_endpoints_to_openapi(java_usages_1): 'x-atom-usages': {'call': {'notification-service/src/main/java/com/piggymetrics/notification/client/AccountServiceClient.java': [12]}}}, '/current': {'get': {'responses': {}}, 'put': {'responses': {}}, - 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [20]}}}, + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [25, + 30], + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java': [22], + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java': [21, + 26], + 'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [20]}, + 'target': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [30], + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java': [22], + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java': [26]}}}, '/latest': {'get': {'responses': {}}, 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java': [13]}}}, '/statistics/{accountName}': {'parameters': [{'in': 'path', @@ -742,10 +1494,9764 @@ def test_endpoints_to_openapi(java_usages_1): 'name': 'accountName', 'required': True}], 'put': {'responses': {}}, - 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [32]}, - 'target': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': 32}}}, + 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [26, + 32]}, + 'target': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [32]}}}, '/{name}': {'get': {'responses': {}}, 'parameters': [{'in': 'path', 'name': 'name', 'required': True}], 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [20]}}}}} + + +def test_filter_calls(): + queried_calls = [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'resolvedMethod': '@RequestMapping(value = "/current", method = RequestMethod.GET)', + 'paramTypes': [], 'returnType': '', 'isExternal': False, 'lineNumber': 20, + 'columnNumber': 2}, + {'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'resolvedMethod': '@RequestMapping(value = "/{accountName}", method = RequestMethod.GET)', + 'paramTypes': [], 'returnType': '', 'isExternal': False, 'lineNumber': 26, + 'columnNumber': 2}, + {'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'resolvedMethod': '@RequestMapping(value = "/{accountName}", method = RequestMethod.PUT)', + 'paramTypes': [], 'returnType': '', 'isExternal': False, 'lineNumber': 32, + 'columnNumber': 2} + ] + resolved_methods = {'resolved_methods': { + '@RequestMapping(value = "/current", method = RequestMethod.GET)': { + 'endpoints': ['/current'], 'calls': [ + {'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'resolvedMethod': '@RequestMapping(value = "/current", method = RequestMethod.GET)', + 'paramTypes': [], 'returnType': '', 'isExternal': False, 'lineNumber': 20, + 'columnNumber': 2}], 'line_nos': [20]}, + '@RequestMapping(value = "/{accountName}", method = RequestMethod.GET)': { + 'endpoints': ['/{accountName}'], 'calls': [ + {'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'resolvedMethod': '@RequestMapping(value = "/{accountName}", method = RequestMethod.GET)', + 'paramTypes': [], 'returnType': '', 'isExternal': False, 'lineNumber': 26, + 'columnNumber': 2}], 'line_nos': [26]}, + '@RequestMapping(value = "/{accountName}", method = RequestMethod.PUT)': { + 'endpoints': ['/{accountName}'], 'calls': [ + {'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'resolvedMethod': '@RequestMapping(value = "/{accountName}", method = RequestMethod.PUT)', + 'paramTypes': [], 'returnType': '', 'isExternal': False, 'lineNumber': 32, + 'columnNumber': 2}], 'line_nos': [32]}} + } + + assert filter_calls(queried_calls, resolved_methods) == {'resolved_methods': {'@RequestMapping(value = "/current", method = RequestMethod.GET)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 20, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(value ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'returnType': ''}], + 'endpoints': ['/current'], + 'line_nos': [20]}, + '@RequestMapping(value = "/{accountName}", method = RequestMethod.GET)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 26, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(value ' + '= ' + '"/{accountName}", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'returnType': ''}], + 'endpoints': ['/{accountName}'], + 'line_nos': [26]}, + '@RequestMapping(value = "/{accountName}", method = RequestMethod.PUT)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 32, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(value ' + '= ' + '"/{accountName}", ' + 'method ' + '= ' + 'RequestMethod.PUT)', + 'returnType': ''}], + 'endpoints': ['/{accountName}'], + 'line_nos': [32]}} + } + + +def test_java(java_usages_1): + methods = java_usages_1._process_methods() + for k, v in methods.items(): + methods[k].sort() + assert methods == { + 'account-service/src/main/java/com/piggymetrics/account/AccountApplication.java': ['.arrayInitializer', + '.fieldAccess', + 'org.springframework.boot.SpringApplication.run:org.springframework.context.ConfigurableApplicationContext(java.lang.Class,java.lang.String[])'], + 'account-service/src/main/java/com/piggymetrics/account/client/AuthServiceClient.java': ['@RequestMapping(method ' + '= ' + 'RequestMethod.POST, ' + 'value ' + '= ' + '"/uaa/users", ' + 'consumes ' + '= ' + 'MediaType.APPLICATION_JSON_UTF8_VALUE)', + 'com.piggymetrics.account.client.AuthServiceClient.createUser:void(com.piggymetrics.account.domain.User)'], + 'account-service/src/main/java/com/piggymetrics/account/client/StatisticsServiceClient.java': ['@RequestMapping(method ' + '= ' + 'RequestMethod.PUT, ' + 'value ' + '= ' + '"/statistics/{accountName}", ' + 'consumes ' + '= ' + 'MediaType.APPLICATION_JSON_UTF8_VALUE)', + 'com.piggymetrics.account.client.StatisticsServiceClient.updateStatistics:void(java.lang.String,com.piggymetrics.account.domain.Account)'], + 'account-service/src/main/java/com/piggymetrics/account/client/StatisticsServiceClientFallback.java': ['@Override', + 'com.piggymetrics.account.client.StatisticsServiceClientFallback.updateStatistics:void(java.lang.String,com.piggymetrics.account.domain.Account)', + 'org.slf4j.Logger.error:void(java.lang.String,java.lang.Object)'], + 'account-service/src/main/java/com/piggymetrics/account/config/ResourceServerConfig.java': ['.alloc', + '@Autowired', + '@Bean', + '@ConfigurationProperties(prefix ' + '= ' + '"security.oauth2.client")', + '@Override', + 'com.piggymetrics.account.config.ResourceServerConfig.clientCredentialsResourceDetails:org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsResourceDetails()', + 'org.springframework.boot.autoconfigure.security.oauth2.resource.ResourceServerProperties.getClientId:java.lang.String()', + 'org.springframework.boot.autoconfigure.security.oauth2.resource.ResourceServerProperties.getUserInfoUri:java.lang.String()', + 'org.springframework.cloud.security.oauth2.client.feign.OAuth2FeignRequestInterceptor.:void(org.springframework.security.oauth2.client.OAuth2ClientContext,org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails)', + 'org.springframework.security.config.annotation.web.builders.HttpSecurity.authorizeRequests:org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$ExpressionInterceptUrlRegistry()', + 'org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$AuthorizedUrl.authenticated:org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$ExpressionInterceptUrlRegistry()', + 'org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$AuthorizedUrl.permitAll:org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$ExpressionInterceptUrlRegistry()', + 'org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$ExpressionInterceptUrlRegistry.antMatchers:java.lang.Object(java.lang.String[])', + 'org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$ExpressionInterceptUrlRegistry.anyRequest:java.lang.Object()', + 'org.springframework.security.oauth2.client.DefaultOAuth2ClientContext.:void()', + 'org.springframework.security.oauth2.client.OAuth2RestTemplate.:void(org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails)', + 'org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsResourceDetails.:void()'], + 'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': ['@PreAuthorize("#oauth2.hasScope(\'server\') ' + 'or ' + '#name.equals(\'demo\')")', + '@RequestMapping(path ' + '= ' + '"/", ' + 'method ' + '= ' + 'RequestMethod.POST)', + '@RequestMapping(path ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.GET)', + '@RequestMapping(path ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.PUT)', + '@RequestMapping(path ' + '= ' + '"/{name}", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'com.piggymetrics.account.service.AccountService.create:com.piggymetrics.account.domain.Account(com.piggymetrics.account.domain.User)', + 'com.piggymetrics.account.service.AccountService.findByName:com.piggymetrics.account.domain.Account(java.lang.String)', + 'com.piggymetrics.account.service.AccountService.saveChanges:void(java.lang.String,com.piggymetrics.account.domain.Account)', + 'java.security.Principal.getName:java.lang.String()'], + 'account-service/src/main/java/com/piggymetrics/account/controller/ErrorHandler.java': ['@ExceptionHandler(IllegalArgumentException.class)', + '@ResponseStatus(HttpStatus.BAD_REQUEST)', + 'com.piggymetrics.account.controller.ErrorHandler.getClass:java.lang.Class()', + 'org.slf4j.Logger.info:void(java.lang.String,java.lang.Throwable)'], + 'account-service/src/main/java/com/piggymetrics/account/domain/Account.java': ['com.piggymetrics.account.domain.Account.:void()', + 'com.piggymetrics.account.domain.Account.getExpenses:java.util.List()', + 'com.piggymetrics.account.domain.Account.getIncomes:java.util.List()', + 'com.piggymetrics.account.domain.Account.getName:java.lang.String()', + 'com.piggymetrics.account.domain.Account.getNote:java.lang.String()', + 'com.piggymetrics.account.domain.Account.getSaving:com.piggymetrics.account.domain.Saving()', + 'com.piggymetrics.account.domain.Account.setExpenses:void(java.util.List)', + 'com.piggymetrics.account.domain.Account.setIncomes:void(java.util.List)', + 'com.piggymetrics.account.domain.Account.setLastSeen:void(java.util.Date)', + 'com.piggymetrics.account.domain.Account.setName:void(java.lang.String)', + 'com.piggymetrics.account.domain.Account.setNote:void(java.lang.String)', + 'com.piggymetrics.account.domain.Account.setSaving:void(com.piggymetrics.account.domain.Saving)'], + 'account-service/src/main/java/com/piggymetrics/account/domain/Currency.java': ['com.piggymetrics.account.domain.Currency.getDefault:com.piggymetrics.account.domain.Currency()'], + 'account-service/src/main/java/com/piggymetrics/account/domain/Saving.java': ['com.piggymetrics.account.domain.Saving.:void()', + 'com.piggymetrics.account.domain.Saving.setAmount:void(java.math.BigDecimal)', + 'com.piggymetrics.account.domain.Saving.setCapitalization:void(java.lang.Boolean)', + 'com.piggymetrics.account.domain.Saving.setCurrency:void(com.piggymetrics.account.domain.Currency)', + 'com.piggymetrics.account.domain.Saving.setDeposit:void(java.lang.Boolean)', + 'com.piggymetrics.account.domain.Saving.setInterest:void(java.math.BigDecimal)'], + 'account-service/src/main/java/com/piggymetrics/account/domain/User.java': ['com.piggymetrics.account.domain.User.getUsername:java.lang.String()'], + 'account-service/src/main/java/com/piggymetrics/account/repository/AccountRepository.java': ['com.piggymetrics.account.repository.AccountRepository.findByName:com.piggymetrics.account.domain.Account(java.lang.String)'], + 'account-service/src/main/java/com/piggymetrics/account/service/AccountService.java': ['com.piggymetrics.account.service.AccountService.create:com.piggymetrics.account.domain.Account(com.piggymetrics.account.domain.User)', + 'com.piggymetrics.account.service.AccountService.findByName:com.piggymetrics.account.domain.Account(java.lang.String)', + 'com.piggymetrics.account.service.AccountService.saveChanges:void(java.lang.String,com.piggymetrics.account.domain.Account)'], + 'account-service/src/main/java/com/piggymetrics/account/service/AccountServiceImpl.java': ['.addition', + '@Override', + 'com.piggymetrics.account.client.AuthServiceClient.createUser:void(com.piggymetrics.account.domain.User)', + 'com.piggymetrics.account.client.StatisticsServiceClient.updateStatistics:void(java.lang.String,com.piggymetrics.account.domain.Account)', + 'com.piggymetrics.account.domain.Account.:void()', + 'com.piggymetrics.account.domain.Account.getExpenses:java.util.List()', + 'com.piggymetrics.account.domain.Account.getIncomes:java.util.List()', + 'com.piggymetrics.account.domain.Account.getName:java.lang.String()', + 'com.piggymetrics.account.domain.Account.getNote:java.lang.String()', + 'com.piggymetrics.account.domain.Account.getSaving:com.piggymetrics.account.domain.Saving()', + 'com.piggymetrics.account.domain.Account.setExpenses:void(java.util.List)', + 'com.piggymetrics.account.domain.Account.setIncomes:void(java.util.List)', + 'com.piggymetrics.account.domain.Account.setName:void(java.lang.String)', + 'com.piggymetrics.account.domain.Account.setNote:void(java.lang.String)', + 'com.piggymetrics.account.domain.Account.setSaving:void(com.piggymetrics.account.domain.Saving)', + 'com.piggymetrics.account.domain.Saving.:void()', + 'com.piggymetrics.account.domain.Saving.setCapitalization:void(java.lang.Boolean)', + 'com.piggymetrics.account.domain.Saving.setCurrency:void(com.piggymetrics.account.domain.Currency)', + 'com.piggymetrics.account.domain.Saving.setDeposit:void(java.lang.Boolean)', + 'com.piggymetrics.account.domain.User.getUsername:java.lang.String()', + 'com.piggymetrics.account.repository.AccountRepository.findByName:com.piggymetrics.account.domain.Account(java.lang.String)', + 'com.piggymetrics.account.repository.AccountRepository.save:java.lang.Object(java.lang.Object)', + 'com.piggymetrics.account.service.AccountServiceImpl.create:com.piggymetrics.account.domain.Account(com.piggymetrics.account.domain.User)', + 'com.piggymetrics.account.service.AccountServiceImpl.findByName:com.piggymetrics.account.domain.Account(java.lang.String)', + 'com.piggymetrics.account.service.AccountServiceImpl.getClass:java.lang.Class()', + 'com.piggymetrics.account.service.AccountServiceImpl.saveChanges:void(java.lang.String,com.piggymetrics.account.domain.Account)', + 'com.piggymetrics.statistics.domain.Account', + 'com.piggymetrics.statistics.domain.Saving', + 'java.math.BigDecimal', + 'java.math.BigDecimal.:void(int)', + 'java.util.Date', + 'java.util.Date.:void()', + 'org.slf4j.Logger.debug:void(java.lang.String,java.lang.Object)', + 'org.slf4j.Logger.info:void(java.lang.String)', + 'org.springframework.util.Assert.hasLength:void(java.lang.String)', + 'org.springframework.util.Assert.isNull:void(java.lang.Object,java.lang.String)', + 'org.springframework.util.Assert.notNull:void(java.lang.Object,java.lang.String)'], + 'account-service/src/main/java/com/piggymetrics/account/service/security/CustomUserInfoTokenServices.java': ['.cast', + '.conditional', + '.equals', + '.indexAccess', + '.lessThan', + '.logicalNot', + '.logicalOr', + '.postIncrement', + '.throw', + '@Override', + '@SuppressWarnings({ ' + '"unchecked" ' + '})', + 'com.piggymetrics.account.service.security.CustomUserInfoTokenServices.:void(java.lang.String,java.lang.String)', + 'com.piggymetrics.account.service.security.CustomUserInfoTokenServices.extractAuthentication:org.springframework.security.oauth2.provider.OAuth2Authentication(java.util.Map)', + 'com.piggymetrics.account.service.security.CustomUserInfoTokenServices.getClass:java.lang.Class()', + 'com.piggymetrics.account.service.security.CustomUserInfoTokenServices.getMap:java.util.Map(java.lang.String,java.lang.String)', + 'com.piggymetrics.account.service.security.CustomUserInfoTokenServices.getPrincipal:java.lang.Object(java.util.Map)', + 'com.piggymetrics.account.service.security.CustomUserInfoTokenServices.getRequest:org.springframework.security.oauth2.provider.OAuth2Request(java.util.Map)', + 'java.lang.Exception.getClass:java.lang.Class()', + 'java.lang.Exception.getMessage:java.lang.String()', + 'java.lang.String.equals:boolean(java.lang.Object)', + 'java.lang.UnsupportedOperationException.:void(java.lang.String)', + 'java.util.Collections.emptySet:java.util.Set()', + 'java.util.Collections.singletonMap:java.util.Map(java.lang.Object,java.lang.Object)', + 'java.util.HashSet.:void(java.util.Collection)', + 'java.util.LinkedHashSet.:void(java.util.Collection)', + 'java.util.Map.containsKey:boolean(java.lang.Object)', + 'java.util.Map.get:java.lang.Object(java.lang.Object)', + 'org.apache.commons.logging.Log.debug:void(java.lang.Object)', + 'org.apache.commons.logging.Log.info:void(java.lang.Object)', + 'org.apache.commons.logging.LogFactory.getLog:org.apache.commons.logging.Log(java.lang.Class)', + 'org.springframework.boot.autoconfigure.security.oauth2.resource.AuthoritiesExtractor.extractAuthorities:java.util.List(java.util.Map)', + 'org.springframework.boot.autoconfigure.security.oauth2.resource.FixedAuthoritiesExtractor.:void()', + 'org.springframework.http.ResponseEntity.getBody:java.lang.Object()', + 'org.springframework.security.authentication.UsernamePasswordAuthenticationToken', + 'org.springframework.security.authentication.UsernamePasswordAuthenticationToken.:void(java.lang.Object,java.lang.Object,java.util.Collection)', + 'org.springframework.security.authentication.UsernamePasswordAuthenticationToken.setDetails:void(java.lang.Object)', + 'org.springframework.security.oauth2.client.OAuth2ClientContext.getAccessToken:org.springframework.security.oauth2.common.OAuth2AccessToken()', + 'org.springframework.security.oauth2.client.OAuth2ClientContext.setAccessToken:void(org.springframework.security.oauth2.common.OAuth2AccessToken)', + 'org.springframework.security.oauth2.client.OAuth2RestOperations.getForEntity:org.springframework.http.ResponseEntity(java.lang.String,java.lang.Class,java.lang.Object[])', + 'org.springframework.security.oauth2.client.OAuth2RestOperations.getOAuth2ClientContext:org.springframework.security.oauth2.client.OAuth2ClientContext()', + 'org.springframework.security.oauth2.client.OAuth2RestTemplate', + 'org.springframework.security.oauth2.client.OAuth2RestTemplate.:void(org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails)', + 'org.springframework.security.oauth2.client.resource.BaseOAuth2ProtectedResourceDetails', + 'org.springframework.security.oauth2.client.resource.BaseOAuth2ProtectedResourceDetails.:void()', + 'org.springframework.security.oauth2.client.resource.BaseOAuth2ProtectedResourceDetails.setClientId:void(java.lang.String)', + 'org.springframework.security.oauth2.common.DefaultOAuth2AccessToken', + 'org.springframework.security.oauth2.common.DefaultOAuth2AccessToken.:void(java.lang.String)', + 'org.springframework.security.oauth2.common.DefaultOAuth2AccessToken.setTokenType:void(java.lang.String)', + 'org.springframework.security.oauth2.common.OAuth2AccessToken.getValue:java.lang.String()', + 'org.springframework.security.oauth2.common.exceptions.InvalidTokenException.:void(java.lang.String)', + 'org.springframework.security.oauth2.provider.OAuth2Authentication.:void(org.springframework.security.oauth2.provider.OAuth2Request,org.springframework.security.core.Authentication)', + 'org.springframework.security.oauth2.provider.OAuth2Request', + 'org.springframework.security.oauth2.provider.OAuth2Request.:void(java.util.Map,java.lang.String,java.util.Collection,boolean,java.util.Set,java.util.Set,java.lang.String,java.util.Set,java.util.Map)'], + 'auth-service/src/main/java/com/piggymetrics/auth/config/OAuth2AuthorizationConfig.java': ['@Override', + 'org.springframework.core.env.Environment.getProperty:java.lang.String(java.lang.String)', + 'org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance:org.springframework.security.crypto.password.PasswordEncoder()', + 'org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder$ClientBuilder.and:org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder()', + 'org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder$ClientBuilder.authorizedGrantTypes:org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder$ClientBuilder(java.lang.String[])', + 'org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder$ClientBuilder.scopes:org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder$ClientBuilder(java.lang.String[])', + 'org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder$ClientBuilder.secret:org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder$ClientBuilder(java.lang.String)', + 'org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder.withClient:org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder$ClientBuilder(java.lang.String)', + 'org.springframework.security.oauth2.config.annotation.builders.InMemoryClientDetailsServiceBuilder.withClient:org.springframework.security.oauth2.config.annotation.builders.ClientDetailsServiceBuilder$ClientBuilder(java.lang.String)', + 'org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer.inMemory:org.springframework.security.oauth2.config.annotation.builders.InMemoryClientDetailsServiceBuilder()', + 'org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer.authenticationManager:org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer(org.springframework.security.authentication.AuthenticationManager)', + 'org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer.tokenStore:org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer(org.springframework.security.oauth2.provider.token.TokenStore)', + 'org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer.userDetailsService:org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer(org.springframework.security.core.userdetails.UserDetailsService)', + 'org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer.checkTokenAccess:org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer(java.lang.String)', + 'org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer.passwordEncoder:org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer(org.springframework.security.crypto.password.PasswordEncoder)', + 'org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer.tokenKeyAccess:org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer(java.lang.String)', + 'org.springframework.security.oauth2.provider.token.store.InMemoryTokenStore.:void()'], + 'auth-service/src/main/java/com/piggymetrics/auth/config/WebSecurityConfig.java': ['.disable:(0)', + '@Bean', + '@Override', + 'org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder.userDetailsService:org.springframework.security.config.annotation.authentication.configurers.userdetails.DaoAuthenticationConfigurer(org.springframework.security.core.userdetails.UserDetailsService)', + 'org.springframework.security.config.annotation.authentication.configurers.userdetails.DaoAuthenticationConfigurer.passwordEncoder:org.springframework.security.config.annotation.authentication.configurers.userdetails.AbstractDaoAuthenticationConfigurer(org.springframework.security.crypto.password.PasswordEncoder)', + 'org.springframework.security.config.annotation.web.HttpSecurityBuilder.csrf:(0)', + 'org.springframework.security.config.annotation.web.builders.HttpSecurity.authorizeRequests:org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$ExpressionInterceptUrlRegistry()', + 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.authenticationManagerBean:org.springframework.security.authentication.AuthenticationManager()', + 'org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$ExpressionInterceptUrlRegistry.and:org.springframework.security.config.annotation.web.HttpSecurityBuilder()', + 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.:void()'], + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java': ['@PreAuthorize("#oauth2.hasScope(\'server\')")', + '@RequestMapping(method ' + '= ' + 'RequestMethod.POST)', + '@RequestMapping(value ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'com.piggymetrics.auth.service.UserService.create:void(com.piggymetrics.auth.domain.User)'], + 'auth-service/src/main/java/com/piggymetrics/auth/domain/User.java': ['@Override', + 'com.piggymetrics.auth.domain.User.getPassword:java.lang.String()', + 'com.piggymetrics.auth.domain.User.getUsername:java.lang.String()', + 'com.piggymetrics.auth.domain.User.setPassword:void(java.lang.String)'], + 'auth-service/src/main/java/com/piggymetrics/auth/service/UserService.java': ['com.piggymetrics.auth.service.UserService.create:void(com.piggymetrics.auth.domain.User)'], + 'auth-service/src/main/java/com/piggymetrics/auth/service/UserServiceImpl.java': ['@Override', + 'com.piggymetrics.auth.domain.User.getPassword:java.lang.String()', + 'com.piggymetrics.auth.domain.User.getUsername:java.lang.String()', + 'com.piggymetrics.auth.domain.User.setPassword:void(java.lang.String)', + 'com.piggymetrics.auth.repository.UserRepository.findById:java.util.Optional(java.lang.Object)', + 'com.piggymetrics.auth.repository.UserRepository.save:java.lang.Object(java.lang.Object)', + 'com.piggymetrics.auth.service.UserServiceImpl.create:void(com.piggymetrics.auth.domain.User)', + 'com.piggymetrics.auth.service.UserServiceImpl.getClass:java.lang.Class()', + 'java.lang.IllegalArgumentException.:void(java.lang.String)', + 'java.util.Optional.ifPresent:void(java.util.function.Consumer)', + 'org.slf4j.Logger.info:void(java.lang.String,java.lang.Object)', + 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode:java.lang.String(java.lang.CharSequence)'], + 'auth-service/src/main/java/com/piggymetrics/auth/service/security/MongoUserDetailsService.java': ['@Override', + 'com.piggymetrics.auth.repository.UserRepository.findById:java.util.Optional(java.lang.Object)', + 'java.util.Optional.orElseThrow:java.lang.Object(java.util.function.Supplier)', + 'org.springframework.security.core.userdetails.UsernameNotFoundException.:void(java.lang.String)'], + 'com.piggymetrics.account.client.StatisticsServiceClientFallback': ['LOGGER'], + 'com.piggymetrics.account.config.ResourceServerConfig': ['sso'], + 'com.piggymetrics.account.controller.AccountController': ['accountService'], + 'com.piggymetrics.account.controller.ErrorHandler': ['log'], + 'com.piggymetrics.account.domain.Account': ['expenses', + 'incomes', + 'lastSeen', + 'name', + 'note', + 'saving'], + 'com.piggymetrics.account.domain.Currency': ['EUR', 'RUB', 'USD'], + 'com.piggymetrics.account.domain.Item': ['amount', + 'currency', + 'icon', + 'period', + 'title'], + 'com.piggymetrics.account.domain.Saving': ['amount', + 'capitalization', + 'currency', + 'deposit', + 'interest'], + 'com.piggymetrics.account.domain.TimePeriod': ['DAY', + 'HOUR', + 'MONTH', + 'QUARTER', + 'YEAR'], + 'com.piggymetrics.account.domain.User': ['password', 'username'], + 'com.piggymetrics.account.service.AccountServiceImpl': ['authClient', + 'log', + 'repository', + 'statisticsClient'], + 'com.piggymetrics.account.service.security.CustomUserInfoTokenServices': ['PRINCIPAL_KEYS', + 'authoritiesExtractor', + 'clientId', + 'logger', + 'restTemplate', + 'tokenType', + 'userInfoEndpointUrl'], + 'com.piggymetrics.auth.config.OAuth2AuthorizationConfig': ['NOOP_PASSWORD_ENCODE', + 'authenticationManager', + 'env', + 'tokenStore', + 'userDetailsService'], + 'com.piggymetrics.auth.config.WebSecurityConfig': ['userDetailsService'], + 'com.piggymetrics.auth.controller.UserController': ['userService'], + 'com.piggymetrics.auth.domain.User': ['password', 'username'], + 'com.piggymetrics.auth.service.UserServiceImpl': ['encoder', + 'log', + 'repository'], + 'com.piggymetrics.auth.service.security.MongoUserDetailsService': ['repository'], + 'com.piggymetrics.notification.controller.RecipientController': ['recipientService'], + 'com.piggymetrics.notification.domain.Frequency': ['MONTHLY', + 'QUARTERLY', + 'WEEKLY', + 'days'], + 'com.piggymetrics.notification.domain.NotificationSettings': ['active', + 'frequency', + 'lastNotified'], + 'com.piggymetrics.notification.domain.NotificationType': ['BACKUP', + 'REMIND', + 'attachment', + 'subject', + 'text'], + 'com.piggymetrics.notification.domain.Recipient': ['accountName', + 'email', + 'scheduledNotifications'], + 'com.piggymetrics.notification.service.EmailServiceImpl': ['env', + 'log', + 'mailSender'], + 'com.piggymetrics.notification.service.NotificationServiceImpl': ['client', + 'emailService', + 'log', + 'recipientService'], + 'com.piggymetrics.notification.service.RecipientServiceImpl': ['log', + 'repository'], + 'com.piggymetrics.statistics.config.ResourceServerConfig': ['sso'], + 'com.piggymetrics.statistics.controller.StatisticsController': ['statisticsService'], + 'com.piggymetrics.statistics.domain.Account': ['expenses', + 'incomes', + 'saving'], + 'com.piggymetrics.statistics.domain.Currency': ['EUR', 'RUB', 'USD'], + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer': ['base', + 'date', + 'rates'], + 'com.piggymetrics.statistics.domain.Item': ['amount', + 'currency', + 'period', + 'title'], + 'com.piggymetrics.statistics.domain.Saving': ['amount', + 'capitalization', + 'currency', + 'deposit', + 'interest'], + 'com.piggymetrics.statistics.domain.TimePeriod': ['DAY', + 'HOUR', + 'MONTH', + 'QUARTER', + 'YEAR', + 'baseRatio'], + 'com.piggymetrics.statistics.domain.timeseries.DataPoint': ['expenses', + 'id', + 'incomes', + 'rates', + 'statistics'], + 'com.piggymetrics.statistics.domain.timeseries.DataPointId': ['account', + 'date', + 'serialVersionUID'], + 'com.piggymetrics.statistics.domain.timeseries.ItemMetric': ['amount', + 'title'], + 'com.piggymetrics.statistics.domain.timeseries.StatisticMetric': ['EXPENSES_AMOUNT', + 'INCOMES_AMOUNT', + 'SAVING_AMOUNT'], + 'com.piggymetrics.statistics.repository.converter.DataPointIdWriterConverter': ['FIELDS'], + 'com.piggymetrics.statistics.service.ExchangeRatesServiceImpl': ['client', + 'container', + 'log'], + 'com.piggymetrics.statistics.service.StatisticsServiceImpl': ['log', + 'ratesService', + 'repository'], + 'com.piggymetrics.statistics.service.security.CustomUserInfoTokenServices': ['PRINCIPAL_KEYS', + 'authoritiesExtractor', + 'clientId', + 'logger', + 'restTemplate', + 'tokenType', + 'userInfoEndpointUrl'], + 'config/src/main/java/com/piggymetrics/config/SecurityConfig.java': ['@Override', + 'org.springframework.security.config.annotation.web.HttpSecurityBuilder.httpBasic:(0)', + 'org.springframework.security.config.annotation.web.builders.HttpSecurity.authorizeRequests:org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer$ExpressionInterceptUrlRegistry()', + 'org.springframework.security.config.annotation.web.builders.HttpSecurity.csrf:org.springframework.security.config.annotation.web.configurers.CsrfConfigurer()', + 'org.springframework.security.config.annotation.web.configurers.CsrfConfigurer.disable:org.springframework.security.config.annotation.web.HttpSecurityBuilder()'], + 'notification-service/src/main/java/com/piggymetrics/notification/NotificationServiceApplication.java': ['@Bean', + 'java.util.Arrays.asList:java.util.List(java.lang.Object[])', + 'org.springframework.data.mongodb.core.convert.CustomConversions.:void(java.util.List)'], + 'notification-service/src/main/java/com/piggymetrics/notification/client/AccountServiceClient.java': ['@RequestMapping(method ' + '= ' + 'RequestMethod.GET, ' + 'value ' + '= ' + '"/accounts/{accountName}", ' + 'consumes ' + '= ' + 'MediaType.APPLICATION_JSON_UTF8_VALUE)', + 'com.piggymetrics.notification.client.AccountServiceClient.getAccount:java.lang.String(java.lang.String)'], + 'notification-service/src/main/java/com/piggymetrics/notification/config/ResourceServerConfig.java': ['@Bean', + '@ConfigurationProperties(prefix ' + '= ' + '"security.oauth2.client")', + 'com.piggymetrics.notification.config.ResourceServerConfig.clientCredentialsResourceDetails:org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsResourceDetails()'], + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java': ['@RequestMapping(path ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.GET)', + '@RequestMapping(path ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.PUT)', + 'com.piggymetrics.notification.service.RecipientService.save:com.piggymetrics.notification.domain.Recipient(java.lang.String,com.piggymetrics.notification.domain.Recipient)', + 'java.security.Principal.getName:java.lang.String()'], + 'notification-service/src/main/java/com/piggymetrics/notification/domain/Frequency.java': ['com.piggymetrics.notification.domain.Frequency.getDays:int()', + 'com.piggymetrics.notification.domain.Frequency.values:com.piggymetrics.notification.domain.Frequency[]()', + 'com.piggymetrics.notification.domain.Frequency.withDays:com.piggymetrics.notification.domain.Frequency(int)', + 'java.util.stream.Stream.filter:java.util.stream.Stream(java.util.function.Predicate)', + 'java.util.stream.Stream.findFirst:java.util.Optional()', + 'java.util.stream.Stream.of:java.util.stream.Stream(java.lang.Object[])'], + 'notification-service/src/main/java/com/piggymetrics/notification/domain/NotificationSettings.java': ['com.piggymetrics.notification.domain.NotificationSettings.getLastNotified:java.util.Date()', + 'com.piggymetrics.notification.domain.NotificationSettings.setLastNotified:void(java.util.Date)'], + 'notification-service/src/main/java/com/piggymetrics/notification/domain/NotificationType.java': ['com.piggymetrics.notification.domain.NotificationType.getAttachment:java.lang.String()', + 'com.piggymetrics.notification.domain.NotificationType.getSubject:java.lang.String()', + 'com.piggymetrics.notification.domain.NotificationType.getText:java.lang.String()'], + 'notification-service/src/main/java/com/piggymetrics/notification/domain/Recipient.java': ['@Override', + 'com.piggymetrics.notification.domain.Recipient.getAccountName:java.lang.String()', + 'com.piggymetrics.notification.domain.Recipient.getEmail:java.lang.String()', + 'com.piggymetrics.notification.domain.Recipient.getScheduledNotifications:java.util.Map()', + 'com.piggymetrics.notification.domain.Recipient.setAccountName:void(java.lang.String)'], + 'notification-service/src/main/java/com/piggymetrics/notification/repository/RecipientRepository.java': ['@Query("{ ' + '$and: ' + '[ ' + "{'scheduledNotifications.BACKUP.active': " + 'true ' + '}, ' + '{ ' + '$where: ' + "'this.scheduledNotifications.BACKUP.lastNotified " + '< ' + '" ' + '+ ' + '"new ' + 'Date(new ' + 'Date().setDate(new ' + 'Date().getDate() ' + '- ' + 'this.scheduledNotifications.BACKUP.frequency ' + "))' " + '}] ' + '}")', + '@Query("{ ' + '$and: ' + '[ ' + "{'scheduledNotifications.REMIND.active': " + 'true ' + '}, ' + '{ ' + '$where: ' + "'this.scheduledNotifications.REMIND.lastNotified " + '< ' + '" ' + '+ ' + '"new ' + 'Date(new ' + 'Date().setDate(new ' + 'Date().getDate() ' + '- ' + 'this.scheduledNotifications.REMIND.frequency ' + "))' " + '}] ' + '}")', + 'com.piggymetrics.notification.repository.RecipientRepository.findByAccountName:com.piggymetrics.notification.domain.Recipient(java.lang.String)', + 'com.piggymetrics.notification.repository.RecipientRepository.findReadyForBackup:java.util.List()', + 'com.piggymetrics.notification.repository.RecipientRepository.findReadyForRemind:java.util.List()'], + 'notification-service/src/main/java/com/piggymetrics/notification/repository/converter/FrequencyReaderConverter.java': ['@Override', + 'com.piggymetrics.notification.domain.Frequency.withDays:com.piggymetrics.notification.domain.Frequency(int)', + 'com.piggymetrics.notification.repository.converter.FrequencyReaderConverter.:void()'], + 'notification-service/src/main/java/com/piggymetrics/notification/repository/converter/FrequencyWriterConverter.java': ['@Override', + 'com.piggymetrics.notification.domain.Frequency.getDays:int()', + 'com.piggymetrics.notification.repository.converter.FrequencyWriterConverter.:void()'], + 'notification-service/src/main/java/com/piggymetrics/notification/service/EmailServiceImpl.java': ['@Override', + 'com.piggymetrics.notification.domain.NotificationType.getAttachment:java.lang.String()', + 'com.piggymetrics.notification.domain.NotificationType.getSubject:java.lang.String()', + 'com.piggymetrics.notification.domain.NotificationType.getText:java.lang.String()', + 'com.piggymetrics.notification.domain.Recipient.getAccountName:java.lang.String()', + 'com.piggymetrics.notification.domain.Recipient.getEmail:java.lang.String()', + 'com.piggymetrics.notification.service.EmailServiceImpl.getClass:java.lang.Class()', + 'java.lang.String.getBytes:byte[]()', + 'java.text.MessageFormat.format:java.lang.String(java.lang.String,java.lang.Object[])', + 'org.slf4j.Logger.info:void(java.lang.String,java.lang.Object,java.lang.Object)', + 'org.springframework.core.env.Environment.getProperty:java.lang.String(java.lang.String)', + 'org.springframework.core.io.ByteArrayResource', + 'org.springframework.core.io.ByteArrayResource.:void(byte[])', + 'org.springframework.mail.javamail.JavaMailSender.createMimeMessage:javax.mail.internet.MimeMessage()', + 'org.springframework.mail.javamail.JavaMailSender.send:void(javax.mail.internet.MimeMessage)', + 'org.springframework.mail.javamail.MimeMessageHelper', + 'org.springframework.mail.javamail.MimeMessageHelper.:void(javax.mail.internet.MimeMessage,boolean)', + 'org.springframework.mail.javamail.MimeMessageHelper.addAttachment:void(java.lang.String,org.springframework.core.io.InputStreamSource)', + 'org.springframework.mail.javamail.MimeMessageHelper.setSubject:void(java.lang.String)', + 'org.springframework.mail.javamail.MimeMessageHelper.setText:void(java.lang.String)', + 'org.springframework.mail.javamail.MimeMessageHelper.setTo:void(java.lang.String)', + 'org.springframework.util.StringUtils.hasLength:boolean(java.lang.String)'], + 'notification-service/src/main/java/com/piggymetrics/notification/service/NotificationServiceImpl.java': ['.fieldAccess', + '@Override', + '@Scheduled(cron ' + '= ' + '"${backup.cron}")', + '@Scheduled(cron ' + '= ' + '"${remind.cron}")', + 'com.piggymetrics.notification.client.AccountServiceClient.getAccount:java.lang.String(java.lang.String)', + 'com.piggymetrics.notification.service.EmailService.send:(3)', + 'com.piggymetrics.notification.service.NotificationServiceImpl.getClass:java.lang.Class()', + 'com.piggymetrics.notification.service.RecipientService.findReadyToNotify:java.util.List(com.piggymetrics.notification.domain.NotificationType)', + 'com.piggymetrics.notification.service.RecipientService.markNotified:(2)', + 'java.lang.Object.getAccountName:(0)', + 'java.util.List.forEach:void(java.util.function.Consumer)', + 'java.util.List.size:int()', + 'java.util.concurrent.CompletableFuture.runAsync:java.util.concurrent.CompletableFuture(java.lang.Runnable)', + 'org.slf4j.Logger.error:(3)'], + 'notification-service/src/main/java/com/piggymetrics/notification/service/RecipientService.java': ['com.piggymetrics.notification.service.RecipientService.findByAccountName:com.piggymetrics.notification.domain.Recipient(java.lang.String)', + 'com.piggymetrics.notification.service.RecipientService.findReadyToNotify:java.util.List(com.piggymetrics.notification.domain.NotificationType)', + 'com.piggymetrics.notification.service.RecipientService.save:com.piggymetrics.notification.domain.Recipient(java.lang.String,com.piggymetrics.notification.domain.Recipient)'], + 'notification-service/src/main/java/com/piggymetrics/notification/service/RecipientServiceImpl.java': ['@Override', + 'com.piggymetrics.notification.domain.NotificationSettings.getLastNotified:java.util.Date()', + 'com.piggymetrics.notification.domain.Recipient.getScheduledNotifications:java.util.Map()', + 'com.piggymetrics.notification.domain.Recipient.setAccountName:void(java.lang.String)', + 'com.piggymetrics.notification.repository.RecipientRepository.findByAccountName:com.piggymetrics.notification.domain.Recipient(java.lang.String)', + 'com.piggymetrics.notification.repository.RecipientRepository.save:java.lang.Object(java.lang.Object)', + 'com.piggymetrics.notification.service.RecipientServiceImpl.findByAccountName:com.piggymetrics.notification.domain.Recipient(java.lang.String)', + 'com.piggymetrics.notification.service.RecipientServiceImpl.findReadyToNotify:java.util.List(com.piggymetrics.notification.domain.NotificationType)', + 'com.piggymetrics.notification.service.RecipientServiceImpl.getClass:java.lang.Class()', + 'com.piggymetrics.notification.service.RecipientServiceImpl.save:com.piggymetrics.notification.domain.Recipient(java.lang.String,com.piggymetrics.notification.domain.Recipient)', + 'java.lang.IllegalArgumentException.:void()', + 'java.util.Collection.forEach:void(java.util.function.Consumer)', + 'java.util.Date', + 'java.util.Map.get:java.lang.Object(java.lang.Object)', + 'java.util.Map.values:java.util.Collection()', + 'org.slf4j.Logger.info:void(java.lang.String,java.lang.Object)', + 'org.springframework.util.Assert.hasLength:void(java.lang.String)'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/StatisticsApplication.java': ['@Bean'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java': ['@RequestMapping(method ' + '= ' + 'RequestMethod.GET, ' + 'value ' + '= ' + '"/latest")', + 'com.piggymetrics.statistics.client.ExchangeRatesClient.getRates:com.piggymetrics.statistics.domain.ExchangeRatesContainer(com.piggymetrics.statistics.domain.Currency)'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClientFallback.java': ['@Override', + 'com.piggymetrics.statistics.client.ExchangeRatesClientFallback.getRates:com.piggymetrics.statistics.domain.ExchangeRatesContainer(com.piggymetrics.statistics.domain.Currency)', + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer', + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer.:void()', + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer.setBase:void(com.piggymetrics.statistics.domain.Currency)', + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer.setRates:void(java.util.Map)', + 'java.util.Collections.emptyMap:java.util.Map()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/config/ResourceServerConfig.java': ['@Bean'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': ['@PreAuthorize("#oauth2.hasScope(\'server\') ' + 'or ' + '#accountName.equals(\'demo\')")', + '@PreAuthorize("#oauth2.hasScope(\'server\')")', + '@RequestMapping(value ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.GET)', + '@RequestMapping(value ' + '= ' + '"/{accountName}", ' + 'method ' + '= ' + 'RequestMethod.GET)', + '@RequestMapping(value ' + '= ' + '"/{accountName}", ' + 'method ' + '= ' + 'RequestMethod.PUT)', + 'com.piggymetrics.statistics.service.StatisticsService.findByAccountName:java.util.List(java.lang.String)', + 'com.piggymetrics.statistics.service.StatisticsService.save:com.piggymetrics.statistics.domain.timeseries.DataPoint(java.lang.String,com.piggymetrics.statistics.domain.Account)', + 'java.security.Principal.getName:java.lang.String()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/domain/Account.java': ['com.piggymetrics.statistics.domain.Account.getExpenses:java.util.List()', + 'com.piggymetrics.statistics.domain.Account.getIncomes:java.util.List()', + 'com.piggymetrics.statistics.domain.Account.getSaving:com.piggymetrics.statistics.domain.Saving()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/domain/Currency.java': ['com.piggymetrics.statistics.domain.Currency.getBase:com.piggymetrics.statistics.domain.Currency()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/domain/ExchangeRatesContainer.java': ['@Override', + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer.:void()', + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer.getDate:java.time.LocalDate()', + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer.getRates:java.util.Map()', + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer.setBase:void(com.piggymetrics.statistics.domain.Currency)', + 'com.piggymetrics.statistics.domain.ExchangeRatesContainer.setRates:void(java.util.Map)', + 'java.time.LocalDate.now:java.time.LocalDate()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/domain/Item.java': ['com.piggymetrics.statistics.domain.Item.getAmount:java.math.BigDecimal()', + 'com.piggymetrics.statistics.domain.Item.getCurrency:com.piggymetrics.statistics.domain.Currency()', + 'com.piggymetrics.statistics.domain.Item.getPeriod:com.piggymetrics.statistics.domain.TimePeriod()', + 'com.piggymetrics.statistics.domain.Item.getTitle:java.lang.String()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/domain/Saving.java': ['com.piggymetrics.statistics.domain.Saving.getAmount:java.math.BigDecimal()', + 'com.piggymetrics.statistics.domain.Saving.getCurrency:com.piggymetrics.statistics.domain.Currency()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/domain/TimePeriod.java': ['com.piggymetrics.statistics.domain.TimePeriod.getBaseRatio:java.math.BigDecimal()', + 'java.math.BigDecimal.:void(double)'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/domain/timeseries/DataPoint.java': ['com.piggymetrics.statistics.domain.timeseries.DataPoint.:void()', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setExpenses:void(java.util.Set)', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setId:void(com.piggymetrics.statistics.domain.timeseries.DataPointId)', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setIncomes:void(java.util.Set)', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setRates:void(java.util.Map)', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setStatistics:void(java.util.Map)'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/domain/timeseries/DataPointId.java': ['@Override', + 'com.piggymetrics.statistics.domain.timeseries.DataPointId.:void(java.lang.String,java.util.Date)', + 'com.piggymetrics.statistics.domain.timeseries.DataPointId.getAccount:java.lang.String()', + 'com.piggymetrics.statistics.domain.timeseries.DataPointId.getDate:java.util.Date()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/domain/timeseries/ItemMetric.java': ['.notEquals', + '@Override', + 'com.piggymetrics.statistics.domain.timeseries.ItemMetric.:void(java.lang.String,java.math.BigDecimal)', + 'com.piggymetrics.statistics.domain.timeseries.ItemMetric.getClass:java.lang.Class()', + 'java.lang.Object.getClass:java.lang.Class()', + 'java.lang.String.equalsIgnoreCase:boolean(java.lang.String)', + 'java.lang.String.hashCode:int()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/repository/DataPointRepository.java': ['com.piggymetrics.statistics.repository.DataPointRepository.findByIdAccount:java.util.List(java.lang.String)'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/repository/converter/DataPointIdReaderConverter.java': ['.cast', + '@Override', + 'com.mongodb.DBObject.get:java.lang.Object(java.lang.String)', + 'com.piggymetrics.statistics.domain.timeseries.DataPointId.:void(java.lang.String,java.util.Date)', + 'com.piggymetrics.statistics.repository.converter.DataPointIdReaderConverter.:void()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/repository/converter/DataPointIdWriterConverter.java': ['@Override', + 'com.mongodb.BasicDBObject', + 'com.mongodb.BasicDBObject.:void(int)', + 'com.mongodb.DBObject.put:java.lang.Object(java.lang.String,java.lang.Object)', + 'com.piggymetrics.statistics.domain.timeseries.DataPointId.getAccount:java.lang.String()', + 'com.piggymetrics.statistics.domain.timeseries.DataPointId.getDate:java.util.Date()', + 'com.piggymetrics.statistics.repository.converter.DataPointIdWriterConverter.:void()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/service/ExchangeRatesService.java': ['com.piggymetrics.statistics.service.ExchangeRatesService.convert:java.math.BigDecimal(com.piggymetrics.statistics.domain.Currency,com.piggymetrics.statistics.domain.Currency,java.math.BigDecimal)', + 'com.piggymetrics.statistics.service.ExchangeRatesService.getCurrentRates:java.util.Map()'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/service/ExchangeRatesServiceImpl.java': ['@Override', + 'com.google.common.collect.ImmutableMap.of:com.google.common.collect.ImmutableMap(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)', + 'com.piggymetrics.statistics.domain.Currency.name:java.lang.String()', + 'com.piggymetrics.statistics.service.ExchangeRatesServiceImpl.convert:java.math.BigDecimal(com.piggymetrics.statistics.domain.Currency,com.piggymetrics.statistics.domain.Currency,java.math.BigDecimal)', + 'com.piggymetrics.statistics.service.ExchangeRatesServiceImpl.getCurrentRates:java.util.Map()', + 'java.math.BigDecimal.divide:java.math.BigDecimal(java.math.BigDecimal,int,java.math.RoundingMode)', + 'java.math.BigDecimal.multiply:java.math.BigDecimal(java.math.BigDecimal)', + 'java.time.LocalDate.equals:boolean(java.lang.Object)', + 'java.util.Map.get:java.lang.Object(java.lang.Object)', + 'org.springframework.util.Assert.notNull:void(java.lang.Object)'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/service/StatisticsService.java': ['com.piggymetrics.statistics.service.StatisticsService.findByAccountName:java.util.List(java.lang.String)', + 'com.piggymetrics.statistics.service.StatisticsService.save:com.piggymetrics.statistics.domain.timeseries.DataPoint(java.lang.String,com.piggymetrics.statistics.domain.Account)'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/service/StatisticsServiceImpl.java': ['@Override', + 'com.google.common.collect.ImmutableMap.of:com.google.common.collect.ImmutableMap(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)', + 'com.piggymetrics.statistics.domain.Account.getExpenses:java.util.List()', + 'com.piggymetrics.statistics.domain.Account.getIncomes:java.util.List()', + 'com.piggymetrics.statistics.domain.Account.getSaving:com.piggymetrics.statistics.domain.Saving()', + 'com.piggymetrics.statistics.domain.Item.getAmount:java.math.BigDecimal()', + 'com.piggymetrics.statistics.domain.Item.getCurrency:com.piggymetrics.statistics.domain.Currency()', + 'com.piggymetrics.statistics.domain.Item.getPeriod:com.piggymetrics.statistics.domain.TimePeriod()', + 'com.piggymetrics.statistics.domain.Item.getTitle:java.lang.String()', + 'com.piggymetrics.statistics.domain.Saving.getAmount:java.math.BigDecimal()', + 'com.piggymetrics.statistics.domain.Saving.getCurrency:com.piggymetrics.statistics.domain.Currency()', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.:void()', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setExpenses:void(java.util.Set)', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setId:void(com.piggymetrics.statistics.domain.timeseries.DataPointId)', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setIncomes:void(java.util.Set)', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setRates:void(java.util.Map)', + 'com.piggymetrics.statistics.domain.timeseries.DataPoint.setStatistics:void(java.util.Map)', + 'com.piggymetrics.statistics.domain.timeseries.DataPointId', + 'com.piggymetrics.statistics.domain.timeseries.DataPointId.:void(java.lang.String,java.util.Date)', + 'com.piggymetrics.statistics.domain.timeseries.ItemMetric.:void(java.lang.String,java.math.BigDecimal)', + 'com.piggymetrics.statistics.repository.DataPointRepository.findByIdAccount:java.util.List(java.lang.String)', + 'com.piggymetrics.statistics.repository.DataPointRepository.save:java.lang.Object(java.lang.Object)', + 'com.piggymetrics.statistics.service.ExchangeRatesService.convert:java.math.BigDecimal(com.piggymetrics.statistics.domain.Currency,com.piggymetrics.statistics.domain.Currency,java.math.BigDecimal)', + 'com.piggymetrics.statistics.service.StatisticsServiceImpl.createStatisticMetrics:java.util.Map(java.util.Set,java.util.Set,com.piggymetrics.statistics.domain.Saving)', + 'com.piggymetrics.statistics.service.StatisticsServiceImpl.findByAccountName:java.util.List(java.lang.String)', + 'com.piggymetrics.statistics.service.StatisticsServiceImpl.getClass:java.lang.Class()', + 'com.piggymetrics.statistics.service.StatisticsServiceImpl.save:com.piggymetrics.statistics.domain.timeseries.DataPoint(java.lang.String,com.piggymetrics.statistics.domain.Account)', + 'java.math.BigDecimal.divide:java.math.BigDecimal(java.math.BigDecimal,int,java.math.RoundingMode)', + 'java.time.LocalDate.atStartOfDay:java.time.LocalDateTime()', + 'java.time.LocalDateTime.atZone:java.time.ZonedDateTime(java.time.ZoneId)', + 'java.time.ZoneId.systemDefault:java.time.ZoneId()', + 'java.time.ZonedDateTime.toInstant:java.time.Instant()', + 'java.util.Date.from:java.util.Date(java.time.Instant)', + 'java.util.List.stream:java.util.stream.Stream()', + 'java.util.Set.stream:java.util.stream.Stream()', + 'java.util.stream.Collectors.toSet:java.util.stream.Collector()', + 'java.util.stream.Stream.collect:java.lang.Object(java.util.stream.Collector)', + 'java.util.stream.Stream.map:java.util.stream.Stream(java.util.function.Function)', + 'java.util.stream.Stream.reduce:java.lang.Object(java.lang.Object,java.util.function.BinaryOperator)', + 'org.slf4j.Logger.debug:void(java.lang.String,java.lang.Object)', + 'org.springframework.util.Assert.hasLength:void(java.lang.String)'], + 'statistics-service/src/main/java/com/piggymetrics/statistics/service/security/CustomUserInfoTokenServices.java': ['.cast', + '.indexAccess', + '@Override', + '@SuppressWarnings({ ' + '"unchecked" ' + '})', + 'com.piggymetrics.statistics.service.security.CustomUserInfoTokenServices.:void(java.lang.String,java.lang.String)', + 'com.piggymetrics.statistics.service.security.CustomUserInfoTokenServices.extractAuthentication:org.springframework.security.oauth2.provider.OAuth2Authentication(java.util.Map)', + 'com.piggymetrics.statistics.service.security.CustomUserInfoTokenServices.getClass:java.lang.Class()', + 'com.piggymetrics.statistics.service.security.CustomUserInfoTokenServices.getMap:java.util.Map(java.lang.String,java.lang.String)', + 'com.piggymetrics.statistics.service.security.CustomUserInfoTokenServices.getPrincipal:java.lang.Object(java.util.Map)', + 'com.piggymetrics.statistics.service.security.CustomUserInfoTokenServices.getRequest:org.springframework.security.oauth2.provider.OAuth2Request(java.util.Map)', + 'java.lang.String.equals:boolean(java.lang.Object)', + 'java.util.HashSet.:void(java.util.Collection)', + 'java.util.LinkedHashSet.:void(java.util.Collection)', + 'java.util.Map.containsKey:boolean(java.lang.Object)', + 'java.util.Map.get:java.lang.Object(java.lang.Object)', + 'org.springframework.boot.autoconfigure.security.oauth2.resource.AuthoritiesExtractor.extractAuthorities:java.util.List(java.util.Map)', + 'org.springframework.security.authentication.UsernamePasswordAuthenticationToken', + 'org.springframework.security.authentication.UsernamePasswordAuthenticationToken.:void(java.lang.Object,java.lang.Object,java.util.Collection)', + 'org.springframework.security.authentication.UsernamePasswordAuthenticationToken.setDetails:void(java.lang.Object)', + 'org.springframework.security.oauth2.client.OAuth2ClientContext.getAccessToken:org.springframework.security.oauth2.common.OAuth2AccessToken()', + 'org.springframework.security.oauth2.client.OAuth2ClientContext.setAccessToken:void(org.springframework.security.oauth2.common.OAuth2AccessToken)', + 'org.springframework.security.oauth2.client.OAuth2RestOperations.getForEntity:org.springframework.http.ResponseEntity(java.lang.String,java.lang.Class,java.lang.Object[])', + 'org.springframework.security.oauth2.client.OAuth2RestOperations.getOAuth2ClientContext:org.springframework.security.oauth2.client.OAuth2ClientContext()', + 'org.springframework.security.oauth2.client.OAuth2RestTemplate', + 'org.springframework.security.oauth2.client.OAuth2RestTemplate.:void(org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails)', + 'org.springframework.security.oauth2.client.resource.BaseOAuth2ProtectedResourceDetails', + 'org.springframework.security.oauth2.client.resource.BaseOAuth2ProtectedResourceDetails.:void()', + 'org.springframework.security.oauth2.client.resource.BaseOAuth2ProtectedResourceDetails.setClientId:void(java.lang.String)', + 'org.springframework.security.oauth2.common.DefaultOAuth2AccessToken', + 'org.springframework.security.oauth2.common.DefaultOAuth2AccessToken.:void(java.lang.String)', + 'org.springframework.security.oauth2.common.DefaultOAuth2AccessToken.setTokenType:void(java.lang.String)', + 'org.springframework.security.oauth2.common.OAuth2AccessToken.getValue:java.lang.String()', + 'org.springframework.security.oauth2.common.exceptions.InvalidTokenException.:void(java.lang.String)', + 'org.springframework.security.oauth2.provider.OAuth2Authentication.:void(org.springframework.security.oauth2.provider.OAuth2Request,org.springframework.security.core.Authentication)', + 'org.springframework.security.oauth2.provider.OAuth2Request']} + methods = java_usages_1.methods_to_endpoints(methods) + assert methods == { + 'file_names': {'account-service/src/main/java/com/piggymetrics/account/client/AuthServiceClient.java': {'resolved_methods': {'@RequestMapping(method = RequestMethod.POST, value = "/uaa/users", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)': {'endpoints': ['/uaa/users']}}}, + 'account-service/src/main/java/com/piggymetrics/account/client/StatisticsServiceClient.java': {'resolved_methods': {'@RequestMapping(method = RequestMethod.PUT, value = "/statistics/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)': {'endpoints': ['/statistics/{accountName}']}}}, + 'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': {'resolved_methods': {'@RequestMapping(path = "/", method = RequestMethod.POST)': {'endpoints': ['/']}, + '@RequestMapping(path = "/current", method = RequestMethod.GET)': {'endpoints': ['/current']}, + '@RequestMapping(path = "/current", method = RequestMethod.PUT)': {'endpoints': ['/current']}, + '@RequestMapping(path = "/{name}", method = RequestMethod.GET)': {'endpoints': ['/{name}']}}}, + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java': {'resolved_methods': {'@RequestMapping(value = "/current", method = RequestMethod.GET)': {'endpoints': ['/current']}}}, + 'notification-service/src/main/java/com/piggymetrics/notification/client/AccountServiceClient.java': {'resolved_methods': {'@RequestMapping(method = RequestMethod.GET, value = "/accounts/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)': {'endpoints': ['/accounts/{accountName}']}}}, + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java': {'resolved_methods': {'@RequestMapping(path = "/current", method = RequestMethod.GET)': {'endpoints': ['/current']}, + '@RequestMapping(path = "/current", method = RequestMethod.PUT)': {'endpoints': ['/current']}}}, + 'statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java': {'resolved_methods': {'@RequestMapping(method = RequestMethod.GET, value = "/latest")': {'endpoints': ['/latest']}}}, + 'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': {'resolved_methods': {'@RequestMapping(value = "/current", method = RequestMethod.GET)': {'endpoints': ['/current']}, + '@RequestMapping(value = "/{accountName}", method = RequestMethod.GET)': {'endpoints': ['/{accountName}']}, + '@RequestMapping(value = "/{accountName}", method = RequestMethod.PUT)': {'endpoints': ['/{accountName}']}}}}} + + java_usages_1.target_line_nums = java_usages_1._identify_target_line_nums(methods) + file_endpoint_map = java_usages_1.create_file_to_method_dict(methods) + java_usages_1.file_endpoint_map = sort_result(file_endpoint_map) + assert java_usages_1.file_endpoint_map == {'/': ['account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java'], + '/accounts/{accountName}': ['notification-service/src/main/java/com/piggymetrics/notification/client/AccountServiceClient.java'], + '/current': ['account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java', + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java', + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java', + 'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java'], + '/latest': ['statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java'], + '/statistics/{accountName}': ['account-service/src/main/java/com/piggymetrics/account/client/StatisticsServiceClient.java'], + '/uaa/users': ['account-service/src/main/java/com/piggymetrics/account/client/AuthServiceClient.java'], + '/{accountName}': ['statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java'], + '/{name}': ['account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java']} + + methods = java_usages_1._process_calls(methods) + assert methods == { + 'file_names': {'account-service/src/main/java/com/piggymetrics/account/client/AuthServiceClient.java': {'resolved_methods': {'@RequestMapping(method = RequestMethod.POST, value = "/uaa/users", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 12, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(method ' + '= ' + 'RequestMethod.POST, ' + 'value ' + '= ' + '"/uaa/users", ' + 'consumes ' + '= ' + 'MediaType.APPLICATION_JSON_UTF8_VALUE)', + 'returnType': ''}], + 'endpoints': ['/uaa/users'], + 'line_nos': [12]}}}, + 'account-service/src/main/java/com/piggymetrics/account/client/StatisticsServiceClient.java': {'resolved_methods': {'@RequestMapping(method = RequestMethod.PUT, value = "/statistics/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 13, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(method ' + '= ' + 'RequestMethod.PUT, ' + 'value ' + '= ' + '"/statistics/{accountName}", ' + 'consumes ' + '= ' + 'MediaType.APPLICATION_JSON_UTF8_VALUE)', + 'returnType': ''}], + 'endpoints': ['/statistics/{accountName}'], + 'line_nos': [13]}}}, + 'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': {'resolved_methods': {'@RequestMapping(path = "/", method = RequestMethod.POST)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 35, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(path ' + '= ' + '"/", ' + 'method ' + '= ' + 'RequestMethod.POST)', + 'returnType': ''}], + 'endpoints': ['/'], + 'line_nos': [35]}, + '@RequestMapping(path = "/current", method = RequestMethod.GET)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 25, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(path ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'returnType': ''}], + 'endpoints': ['/current'], + 'line_nos': [25]}, + '@RequestMapping(path = "/current", method = RequestMethod.PUT)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 30, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(path ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.PUT)', + 'returnType': ''}], + 'endpoints': ['/current'], + 'line_nos': [30]}, + '@RequestMapping(path = "/{name}", method = RequestMethod.GET)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 20, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(path ' + '= ' + '"/{name}", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'returnType': ''}], + 'endpoints': ['/{name}'], + 'line_nos': [20]}}}, + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java': {'resolved_methods': {'@RequestMapping(value = "/current", method = RequestMethod.GET)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 22, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(value ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'returnType': ''}], + 'endpoints': ['/current'], + 'line_nos': [22]}}}, + 'notification-service/src/main/java/com/piggymetrics/notification/client/AccountServiceClient.java': {'resolved_methods': {'@RequestMapping(method = RequestMethod.GET, value = "/accounts/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 12, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(method ' + '= ' + 'RequestMethod.GET, ' + 'value ' + '= ' + '"/accounts/{accountName}", ' + 'consumes ' + '= ' + 'MediaType.APPLICATION_JSON_UTF8_VALUE)', + 'returnType': ''}], + 'endpoints': ['/accounts/{accountName}'], + 'line_nos': [12]}}}, + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java': {'resolved_methods': {'@RequestMapping(path = "/current", method = RequestMethod.GET)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 21, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(path ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'returnType': ''}], + 'endpoints': ['/current'], + 'line_nos': [21]}, + '@RequestMapping(path = "/current", method = RequestMethod.PUT)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 26, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(path ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.PUT)', + 'returnType': ''}], + 'endpoints': ['/current'], + 'line_nos': [26]}}}, + 'statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java': {'resolved_methods': {'@RequestMapping(method = RequestMethod.GET, value = "/latest")': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 5, + 'isExternal': False, + 'lineNumber': 13, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(method ' + '= ' + 'RequestMethod.GET, ' + 'value ' + '= ' + '"/latest")', + 'returnType': ''}], + 'endpoints': ['/latest'], + 'line_nos': [13]}}}, + 'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': {'resolved_methods': {'@RequestMapping(value = "/current", method = RequestMethod.GET)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 20, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(value ' + '= ' + '"/current", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'returnType': ''}], + 'endpoints': ['/current'], + 'line_nos': [20]}, + '@RequestMapping(value = "/{accountName}", method = RequestMethod.GET)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 26, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(value ' + '= ' + '"/{accountName}", ' + 'method ' + '= ' + 'RequestMethod.GET)', + 'returnType': ''}], + 'endpoints': ['/{accountName}'], + 'line_nos': [26]}, + '@RequestMapping(value = "/{accountName}", method = RequestMethod.PUT)': {'calls': [{'callName': 'org.springframework.web.bind.annotation.RequestMapping', + 'columnNumber': 2, + 'isExternal': False, + 'lineNumber': 32, + 'paramTypes': [], + 'resolvedMethod': '@RequestMapping(value ' + '= ' + '"/{accountName}", ' + 'method ' + '= ' + 'RequestMethod.PUT)', + 'returnType': ''}], + 'endpoints': ['/{accountName}'], + 'line_nos': [32]}}}}} + + endpoints = java_usages_1.populate_endpoints(methods) + assert endpoints == {'/': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [35]}}}, + '/accounts/{accountName}': {'get': {'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'accountName', + 'required': True}], + 'x-atom-usages': {'call': {'notification-service/src/main/java/com/piggymetrics/notification/client/AccountServiceClient.java': [12]}}}, + '/current': {'get': {'responses': {}}, + 'put': {'responses': {}}, + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [25, + 30], + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java': [22], + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java': [21, + 26], + 'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [20]}, + 'target': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [30], + 'auth-service/src/main/java/com/piggymetrics/auth/controller/UserController.java': [22], + 'notification-service/src/main/java/com/piggymetrics/notification/controller/RecipientController.java': [26]}}}, + '/latest': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/client/ExchangeRatesClient.java': [13]}}}, + '/statistics/{accountName}': {'parameters': [{'in': 'path', + 'name': 'accountName', + 'required': True}], + 'put': {'responses': {}}, + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/client/StatisticsServiceClient.java': [13]}}}, + '/uaa/users': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/client/AuthServiceClient.java': [12]}}}, + '/{accountName}': {'get': {'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'accountName', + 'required': True}], + 'put': {'responses': {}}, + 'x-atom-usages': {'call': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [26, + 32]}, + 'target': {'statistics-service/src/main/java/com/piggymetrics/statistics/controller/StatisticsController.java': [32]}}}, + '/{name}': {'get': {'responses': {}}, + 'parameters': [{'in': 'path', 'name': 'name', 'required': True}], + 'x-atom-usages': {'call': {'account-service/src/main/java/com/piggymetrics/account/controller/AccountController.java': [20]}}}} + + +def test_js(js_usages_1): + methods = js_usages_1._process_methods() + for k, v in methods.items(): + methods[k].sort() + assert methods == { + 'app.ts': ['.assignment', + '.fieldAccess', + 'app.ts::program:require', + "app.ts::program:require('./lib/startup/validateDependencies')", + 'server.start'], + 'data/datacache.ts': ['__ecma.Array.factory'], + 'data/datacreator.ts': ['../lib/utils:utils:determineDisabledEnv', + '../lib/utils:utils:downloadToFile', + '../lib/utils:utils:extractFilename', + '../lib/utils:utils:getErrorMessage', + '../lib/utils:utils:isUrl', + '../lib/utils:utils:randomHexString', + '../lib/utils:utils:thaw', + '../models/address:AddressModel:create', + '../models/basket:BasketModel:create', + '../models/basketitem:BasketItemModel:create', + '../models/card:CardModel:create', + '../models/challenge:ChallengeModel:create', + '../models/complaint:ComplaintModel:create', + '../models/delivery:DeliveryModel:create', + '../models/feedback:FeedbackModel:create', + '../models/memory:MemoryModel:create', + '../models/product:ProductModel:create', + '../models/product:ProductModel:destroy', + '../models/quantity:QuantityModel:create', + '../models/recycle:RecycleModel:create', + '../models/securityAnswer:SecurityAnswerModel:create', + '../models/securityQuestion:SecurityQuestionModel:create', + '../models/user:UserModel:create', + '../models/user:UserModel:destroy', + '../models/wallet:WalletModel:create', + '(callbackfn: (value: ANY, index: __ecma.Number, ' + 'array: ANY[]) => U, thisArg?: ANY) => U[]:map', + '.addition', + '.alloc', + '.assignmentPlus', + '.await', + '.conditional', + '.division', + '.equals', + '.fieldAccess', + '.formatString', + '.indexAccess', + '.iterator', + '.lessThan', + '.logicalAnd', + '.logicalOr', + '.multiplication', + '.not', + '.notEquals', + '.postIncrement', + '.spread', + '.throw', + '.void', + 'AddressModel.create', + 'Address[]:map', + 'BasketItemModel.create', + 'BasketModel.create', + 'CardModel.create', + 'Card[]:map', + 'ChallengeModel.create', + 'ComplaintModel.create', + 'DeliveryModel.create', + 'Entities', + 'FeedbackModel.create', + 'MemoryModel.create', + 'Number', + 'ProductModel.create', + 'ProductModel.destroy', + 'Promise.all', + 'QuantityModel.create', + 'RecycleModel.create', + 'SecurityAnswerModel.create', + 'SecurityQuestionModel.create', + 'UserModel.create', + 'UserModel.destroy', + 'WalletModel.create', + '__ecma.Math:floor', + '__ecma.Math:random', + '__ecma.Math:round', + '__ecma.Number:find', + '__ecma.Number:map', + '__ecma.String:charAt', + '__ecma.String:deluxeToken', + '__ecma.String:get', + '__ecma.String:hash', + '__ecma.String:replace', + '__ecma.String:slice', + '__ecma.String[]:join', + 'addresses.map', + 'adminEmail.replace', + 'author.slice', + 'cards.map', + 'challenges.map', + 'config.get', + 'config.get', + 'config.get', + 'createAddresses', + 'createCards', + 'createRecycle', + 'customDescription.replace', + 'customizeChangeProductChallenge', + 'customizeRetrieveBlueprintChallenge', + 'data/datacreator.ts::program:anonymous', + 'data/datacreator.ts::program:createAddresses', + 'data/datacreator.ts::program:createCards', + 'data/datacreator.ts::program:createFeedback', + 'data/datacreator.ts::program:createProducts:customizeChangeProductChallenge', + 'data/datacreator.ts::program:createProducts:customizeRetrieveBlueprintChallenge', + 'data/datacreator.ts::program:createRandomFakeUsers:getGeneratedRandomFakeUserEmail', + 'data/datacreator.ts::program:createRandomFakeUsers:makeRandomString', + 'data/datacreator.ts::program:createRecycle', + 'data/datacreator.ts::program:createSecurityAnswer', + 'data/datacreator.ts::program:creator', + 'data/datacreator.ts::program:deleteProduct', + 'data/datacreator.ts::program:deleteUser', + 'data/datacreator.ts::program:loadStaticData', + 'data/datacreator.ts::program:readFile', + 'data/datacreator.ts::program:require', + 'deliveries.map', + 'description.replace', + 'entities.encode', + 'hint.replace', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/node_modules/winston/index").Logger:error', + 'logger.error', + 'path.resolve', + 'path:path:resolve', + 'products.find', + 'products.map', + 'questions.map', + 'readFile', + 'require("../models/address").AddressModel', + 'require("../models/basket").BasketModel', + 'require("../models/basketitem").BasketItemModel', + 'require("../models/card").CardModel', + 'require("../models/challenge").ChallengeModel', + 'require("../models/complaint").ComplaintModel', + 'require("../models/delivery").DeliveryModel', + 'require("../models/feedback").FeedbackModel', + 'require("../models/memory").MemoryModel', + 'require("../models/product").ProductModel', + 'require("../models/quantity").QuantityModel', + 'require("../models/recycle").RecycleModel', + 'require("../models/securityAnswer").SecurityAnswerModel', + 'require("../models/securityQuestion").SecurityQuestionModel', + 'require("../models/user").UserModel', + 'require("../models/wallet").WalletModel', + 'reviews.map', + 'security.deluxeToken', + 'security.hash', + 'tags.join', + 'users.map', + 'util.promisify', + 'util:promisify', + 'utils.determineDisabledEnv', + 'utils.downloadToFile', + 'utils.extractFilename', + 'utils.getErrorMessage', + 'utils.isUrl', + 'utils.randomHexString', + 'utils.thaw'], + 'data/datacreator.ts::program:createChallenges:anonymous:Challenge': ['category', + 'description', + 'difficulty', + 'disabledEnv', + 'hint', + 'hintUrl', + 'key', + 'mitigationUrl', + 'name', + 'tags', + 'tutorial'], + 'data/datacreator.ts::program:createChallenges:anonymous:_anon_cdecl': ['category', + 'description', + 'difficulty', + 'disabledEnv', + 'hint', + 'hintUrl', + 'key', + 'mitigationUrl', + 'name', + 'tags', + 'tutorial'], + 'data/datacreator.ts::program:createDeliveryMethods:anonymous:_anon_cdecl': ['deluxePrice', + 'eta', + 'icon', + 'name', + 'price'], + 'data/datacreator.ts::program:createOrders:anonymous:_anon_cdecl': ['bonus', + 'delivered', + 'email', + 'eta', + 'orderId', + 'products', + 'totalPrice'], + 'data/datacreator.ts::program:createProducts:anonymous1:_anon_cdecl': ['useForChristmasSpecialChallenge'], + 'data/datacreator.ts::program:createProducts:anonymous2:_anon_cdecl': ['keywordsForPastebinDataLeakChallenge'], + 'data/datacreator.ts::program:createProducts:anonymous3:_anon_cdecl': ['urlForProductTamperingChallenge'], + 'data/datacreator.ts::program:createProducts:anonymous4:_anon_cdecl': ['fileForRetrieveBlueprintChallenge'], + 'data/datacreator.ts::program:createProducts:anonymous5:_anon_cdecl': ['...product', + 'deletedDate', + 'fileForRetrieveBlueprintChallenge', + 'reviews', + 'urlForProductTamperingChallenge', + 'useForChristmasSpecialChallenge'], + 'data/datacreator.ts::program:createProducts:anonymous5:anonymous2:_anon_cdecl': ['id'], + 'data/datacreator.ts::program:createProducts:anonymous5:anonymous2:anonymous:_anon_cdecl': ['author', + 'text'], + 'data/datacreator.ts::program:createRecycle:_anon_cdecl': ['AddressId', + 'UserId', + 'date', + 'isPickup', + 'quantity'], + 'data/datacreator.ts::program:createSecurityQuestions:anonymous:_anon_cdecl': ['question'], + 'data/datacreator.ts::program:createUsers:anonymous:_anon_cdecl': ['address', + 'card', + 'customDomain', + 'deletedFlag', + 'email', + 'feedback', + 'key', + 'lastLoginIp', + 'password', + 'profileImage', + 'role', + 'securityQuestion', + 'totpSecret', + 'username'], + 'data/mongodb.ts': ['MarsDB.Collection', 'data/mongodb.ts::program:require'], + 'data/static/codefixes/accessLogDisclosureChallenge_1_correct.ts': ['data/static/codefixes/accessLogDisclosureChallenge_1_correct.ts::program:cookieParser', + 'data/static/codefixes/accessLogDisclosureChallenge_1_correct.ts::program:fileServer', + 'data/static/codefixes/accessLogDisclosureChallenge_1_correct.ts::program:keyServer', + 'data/static/codefixes/accessLogDisclosureChallenge_1_correct.ts::program:quarantineServer', + 'data/static/codefixes/accessLogDisclosureChallenge_1_correct.ts::program:serveIndex'], + 'data/static/codefixes/accessLogDisclosureChallenge_2.ts': ['data/static/codefixes/accessLogDisclosureChallenge_2.ts::program:cookieParser', + 'data/static/codefixes/accessLogDisclosureChallenge_2.ts::program:fileServer', + 'data/static/codefixes/accessLogDisclosureChallenge_2.ts::program:keyServer', + 'data/static/codefixes/accessLogDisclosureChallenge_2.ts::program:logFileServer', + 'data/static/codefixes/accessLogDisclosureChallenge_2.ts::program:quarantineServer', + 'data/static/codefixes/accessLogDisclosureChallenge_2.ts::program:serveIndex'], + 'data/static/codefixes/accessLogDisclosureChallenge_3.ts': ['data/static/codefixes/accessLogDisclosureChallenge_3.ts::program:cookieParser', + 'data/static/codefixes/accessLogDisclosureChallenge_3.ts::program:fileServer', + 'data/static/codefixes/accessLogDisclosureChallenge_3.ts::program:keyServer', + 'data/static/codefixes/accessLogDisclosureChallenge_3.ts::program:quarantineServer', + 'data/static/codefixes/accessLogDisclosureChallenge_3.ts::program:serveIndex'], + 'data/static/codefixes/accessLogDisclosureChallenge_4.ts': ['data/static/codefixes/accessLogDisclosureChallenge_4.ts::program:cookieParser', + 'data/static/codefixes/accessLogDisclosureChallenge_4.ts::program:fileServer', + 'data/static/codefixes/accessLogDisclosureChallenge_4.ts::program:keyServer', + 'data/static/codefixes/accessLogDisclosureChallenge_4.ts::program:logFileServer', + 'data/static/codefixes/accessLogDisclosureChallenge_4.ts::program:quarantineServer', + 'data/static/codefixes/accessLogDisclosureChallenge_4.ts::program:serveIndex'], + 'data/static/codefixes/adminSectionChallenge_1_correct.ts': ['data/static/codefixes/adminSectionChallenge_1_correct.ts::program:loadFaucetModule', + 'data/static/codefixes/adminSectionChallenge_1_correct.ts::program:loadWeb3SandboxtModule', + 'data/static/codefixes/adminSectionChallenge_1_correct.ts::program:loadWeb3WalletModule'], + 'data/static/codefixes/adminSectionChallenge_2.ts': ['data/static/codefixes/adminSectionChallenge_2.ts::program:atob', + 'data/static/codefixes/adminSectionChallenge_2.ts::program:loadFaucetModule', + 'data/static/codefixes/adminSectionChallenge_2.ts::program:loadWeb3SandboxtModule', + 'data/static/codefixes/adminSectionChallenge_2.ts::program:loadWeb3WalletModule'], + 'data/static/codefixes/adminSectionChallenge_3.ts': ['.subtraction', + 'Array.prototype.slice.call', + 'StringConstructor:fromCharCode', + '__ecma.Number:toString', + 'b.reverse', + 'b.shift', + 'data/static/codefixes/adminSectionChallenge_3.ts::program:anonymous', + 'data/static/codefixes/adminSectionChallenge_3.ts::program:anonymous1', + 'data/static/codefixes/adminSectionChallenge_3.ts::program:loadFaucetModule', + 'data/static/codefixes/adminSectionChallenge_3.ts::program:loadWeb3SandboxtModule', + 'data/static/codefixes/adminSectionChallenge_3.ts::program:loadWeb3WalletModule', + 't.reverse', + 't.shift'], + 'data/static/codefixes/adminSectionChallenge_4.ts': ['data/static/codefixes/adminSectionChallenge_4.ts::program:loadFaucetModule', + 'data/static/codefixes/adminSectionChallenge_4.ts::program:loadWeb3SandboxtModule', + 'data/static/codefixes/adminSectionChallenge_4.ts::program:loadWeb3WalletModule'], + 'data/static/codefixes/changeProductChallenge_1.ts': ['data/static/codefixes/changeProductChallenge_1.ts::program:ipfilter'], + 'data/static/codefixes/changeProductChallenge_2.ts': ['data/static/codefixes/changeProductChallenge_2.ts::program:ipfilter'], + 'data/static/codefixes/changeProductChallenge_3_correct.ts': ['data/static/codefixes/changeProductChallenge_3_correct.ts::program:ipfilter'], + 'data/static/codefixes/changeProductChallenge_4.ts': ['data/static/codefixes/changeProductChallenge_4.ts::program:ipfilter'], + 'data/static/codefixes/dbSchemaChallenge_1.ts': ['.conditional', + '.lessEqualsThan', + 'JSON.stringify', + 'Request:__', + 'Response:json', + '__ecma.Boolean:substring', + 'criteria.substring', + 'data/static/codefixes/dbSchemaChallenge_1.ts::program:next', + 'req.__', + 'res.json', + 'routes/verify.ts::program:anonymous6:anonymous:Response:json'], + 'data/static/codefixes/dbSchemaChallenge_2_correct.ts': ['.conditional', + 'criteria.substring', + 'data/static/codefixes/dbSchemaChallenge_2_correct.ts::program:next', + 'req.__', + 'res.json'], + 'data/static/codefixes/dbSchemaChallenge_3.ts': ['.conditional', + 'Response:status', + '__ecma.Boolean:match', + 'criteria.match', + 'criteria.substring', + 'data/static/codefixes/dbSchemaChallenge_3.ts::program:next', + 'req.__', + 'res.json', + 'res.status', + 'routes/verify.ts::program:anonymous6:anonymous:Response:status'], + 'data/static/codefixes/directoryListingChallenge_1_correct.ts': ['data/static/codefixes/directoryListingChallenge_1_correct.ts::program:cookieParser', + 'data/static/codefixes/directoryListingChallenge_1_correct.ts::program:keyServer', + 'data/static/codefixes/directoryListingChallenge_1_correct.ts::program:logFileServer', + 'data/static/codefixes/directoryListingChallenge_1_correct.ts::program:serveIndex'], + 'data/static/codefixes/directoryListingChallenge_2.ts': ['data/static/codefixes/directoryListingChallenge_2.ts::program:cookieParser', + 'data/static/codefixes/directoryListingChallenge_2.ts::program:fileServer', + 'data/static/codefixes/directoryListingChallenge_2.ts::program:keyServer', + 'data/static/codefixes/directoryListingChallenge_2.ts::program:logFileServer', + 'data/static/codefixes/directoryListingChallenge_2.ts::program:quarantineServer', + 'data/static/codefixes/directoryListingChallenge_2.ts::program:serveIndex'], + 'data/static/codefixes/directoryListingChallenge_3.ts': ['data/static/codefixes/directoryListingChallenge_3.ts::program:cookieParser', + 'data/static/codefixes/directoryListingChallenge_3.ts::program:keyServer', + 'data/static/codefixes/directoryListingChallenge_3.ts::program:logFileServer', + 'data/static/codefixes/directoryListingChallenge_3.ts::program:serveIndex'], + 'data/static/codefixes/directoryListingChallenge_4.ts': ['data/static/codefixes/directoryListingChallenge_4.ts::program:cookieParser', + 'data/static/codefixes/directoryListingChallenge_4.ts::program:fileServer', + 'data/static/codefixes/directoryListingChallenge_4.ts::program:keyServer', + 'data/static/codefixes/directoryListingChallenge_4.ts::program:logFileServer', + 'data/static/codefixes/directoryListingChallenge_4.ts::program:quarantineServer', + 'data/static/codefixes/directoryListingChallenge_4.ts::program:serveIndex'], + 'data/static/codefixes/exposedMetricsChallenge_1.ts': ['.logicalOr', + 'DateConstructor:now', + 'Metrics.updateLoop', + 'NodeJS.Process:exit', + 'data/static/codefixes/exposedMetricsChallenge_1.ts::program:clearInterval', + 'data/static/codefixes/exposedMetricsChallenge_1.ts::program:datacreator', + 'data/static/codefixes/exposedMetricsChallenge_1.ts::program:datacreatorEnd', + 'data/static/codefixes/exposedMetricsChallenge_1.ts::program:readyCallback', + 'data/static/codefixes/exposedMetricsChallenge_1.ts::program:require', + 'lib/startup/registerWebsocketEvents', + 'metrics.observeMetrics', + 'process.exit', + 'server.listen'], + 'data/static/codefixes/exposedMetricsChallenge_2.ts': ['.logicalOr', + 'data/static/codefixes/exposedMetricsChallenge_2.ts::program:datacreator', + 'data/static/codefixes/exposedMetricsChallenge_2.ts::program:datacreatorEnd', + 'data/static/codefixes/exposedMetricsChallenge_2.ts::program:readyCallback', + 'data/static/codefixes/exposedMetricsChallenge_2.ts::program:require', + 'process.exit', + 'server.listen'], + 'data/static/codefixes/exposedMetricsChallenge_3_correct.ts': ['.logicalOr', + 'Metrics.updateLoop', + 'data/static/codefixes/exposedMetricsChallenge_3_correct.ts::program:clearInterval', + 'data/static/codefixes/exposedMetricsChallenge_3_correct.ts::program:datacreator', + 'data/static/codefixes/exposedMetricsChallenge_3_correct.ts::program:datacreatorEnd', + 'data/static/codefixes/exposedMetricsChallenge_3_correct.ts::program:readyCallback', + 'data/static/codefixes/exposedMetricsChallenge_3_correct.ts::program:require', + 'metrics.observeMetrics', + 'process.exit', + 'server.listen'], + 'data/static/codefixes/forgedReviewChallenge_1.ts': ['res.json', + 'res.status', + 'security.authenticatedUsers.from'], + 'data/static/codefixes/forgedReviewChallenge_1.ts::program:productReviews:anonymous:anonymous:_anon_cdecl': ['modified', + 'original'], + 'data/static/codefixes/forgedReviewChallenge_2_correct.ts': ['res.json', + 'res.status', + 'security.authenticatedUsers.from'], + 'data/static/codefixes/forgedReviewChallenge_2_correct.ts::program:productReviews:anonymous:anonymous:_anon_cdecl': ['modified', + 'original'], + 'data/static/codefixes/forgedReviewChallenge_3.ts': ['res.json', + 'res.status', + 'security.authenticatedUsers.from'], + 'data/static/codefixes/forgedReviewChallenge_3.ts::program:productReviews:anonymous:anonymous:_anon_cdecl': ['modified', + 'original'], + 'data/static/codefixes/localXssChallenge_1.ts': ['__ecma.String:toLowerCase', + '__ecma.String:trim', + 'data/static/codefixes/localXssChallenge_1.ts::program:filterTable', + 'queryParam.toLowerCase', + 'queryParam.trim', + 'this.sanitizer.bypassSecurityTrustResourceUrl'], + 'data/static/codefixes/localXssChallenge_2_correct.ts': ['__ecma.String:trim', + 'data/static/codefixes/localXssChallenge_2_correct.ts::program:filterTable', + 'queryParam.toLowerCase', + 'queryParam.trim'], + 'data/static/codefixes/localXssChallenge_3.ts': ['__ecma.String:trim', + 'data/static/codefixes/localXssChallenge_3.ts::program:filterTable', + 'queryParam.toLowerCase', + 'queryParam.trim', + 'this.sanitizer.bypassSecurityTrustScript'], + 'data/static/codefixes/localXssChallenge_4.ts': ['__ecma.String:trim', + 'data/static/codefixes/localXssChallenge_4.ts::program:filterTable', + 'queryParam.toLowerCase', + 'queryParam.trim', + 'this.sanitizer.bypassSecurityTrustStyle'], + 'data/static/codefixes/noSqlReviewsChallenge_1.ts': ['res.json', + 'res.status', + 'security.authenticatedUsers.from'], + 'data/static/codefixes/noSqlReviewsChallenge_1.ts::program:productReviews:anonymous:anonymous:_anon_cdecl': ['modified', + 'original'], + 'data/static/codefixes/noSqlReviewsChallenge_2.ts': ['res.json', + 'res.status', + 'security.authenticatedUsers.from'], + 'data/static/codefixes/noSqlReviewsChallenge_2.ts::program:productReviews:anonymous:anonymous:_anon_cdecl': ['modified', + 'original'], + 'data/static/codefixes/noSqlReviewsChallenge_3_correct.ts': ['.instanceOf', + 'res.json', + 'res.status', + 'security.authenticatedUsers.from'], + 'data/static/codefixes/noSqlReviewsChallenge_3_correct.ts::program:productReviews:anonymous:anonymous:_anon_cdecl': ['modified', + 'original'], + 'data/static/codefixes/redirectChallenge_1.ts': ['Set', + '__ecma.String:includes', + 'encodeURI', + 'url.includes'], + 'data/static/codefixes/redirectChallenge_2.ts': ['Set', 'url.includes'], + 'data/static/codefixes/redirectChallenge_3.ts': ['Set', + 'data/static/codefixes/redirectChallenge_3.ts::program:escapeHTML', + 'str.replace', + 'url.includes'], + 'data/static/codefixes/redirectChallenge_4_correct.ts': ['Set'], + 'data/static/codefixes/redirectCryptoCurrencyChallenge_1.ts': ['Set', + 'url.includes'], + 'data/static/codefixes/redirectCryptoCurrencyChallenge_2.ts': ['Set', + 'url.includes'], + 'data/static/codefixes/redirectCryptoCurrencyChallenge_3_correct.ts': ['Set', + 'url.includes'], + 'data/static/codefixes/redirectCryptoCurrencyChallenge_4.ts': ['Set', + 'url.includes'], + 'data/static/codefixes/resetPasswordMortyChallenge_1.ts::program:keyGenerator:_anon_cdecl': ['headers', + 'ip'], + 'data/static/codefixes/resetPasswordMortyChallenge_2.ts::program:keyGenerator:_anon_cdecl': ['headers', + 'ip'], + 'data/static/codefixes/resetPasswordMortyChallenge_3.ts::program:keyGenerator:_anon_cdecl': ['headers', + 'ip'], + 'data/static/codefixes/restfulXssChallenge_1_correct.ts': ['TableEntry[]:find', + 'TableEntry[]:push', + '__ecma.Array.factory', + '__ecma.Math:ceil', + '__whatwg.console:log', + '_tmp_3.push', + 'console.log', + 'data/static/codefixes/restfulXssChallenge_1_correct.ts::program:filterTable', + 'data/static/codefixes/restfulXssChallenge_1_correct.ts::program:forkJoin', + 'data/static/codefixes/restfulXssChallenge_1_correct.ts::program:ngAfterViewInit', + 'dataTable.find', + 'dataTable.push', + 'this.productService.search', + 'this.quantityService.getAll'], + 'data/static/codefixes/restfulXssChallenge_2.ts': ['.cast', + '.fieldAccess', + '__ecma.Array.factory', + '_tmp_3.push', + 'console.log', + 'data/static/codefixes/restfulXssChallenge_2.ts::program:encodeProductDescription', + 'data/static/codefixes/restfulXssChallenge_2.ts::program:filterTable', + 'data/static/codefixes/restfulXssChallenge_2.ts::program:forkJoin', + 'data/static/codefixes/restfulXssChallenge_2.ts::program:ngAfterViewInit', + 'dataTable.find', + 'dataTable.push', + 'this.encodeProductDescription', + 'this.productService.search', + 'this.quantityService.getAll'], + 'data/static/codefixes/restfulXssChallenge_3.ts': ['.fieldAccess', + '__ecma.Array.factory', + '_tmp_3.push', + 'console.log', + 'data/static/codefixes/restfulXssChallenge_3.ts::program:filterTable', + 'data/static/codefixes/restfulXssChallenge_3.ts::program:forkJoin', + 'data/static/codefixes/restfulXssChallenge_3.ts::program:ngAfterViewInit', + 'data/static/codefixes/restfulXssChallenge_3.ts::program:trustProductDescription', + 'dataTable.find', + 'dataTable.push', + 'this.productService.search', + 'this.quantityService.getAll', + 'this.trustProductDescription'], + 'data/static/codefixes/restfulXssChallenge_4.ts': ['.fieldAccess', + '__ecma.Array.factory', + '_tmp_3.push', + 'console.log', + 'data/static/codefixes/restfulXssChallenge_4.ts::program:filterTable', + 'data/static/codefixes/restfulXssChallenge_4.ts::program:forkJoin', + 'data/static/codefixes/restfulXssChallenge_4.ts::program:ngAfterViewInit', + 'data/static/codefixes/restfulXssChallenge_4.ts::program:trustProductDescription', + 'dataTable.find', + 'dataTable.push', + 'this.productService.search', + 'this.quantityService.getAll', + 'this.trustProductDescription'], + 'data/static/codefixes/scoreBoardChallenge_1_correct.ts': ['data/static/codefixes/scoreBoardChallenge_1_correct.ts::program:loadFaucetModule', + 'data/static/codefixes/scoreBoardChallenge_1_correct.ts::program:loadWeb3SandboxtModule', + 'data/static/codefixes/scoreBoardChallenge_1_correct.ts::program:loadWeb3WalletModule'], + 'data/static/codefixes/scoreBoardChallenge_2.ts': ['data/static/codefixes/scoreBoardChallenge_2.ts::program:atob', + 'data/static/codefixes/scoreBoardChallenge_2.ts::program:loadFaucetModule', + 'data/static/codefixes/scoreBoardChallenge_2.ts::program:loadWeb3SandboxtModule', + 'data/static/codefixes/scoreBoardChallenge_2.ts::program:loadWeb3WalletModule'], + 'data/static/codefixes/scoreBoardChallenge_3.ts': ['data/static/codefixes/scoreBoardChallenge_3.ts::program:loadFaucetModule', + 'data/static/codefixes/scoreBoardChallenge_3.ts::program:loadWeb3SandboxtModule', + 'data/static/codefixes/scoreBoardChallenge_3.ts::program:loadWeb3WalletModule'], + 'data/static/codefixes/unionSqlInjectionChallenge_1.ts': ['.conditional', + '__ecma.Boolean:replace', + 'criteria.replace', + 'criteria.substring', + 'data/static/codefixes/unionSqlInjectionChallenge_1.ts::program:next', + 'req.__', + 'res.json'], + 'data/static/codefixes/unionSqlInjectionChallenge_2_correct.ts': ['.conditional', + 'criteria.substring', + 'data/static/codefixes/unionSqlInjectionChallenge_2_correct.ts::program:next', + 'req.__', + 'res.json'], + 'data/static/codefixes/unionSqlInjectionChallenge_3.ts': ['.conditional', + '.logicalNot', + '__ecma.Boolean:startsWith', + 'criteria.startsWith', + 'criteria.substring', + 'data/static/codefixes/unionSqlInjectionChallenge_3.ts::program:next', + 'req.__', + 'res.json', + 'res.status'], + 'data/static/codefixes/web3SandboxChallenge_1_correct.ts': ['data/static/codefixes/web3SandboxChallenge_1_correct.ts::program:loadFaucetModule', + 'data/static/codefixes/web3SandboxChallenge_1_correct.ts::program:loadWeb3WalletModule'], + 'data/static/codefixes/web3SandboxChallenge_2.ts': ['data/static/codefixes/web3SandboxChallenge_2.ts::program:loadFaucetModule', + 'data/static/codefixes/web3SandboxChallenge_2.ts::program:loadWeb3SandboxtModule', + 'data/static/codefixes/web3SandboxChallenge_2.ts::program:loadWeb3WalletModule'], + 'data/static/codefixes/web3SandboxChallenge_3.ts': ['data/static/codefixes/web3SandboxChallenge_3.ts::program:loadFaucetModule', + 'data/static/codefixes/web3SandboxChallenge_3.ts::program:loadWeb3SandboxtModule', + 'data/static/codefixes/web3SandboxChallenge_3.ts::program:loadWeb3WalletModule'], + 'data/static/codefixes/xssBonusChallenge_1_correct.ts': ['__ecma.String:trim', + 'data/static/codefixes/xssBonusChallenge_1_correct.ts::program:filterTable', + 'queryParam.toLowerCase', + 'queryParam.trim'], + 'data/static/codefixes/xssBonusChallenge_2.ts': ['__ecma.String:trim', + 'data/static/codefixes/xssBonusChallenge_2.ts::program:filterTable', + 'queryParam.toLowerCase', + 'queryParam.trim', + 'this.sanitizer.bypassSecurityTrustResourceUrl'], + 'data/static/codefixes/xssBonusChallenge_3.ts': ['__ecma.String:trim', + 'data/static/codefixes/xssBonusChallenge_3.ts::program:filterTable', + 'queryParam.toLowerCase', + 'queryParam.trim', + 'this.sanitizer.bypassSecurityTrustSoundCloud'], + 'data/static/codefixes/xssBonusChallenge_4.ts': ['__ecma.String:trim', + 'data/static/codefixes/xssBonusChallenge_4.ts::program:filterTable', + 'queryParam.toLowerCase', + 'queryParam.trim', + 'this.sanitizer.bypassSecurityTrustIframe'], + 'data/types.ts': ['data/types.ts::program:Captcha:require'], + 'data/types.ts::program:Address': ['city', + 'country', + 'fullName', + 'mobileNum', + 'state', + 'streetAddress', + 'zipCode'], + 'data/types.ts::program:Basket': ['Products', 'coupon', 'id'], + 'data/types.ts::program:BasketItem': ['BasketId', 'ProductId', 'quantity'], + 'data/types.ts::program:Captcha': ['answer', 'captcha'], + 'data/types.ts::program:Card': ['cardNum', 'expMonth', 'expYear', 'fullName'], + 'data/types.ts::program:Challenge': ['category', + 'description', + 'difficulty', + 'disabledEnv', + 'hint', + 'hintUrl', + 'key', + 'mitigationUrl', + 'name', + 'solved', + 'tags', + 'tutorial', + 'tutorialOrder'], + 'data/types.ts::program:Delivery': ['deluxePrice', + 'eta', + 'icon', + 'name', + 'price'], + 'data/types.ts::program:Memory': ['caption', + 'geoStalkingMetaSecurityAnswer', + 'geoStalkingMetaSecurityQuestion', + 'geoStalkingVisualSecurityAnswer', + 'geoStalkingVisualSecurityQuestion', + 'image', + 'imagePath', + 'user'], + 'data/types.ts::program:Product': ['deletedAt', + 'deletedDate', + 'deluxePrice', + 'description', + 'exifForBlueprintChallenge', + 'fileForRetrieveBlueprintChallenge', + 'id', + 'image', + 'keywordsForPastebinDataLeakChallenge', + 'limitPerUser', + 'name', + 'price', + 'quantity', + 'reviews', + 'urlForProductTamperingChallenge', + 'useForChristmasSpecialChallenge'], + 'data/types.ts::program:Recycle': ['AddressId', + 'UserId', + 'date', + 'isPickup', + 'quantity'], + 'data/types.ts::program:Review': ['author', 'liked', 'likedBy', 'text'], + 'data/types.ts::program:SecurityAnswer': ['SecurityQuestionId', + 'UserId', + 'answer'], + 'data/types.ts::program:SecurityQuestion': ['question'], + 'data/types.ts::program:User': ['address', + 'card', + 'customDomain', + 'deletedFlag', + 'email', + 'feedback', + 'id', + 'key', + 'lastLoginIp', + 'password', + 'profileImage', + 'role', + 'securityQuestion', + 'totpSecret', + 'username', + 'walletBalance'], + 'frontend/src/app/Models/backup.model.ts::program:Backup': ['banners', + 'continueCode', + 'continueCodeFindIt', + 'continueCodeFixIt', + 'language', + 'scoreBoard', + 'version'], + 'frontend/src/app/Models/challenge.model.ts': ['frontend/src/app/Models/challenge.model.ts::program:Challenge:require'], + 'frontend/src/app/Models/challenge.model.ts::program:Challenge': ['category', + 'codingChallengeStatus', + 'description', + 'difficulty', + 'disabledEnv', + 'hasSnippet', + 'hasTutorial', + 'hint', + 'hintUrl', + 'key', + 'mitigationUrl', + 'name', + 'solved', + 'tags', + 'tutorialOrder'], + 'frontend/src/app/Models/deliveryMethod.model.ts::program:DeliveryMethod': ['eta', + 'icon', + 'id', + 'name', + 'price'], + 'frontend/src/app/Models/product.model.ts::program:Product': ['description', + 'id', + 'image', + 'name', + 'points', + 'price'], + 'frontend/src/app/Models/review.model.ts::program:Review': ['_id', + 'author', + 'message'], + 'frontend/src/app/Models/securityQuestion.model.ts::program:SecurityQuestion': ['id', + 'question'], + 'frontend/src/app/Services/address.service.ts': ['frontend/src/app/Services/address.service.ts::program:require', + 'rxjs/operators:catchError', + 'rxjs/operators:map', + 'this.http.post', + 'this.http.put'], + 'frontend/src/app/Services/address.service.ts::program:AddressService': ['del', + 'get', + 'getById', + 'host', + 'hostServer', + 'put', + 'save'], + 'frontend/src/app/Services/administration.service.ts': ['frontend/src/app/Services/administration.service.ts::program:require'], + 'frontend/src/app/Services/administration.service.ts::program:AdministrationService': ['getApplicationVersion', + 'host', + 'hostServer'], + 'frontend/src/app/Services/basket.service.ts': ['Storage:getItem', + 'Subject', + 'console.log', + 'frontend/src/app/Services/basket.service.ts::program:BasketService:find', + 'frontend/src/app/Services/basket.service.ts::program:OrderDetail:require', + 'parseInt', + 'this.http.post', + 'this.http.put'], + 'frontend/src/app/Services/basket.service.ts::program:BasketService': ['applyCoupon', + 'checkout', + 'del', + 'find', + 'get', + 'getItemTotal', + 'host', + 'hostServer', + 'itemTotal', + 'put', + 'save', + 'updateNumberOfCartItems'], + 'frontend/src/app/Services/basket.service.ts::program:OrderDetail': ['addressId', + 'deliveryMethodId', + 'paymentId'], + 'frontend/src/app/Services/captcha.service.ts': ['frontend/src/app/Services/captcha.service.ts::program:require'], + 'frontend/src/app/Services/captcha.service.ts::program:CaptchaService': ['getCaptcha', + 'host', + 'hostServer'], + 'frontend/src/app/Services/challenge.service.ts': ['frontend/src/app/Services/challenge.service.ts::program:require'], + 'frontend/src/app/Services/challenge.service.ts::program:ChallengeService': ['continueCode', + 'continueCodeFindIt', + 'continueCodeFixIt', + 'find', + 'host', + 'hostServer', + 'repeatNotification', + 'restoreProgress', + 'restoreProgressFindIt', + 'restoreProgressFixIt'], + 'frontend/src/app/Services/chatbot.service.ts': ['frontend/src/app/Services/chatbot.service.ts::program:require'], + 'frontend/src/app/Services/chatbot.service.ts::program:ChatbotService': ['getChatbotStatus', + 'getResponse', + 'host', + 'hostServer'], + 'frontend/src/app/Services/code-fixes.service.ts': ['frontend/src/app/Services/code-fixes.service.ts::program:Solved:require'], + 'frontend/src/app/Services/code-fixes.service.ts::program:CodeFixesService': ['check', + 'get', + 'host', + 'hostServer'], + 'frontend/src/app/Services/code-fixes.service.ts::program:Fixes': ['fixes'], + 'frontend/src/app/Services/code-fixes.service.ts::program:Solved': ['challenges'], + 'frontend/src/app/Services/code-fixes.service.ts::program:result': ['verdict'], + 'frontend/src/app/Services/code-snippet.service.ts': ['frontend/src/app/Services/code-snippet.service.ts::program:Solved:require'], + 'frontend/src/app/Services/code-snippet.service.ts::program:CodeSnippet': ['snippet', + 'vulnLines'], + 'frontend/src/app/Services/code-snippet.service.ts::program:CodeSnippetService': ['challenges', + 'get', + 'host', + 'hostServer'], + 'frontend/src/app/Services/code-snippet.service.ts::program:Solved': ['challenges'], + 'frontend/src/app/Services/complaint.service.ts': ['frontend/src/app/Services/complaint.service.ts::program:require', + 'this.http.post'], + 'frontend/src/app/Services/complaint.service.ts::program:ComplaintService': ['host', + 'hostServer', + 'save'], + 'frontend/src/app/Services/configuration.service.ts': ['frontend/src/app/Services/configuration.service.ts::program:Config:require', + 'frontend/src/app/Services/configuration.service.ts::program:ConfigurationService:getApplicationConfiguration'], + 'frontend/src/app/Services/configuration.service.ts::program:Config': ['application', + 'challenges', + 'ctf', + 'hackingInstructor', + 'memories', + 'products', + 'server'], + 'frontend/src/app/Services/configuration.service.ts::program:ConfigResponse': ['config'], + 'frontend/src/app/Services/configuration.service.ts::program:ConfigurationService': ['configObservable', + 'getApplicationConfiguration', + 'host', + 'hostServer'], + 'frontend/src/app/Services/country-mapping.service.ts': ['frontend/src/app/Services/country-mapping.service.ts::program:require'], + 'frontend/src/app/Services/country-mapping.service.ts::program:CountryMappingService': ['getCountryMapping', + 'hostServer'], + 'frontend/src/app/Services/data-subject.service.ts': ['frontend/src/app/Services/data-subject.service.ts::program:require', + 'this.http.post'], + 'frontend/src/app/Services/data-subject.service.ts::program:DataSubjectService': ['dataExport', + 'erase', + 'host', + 'hostServer'], + 'frontend/src/app/Services/delivery.service.ts': ['frontend/src/app/Services/delivery.service.ts::program:DeliverySingleMethodResponse:require'], + 'frontend/src/app/Services/delivery.service.ts::program:DeliveryMultipleMethodResponse': ['data', + 'status'], + 'frontend/src/app/Services/delivery.service.ts::program:DeliveryService': ['get', + 'getById', + 'host', + 'hostServer'], + 'frontend/src/app/Services/delivery.service.ts::program:DeliverySingleMethodResponse': ['data', + 'status'], + 'frontend/src/app/Services/feature-flag.service.ts': ['frontend/src/app/Services/feature-flag.service.ts::program:require', + 'localStorage.setItem', + 'this.defaultScoreBoard$.next'], + 'frontend/src/app/Services/feature-flag.service.ts::program:FeatureFlagService': ['defaultScoreBoard$', + 'setDefaultScoreBoard'], + 'frontend/src/app/Services/feedback.service.ts': ['frontend/src/app/Services/feedback.service.ts::program:require', + 'this.http.post'], + 'frontend/src/app/Services/feedback.service.ts::program:FeedbackService': ['del', + 'find', + 'host', + 'hostServer', + 'save'], + 'frontend/src/app/Services/form-submit.service.ts': ['.cast', + 'HTMLFormElement:addEventListener', + 'KeyboardEvent:preventDefault', + 'event.preventDefault', + 'form.addEventListener', + 'frontend/src/app/Services/form-submit.service.ts::program:onSubmit', + 'frontend/src/app/Services/form-submit.service.ts::program:require', + 'this._document.getElementById'], + 'frontend/src/app/Services/form-submit.service.ts::program:FormSubmitService': ['attachEnterKeyHandler'], + 'frontend/src/app/Services/image-captcha.service.ts': ['frontend/src/app/Services/image-captcha.service.ts::program:require'], + 'frontend/src/app/Services/image-captcha.service.ts::program:ImageCaptchaService': ['getCaptcha', + 'hostServer'], + 'frontend/src/app/Services/keys.service.ts': ['.addition', + 'frontend/src/app/Services/keys.service.ts::program:require', + 'this.http.post'], + 'frontend/src/app/Services/keys.service.ts::program:KeysService': ['checkNftMinted', + 'host', + 'hostServer', + 'nftMintListen', + 'nftUnlocked', + 'submitKey', + 'verifyNFTWallet', + 'walletAddressSend'], + 'frontend/src/app/Services/languages.service.ts': ['frontend/src/app/Services/languages.service.ts::program:require'], + 'frontend/src/app/Services/languages.service.ts::program:LanguagesService': ['getLanguages', + 'hostServer'], + 'frontend/src/app/Services/local-backup.service.ts': ['.conditional', + 'Blob', + 'Date', + 'DateConstructor:getFullYear', + 'DateConstructor:setFullYear', + 'File:text', + 'JSON.parse', + 'JSON.stringify', + 'Location:reload', + 'Storage:removeItem', + 'String', + '_tmp_14.push', + '_tmp_42.push', + 'backupFile.text', + 'console.log', + 'encodeURIComponent', + 'expires.getFullYear', + 'expires.setFullYear', + 'file-saver:saveAs', + 'frontend/src/app/Services/local-backup.service.ts::program:LocalBackupService:restoreCookie', + 'frontend/src/app/Services/local-backup.service.ts::program:LocalBackupService:restoreLocalStorage', + 'frontend/src/app/Services/local-backup.service.ts::program:require', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/frontend/node_modules/@angular/material/snack-bar/index").MatSnackBarRef:onAction', + 'localStorage.removeItem', + 'localStorage.setItem', + 'rxjs:forkJoin', + 'rxjs:from', + 'rxjs:of', + 'saveAs', + 'snackBarRef.onAction', + 'this.challengeService.continueCode', + 'this.challengeService.continueCodeFindIt', + 'this.challengeService.continueCodeFixIt', + 'this.cookieService.put', + 'this.cookieService.remove', + 'this.snackBar.open'], + 'frontend/src/app/Services/local-backup.service.ts::program:LocalBackupService': ['VERSION', + 'restore', + 'restoreCookie', + 'restoreLocalStorage', + 'save'], + 'frontend/src/app/Services/order-history.service.ts': ['frontend/src/app/Services/order-history.service.ts::program:require', + 'this.http.put'], + 'frontend/src/app/Services/order-history.service.ts::program:OrderHistoryService': ['get', + 'getAll', + 'host', + 'hostServer', + 'toggleDeliveryStatus'], + 'frontend/src/app/Services/payment.service.ts': ['frontend/src/app/Services/payment.service.ts::program:require', + 'this.http.post'], + 'frontend/src/app/Services/payment.service.ts::program:PaymentService': ['del', + 'get', + 'getById', + 'host', + 'hostServer', + 'save'], + 'frontend/src/app/Services/photo-wall.service.ts': ['FormData', + 'FormData:append', + 'frontend/src/app/Services/photo-wall.service.ts::program:require', + 'postData.append', + 'this.http.post'], + 'frontend/src/app/Services/photo-wall.service.ts::program:PhotoWallService': ['addMemory', + 'get', + 'host', + 'hostServer'], + 'frontend/src/app/Services/product-review.service.ts': ['frontend/src/app/Services/product-review.service.ts::program:require', + 'this.http.patch', + 'this.http.put'], + 'frontend/src/app/Services/product-review.service.ts::program:ProductReviewService': ['create', + 'get', + 'host', + 'hostServer', + 'like', + 'patch'], + 'frontend/src/app/Services/product-review.service.ts::program:ProductReviewService:create:_anon_cdecl': ['author', + 'message'], + 'frontend/src/app/Services/product-review.service.ts::program:ProductReviewService:patch:_anon_cdecl': ['id', + 'message'], + 'frontend/src/app/Services/product.service.ts': ['frontend/src/app/Services/product.service.ts::program:require', + 'this.http.put'], + 'frontend/src/app/Services/product.service.ts::program:ProductService': ['find', + 'get', + 'host', + 'hostServer', + 'put', + 'search'], + 'frontend/src/app/Services/quantity.service.ts': ['frontend/src/app/Services/quantity.service.ts::program:require', + 'this.http.put'], + 'frontend/src/app/Services/quantity.service.ts::program:QuantityService': ['getAll', + 'host', + 'hostServer', + 'put'], + 'frontend/src/app/Services/recycle.service.ts': ['frontend/src/app/Services/recycle.service.ts::program:require', + 'this.http.post'], + 'frontend/src/app/Services/recycle.service.ts::program:RecycleService': ['find', + 'host', + 'hostServer', + 'save'], + 'frontend/src/app/Services/request.interceptor.ts': ['@angular/common/http:HttpHandler:handle', + 'HttpRequest:clone', + 'frontend/src/app/Services/request.interceptor.ts::program:require', + 'next.handle', + 'req.clone'], + 'frontend/src/app/Services/request.interceptor.ts::program:RequestInterceptor': ['intercept'], + 'frontend/src/app/Services/security-answer.service.ts': ['frontend/src/app/Services/security-answer.service.ts::program:require', + 'this.http.post'], + 'frontend/src/app/Services/security-answer.service.ts::program:SecurityAnswerService': ['host', + 'hostServer', + 'save'], + 'frontend/src/app/Services/security-question.service.ts': ['frontend/src/app/Services/security-question.service.ts::program:require'], + 'frontend/src/app/Services/security-question.service.ts::program:SecurityQuestionService': ['find', + 'findBy', + 'host', + 'hostServer'], + 'frontend/src/app/Services/snack-bar-helper.service.ts': ['frontend/src/app/Services/snack-bar-helper.service.ts::program:require', + 'this.snackBar.open', + 'this.translateService.get'], + 'frontend/src/app/Services/snack-bar-helper.service.ts::program:SnackBarHelperService': ['open'], + 'frontend/src/app/Services/socket-io.service.ts': ['frontend/src/app/Services/socket-io.service.ts::program:require', + 'socket.io-client:io'], + 'frontend/src/app/Services/socket-io.service.ts::program:SocketIoService': ['_socket', + 'socket'], + 'frontend/src/app/Services/track-order.service.ts': ['encodeURIComponent', + 'frontend/src/app/Services/track-order.service.ts::program:require'], + 'frontend/src/app/Services/track-order.service.ts::program:TrackOrderService': ['find', + 'host', + 'hostServer'], + 'frontend/src/app/Services/two-factor-auth-service.ts': ['frontend/src/app/Services/two-factor-auth-service.ts::program:TwoFactorAuthStatusPayload:require'], + 'frontend/src/app/Services/two-factor-auth-service.ts::program:AuthenticationPayload': ['bid', + 'token', + 'umail'], + 'frontend/src/app/Services/two-factor-auth-service.ts::program:TwoFactorAuthService': ['disable', + 'setup', + 'status', + 'verify'], + 'frontend/src/app/Services/two-factor-auth-service.ts::program:TwoFactorAuthStatusPayload': ['email', + 'secret', + 'setup', + 'setupToken'], + 'frontend/src/app/Services/two-factor-auth-service.ts::program:TwoFactorVerifyResponse': ['authentication'], + 'frontend/src/app/Services/user.service.ts': ['Subject', + 'frontend/src/app/Services/user.service.ts::program:Passwords:require', + 'this.http.post'], + 'frontend/src/app/Services/user.service.ts::program:Passwords': ['current', + 'new', + 'repeat'], + 'frontend/src/app/Services/user.service.ts::program:UserService': ['changePassword', + 'deluxeStatus', + 'find', + 'get', + 'getLoggedInState', + 'host', + 'hostServer', + 'isLoggedIn', + 'login', + 'oauthLogin', + 'resetPassword', + 'save', + 'saveLastLoginIp', + 'upgradeToDeluxe', + 'whoAmI'], + 'frontend/src/app/Services/vuln-lines.service.ts': ['frontend/src/app/Services/vuln-lines.service.ts::program:result:require'], + 'frontend/src/app/Services/vuln-lines.service.ts::program:VulnLinesService': ['check', + 'host', + 'hostServer'], + 'frontend/src/app/Services/vuln-lines.service.ts::program:result': ['hint', + 'verdict'], + 'frontend/src/app/Services/wallet.service.ts': ['frontend/src/app/Services/wallet.service.ts::program:require', + 'this.http.put'], + 'frontend/src/app/Services/wallet.service.ts::program:WalletService': ['get', + 'host', + 'hostServer', + 'put'], + 'frontend/src/app/Services/window-ref.service.ts': ['frontend/src/app/Services/window-ref.service.ts::program:getWindow', + 'frontend/src/app/Services/window-ref.service.ts::program:require'], + 'frontend/src/app/Services/window-ref.service.ts::program:WindowRefService': ['nativeWindow'], + 'frontend/src/app/about/about.component.ts': ['.modulo', + 'console.log', + 'frontend/src/app/about/about.component.ts::program:AboutComponent:populateSlideshowFromFeedbacks', + 'frontend/src/app/about/about.component.ts::program:require', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/frontend/node_modules/@fortawesome/fontawesome-svg-core/index").Library:add', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-brands-svg-icons").faFacebook', + 'require("@fortawesome/free-brands-svg-icons").faReddit', + 'require("@fortawesome/free-brands-svg-icons").faSlack', + 'require("@fortawesome/free-brands-svg-icons").faTwitter', + 'require("@fortawesome/free-regular-svg-icons").faNewspaper', + 'require("@fortawesome/free-regular-svg-icons").faStar', + 'require("@fortawesome/free-solid-svg-icons").faPalette', + 'require("@fortawesome/free-solid-svg-icons").faStar'], + 'frontend/src/app/about/about.component.ts::program:AboutComponent': ['facebookUrl', + 'images', + 'nftUrl', + 'ngOnInit', + 'populateSlideshowFromFeedbacks', + 'pressKitUrl', + 'redditUrl', + 'slackUrl', + 'slideshowDataSource', + 'stars', + 'twitterUrl'], + 'frontend/src/app/accounting/accounting.component.ts': ['console.log', + 'frontend/src/app/accounting/accounting.component.ts::program:AccountingComponent:loadOrders', + 'frontend/src/app/accounting/accounting.component.ts::program:AccountingComponent:loadProducts', + 'frontend/src/app/accounting/accounting.component.ts::program:AccountingComponent:loadQuantity', + 'frontend/src/app/accounting/accounting.component.ts::program:Order:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faCheck', + 'stock.forEach', + 'this.orderHistoryService.toggleDeliveryStatus', + 'this.productService.put', + 'this.quantityService.put', + 'this.snackBarHelperService.open'], + 'frontend/src/app/accounting/accounting.component.ts::program:AccountingComponent': ['changeDeliveryStatus', + 'dataSource', + 'displayedColumns', + 'loadOrders', + 'loadProducts', + 'loadQuantity', + 'modifyPrice', + 'modifyQuantity', + 'ngAfterViewInit', + 'ngOnDestroy', + 'orderData', + 'orderHistoryColumns', + 'orderSource', + 'paginator', + 'paginatorOrderHistory', + 'productSubscription', + 'quantityMap', + 'quantitySubscription', + 'tableData'], + 'frontend/src/app/accounting/accounting.component.ts::program:Order': ['delivered', + 'id', + 'orderId', + 'totalPrice'], + 'frontend/src/app/address-create/address-create.component.ts': ['@angular/forms:Validators:max', + '@angular/forms:Validators:maxLength', + '@angular/forms:Validators:min', + '@angular/router:ParamMap:get', + '@angular/router:ParamMap:has', + 'UntypedFormControl', + 'Validators.max', + 'Validators.maxLength', + 'Validators.min', + 'frontend/src/app/address-create/address-create.component.ts::program:AddressCreateComponent:initializeForm', + 'frontend/src/app/address-create/address-create.component.ts::program:AddressCreateComponent:ngOnInit', + 'frontend/src/app/address-create/address-create.component.ts::program:AddressCreateComponent:resetForm', + 'frontend/src/app/address-create/address-create.component.ts::program:AddressCreateComponent:routeToPreviousUrl', + 'frontend/src/app/address-create/address-create.component.ts::program:AddressCreateComponent:save', + 'frontend/src/app/address-create/address-create.component.ts::program:require', + 'paramMap.get', + 'paramMap.has', + 'require("@angular/forms").Validators', + 'this.initializeForm', + 'this.snackBarHelperService.open'], + 'frontend/src/app/address-create/address-create.component.ts::program:AddressCreateComponent': ['address', + 'addressControl', + 'addressId', + 'cityControl', + 'countryControl', + 'initializeForm', + 'mode', + 'nameControl', + 'ngOnInit', + 'numberControl', + 'pinControl', + 'resetForm', + 'routeToPreviousUrl', + 'save', + 'stateControl'], + 'frontend/src/app/address-select/address-select.component.ts': ['frontend/src/app/address-select/address-select.component.ts::program:require'], + 'frontend/src/app/address-select/address-select.component.ts::program:AddressSelectComponent': ['addressId', + 'getMessage', + 'showNextButton'], + 'frontend/src/app/address/address.component.ts': ['@Output', + 'SelectionModel', + 'Storage:setItem', + 'console.log', + 'frontend/src/app/address/address.component.ts::program:AddressComponent:load', + 'frontend/src/app/address/address.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-regular-svg-icons/").faEdit', + 'require("@fortawesome/free-regular-svg-icons/").faTrashAlt', + 'this.addressService.del', + 'this.emitSelection.emit', + 'this.snackBarHelperService.open'], + 'frontend/src/app/address/address.component.ts::program:AddressComponent': ['addNewAddressDiv', + 'addressExist', + 'addressId', + 'allowEdit', + 'chooseAddress', + 'confirmation', + 'dataSource', + 'deleteAddress', + 'displayedColumns', + 'emitSelection', + 'emitSelectionToParent', + 'error', + 'load', + 'ngOnInit', + 'selection', + 'showNextButton', + 'storedAddresses'], + 'frontend/src/app/administration/administration.component.ts': ['Array', + 'frontend/src/app/administration/administration.component.ts::program:AdministrationComponent:findAllFeedbacks', + 'frontend/src/app/administration/administration.component.ts::program:AdministrationComponent:findAllUsers', + 'frontend/src/app/administration/administration.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faArchive', + 'require("@fortawesome/free-solid-svg-icons").faEye', + 'require("@fortawesome/free-solid-svg-icons").faHome', + 'require("@fortawesome/free-solid-svg-icons").faTrashAlt', + 'require("@fortawesome/free-solid-svg-icons").faUser', + 'this.feedbackService.del'], + 'frontend/src/app/administration/administration.component.ts::program:AdministrationComponent': ['deleteFeedback', + 'error', + 'feedbackColumns', + 'feedbackDataSource', + 'findAllFeedbacks', + 'findAllUsers', + 'ngOnInit', + 'paginatorFeedb', + 'paginatorUsers', + 'resultsLengthFeedback', + 'resultsLengthUser', + 'showFeedbackDetails', + 'showUserDetail', + 'times', + 'userColumns', + 'userDataSource', + 'userDataSourceHidden'], + 'frontend/src/app/app.component.ts': ['dom.watch', + 'frontend/src/app/app.component.ts::program:require', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/frontend/node_modules/@fortawesome/fontawesome-svg-core/index").DOM:watch', + 'require("@fortawesome/fontawesome-svg-core").dom'], + 'frontend/src/app/app.guard.ts': ['Storage:getItem', + 'frontend/src/app/app.guard.ts::program:LoginGuard:forbidRoute', + 'frontend/src/app/app.guard.ts::program:require', + 'jwt-decode:jwtDecode', + 'jwtDecode'], + 'frontend/src/app/app.guard.ts::program:AccountingGuard': ['canActivate'], + 'frontend/src/app/app.guard.ts::program:AdminGuard': ['canActivate'], + 'frontend/src/app/app.guard.ts::program:DeluxeGuard': ['isDeluxe'], + 'frontend/src/app/app.guard.ts::program:LoginGuard': ['canActivate', + 'forbidRoute', + 'tokenDecode'], + 'frontend/src/app/app.module.ts': ['@angular-material-extensions/password-strength:MatPasswordStrengthModule:forRoot', + '@angular/cdk/overlay:OverlayContainer:getContainerElement', + '@ngx-translate/core:TranslateModule:forRoot', + 'CookieModule.forRoot', + 'MatPasswordStrengthModule.forRoot', + 'TranslateModule.forRoot', + '_tmp_13.push', + '_tmp_2.push', + '_tmp_3.push', + '_tmp_6.push', + '_tmp_7.push', + '_tmp_8.push', + 'configurationService.getApplicationConfiguration', + 'frontend/src/app/app.module.ts::program:import', + 'frontend/src/app/app.module.ts::program:require', + 'ngx-cookie:CookieModule:forRoot', + 'overlayContainer.getContainerElement', + 'require("./Services/address.service").AddressService', + 'require("./Services/administration.service").AdministrationService', + 'require("./Services/basket.service").BasketService', + 'require("./Services/captcha.service").CaptchaService', + 'require("./Services/challenge.service").ChallengeService', + 'require("./Services/chatbot.service").ChatbotService', + 'require("./Services/complaint.service").ComplaintService', + 'require("./Services/configuration.service").ConfigurationService', + 'require("./Services/data-subject.service").DataSubjectService', + 'require("./Services/delivery.service").DeliveryService', + 'require("./Services/feature-flag.service").FeatureFlagService', + 'require("./Services/feedback.service").FeedbackService', + 'require("./Services/image-captcha.service").ImageCaptchaService', + 'require("./Services/keys.service").KeysService', + 'require("./Services/order-history.service").OrderHistoryService', + 'require("./Services/payment.service").PaymentService', + 'require("./Services/photo-wall.service").PhotoWallService', + 'require("./Services/product-review.service").ProductReviewService', + 'require("./Services/product.service").ProductService', + 'require("./Services/quantity.service").QuantityService', + 'require("./Services/recycle.service").RecycleService', + 'require("./Services/security-answer.service").SecurityAnswerService', + 'require("./Services/security-question.service").SecurityQuestionService', + 'require("./Services/track-order.service").TrackOrderService', + 'require("./Services/user.service").UserService', + 'require("./Services/wallet.service").WalletService', + 'require("./Services/window-ref.service").WindowRefService', + 'require("./about/about.component").AboutComponent', + 'require("./accounting/accounting.component").AccountingComponent', + 'require("./address-create/address-create.component").AddressCreateComponent', + 'require("./address-select/address-select.component").AddressSelectComponent', + 'require("./address/address.component").AddressComponent', + 'require("./administration/administration.component").AdministrationComponent', + 'require("./app.component").AppComponent', + 'require("./app.guard").AccountingGuard', + 'require("./app.guard").AdminGuard', + 'require("./app.guard").DeluxeGuard', + 'require("./app.guard").LoginGuard', + 'require("./app.routing").Routing', + 'require("./basket/basket.component").BasketComponent', + 'require("./challenge-solved-notification/challenge-solved-notification.component").ChallengeSolvedNotificationComponent', + 'require("./challenge-status-badge/challenge-status-badge.component").ChallengeStatusBadgeComponent', + 'require("./change-password/change-password.component").ChangePasswordComponent', + 'require("./chatbot/chatbot.component").ChatbotComponent', + 'require("./code-area/code-area.component").CodeAreaComponent', + 'require("./code-fixes/code-fixes.component").CodeFixesComponent', + 'require("./code-snippet/code-snippet.component").CodeSnippetComponent', + 'require("./complaint/complaint.component").ComplaintComponent', + 'require("./contact/contact.component").ContactComponent', + 'require("./data-export/data-export.component").DataExportComponent', + 'require("./delivery-method/delivery-method.component").DeliveryMethodComponent', + 'require("./deluxe-user/deluxe-user.component").DeluxeUserComponent', + 'require("./error-page/error-page.component").ErrorPageComponent', + 'require("./feedback-details/feedback-details.component").FeedbackDetailsComponent', + 'require("./forgot-password/forgot-password.component").ForgotPasswordComponent', + 'require("./last-login-ip/last-login-ip.component").LastLoginIpComponent', + 'require("./login/login.component").LoginComponent', + 'require("./navbar/navbar.component").NavbarComponent', + 'require("./nft-unlock/nft-unlock.component").NFTUnlockComponent', + 'require("./oauth/oauth.component").OAuthComponent', + 'require("./order-completion/order-completion.component").OrderCompletionComponent', + 'require("./order-history/order-history.component").OrderHistoryComponent', + 'require("./order-summary/order-summary.component").OrderSummaryComponent', + 'require("./payment-method/payment-method.component").PaymentMethodComponent', + 'require("./payment/payment.component").PaymentComponent', + 'require("./photo-wall/photo-wall.component").PhotoWallComponent', + 'require("./privacy-policy/privacy-policy.component").PrivacyPolicyComponent', + 'require("./privacy-security/privacy-security.component").PrivacySecurityComponent', + 'require("./product-details/product-details.component").ProductDetailsComponent', + 'require("./product-review-edit/product-review-edit.component").ProductReviewEditComponent', + 'require("./purchase-basket/purchase-basket.component").PurchaseBasketComponent', + 'require("./qr-code/qr-code.component").QrCodeComponent', + 'require("./recycle/recycle.component").RecycleComponent', + 'require("./register/register.component").RegisterComponent', + 'require("./saved-address/saved-address.component").SavedAddressComponent', + 'require("./saved-payment-methods/saved-payment-methods.component").SavedPaymentMethodsComponent', + 'require("./score-board-legacy/score-board-legacy.component").ScoreBoardLegacyComponent', + 'require("./score-board/score-board.module").ScoreBoardModule', + 'require("./search-result/search-result.component").SearchResultComponent', + 'require("./server-started-notification/server-started-notification.component").ServerStartedNotificationComponent', + 'require("./sidenav/sidenav.component").SidenavComponent', + 'require("./token-sale/token-sale.component").TokenSaleComponent', + 'require("./track-result/track-result.component").TrackResultComponent', + 'require("./two-factor-auth-enter/two-factor-auth-enter.component").TwoFactorAuthEnterComponent', + 'require("./two-factor-auth/two-factor-auth.component").TwoFactorAuthComponent', + 'require("./user-details/user-details.component").UserDetailsComponent', + 'require("./wallet/wallet.component").WalletComponent', + 'require("./welcome-banner/welcome-banner.component").WelcomeBannerComponent', + 'require("./welcome/welcome.component").WelcomeComponent', + 'require("@angular-material-extensions/password-strength").MatPasswordStrengthModule', + 'require("@angular/cdk/layout").LayoutModule', + 'require("@angular/common/http").HttpClient', + 'require("@angular/common/http").HttpClientModule', + 'require("@angular/core").CUSTOM_ELEMENTS_SCHEMA', + 'require("@angular/flex-layout").FlexLayoutModule', + 'require("@angular/forms").FormsModule', + 'require("@angular/forms").ReactiveFormsModule', + 'require("@angular/material/badge").MatBadgeModule', + 'require("@angular/material/button").MatButtonModule', + 'require("@angular/material/button-toggle").MatButtonToggleModule', + 'require("@angular/material/card").MatCardModule', + 'require("@angular/material/checkbox").MatCheckboxModule', + 'require("@angular/material/chips").MatChipsModule', + 'require("@angular/material/core").MatNativeDateModule', + 'require("@angular/material/datepicker").MatDatepickerModule', + 'require("@angular/material/dialog").MatDialogModule', + 'require("@angular/material/divider").MatDividerModule', + 'require("@angular/material/expansion").MatExpansionModule', + 'require("@angular/material/form-field").MatFormFieldModule', + 'require("@angular/material/grid-list").MatGridListModule', + 'require("@angular/material/icon").MatIconModule', + 'require("@angular/material/input").MatInputModule', + 'require("@angular/material/list").MatListModule', + 'require("@angular/material/menu").MatMenuModule', + 'require("@angular/material/paginator").MatPaginatorModule', + 'require("@angular/material/progress-bar").MatProgressBarModule', + 'require("@angular/material/radio").MatRadioModule', + 'require("@angular/material/select").MatSelectModule', + 'require("@angular/material/sidenav").MatSidenavModule', + 'require("@angular/material/slide-toggle").MatSlideToggleModule', + 'require("@angular/material/slider").MatSliderModule', + 'require("@angular/material/snack-bar").MatSnackBarModule', + 'require("@angular/material/table").MatTableModule', + 'require("@angular/material/tabs").MatTabsModule', + 'require("@angular/material/toolbar").MatToolbarModule', + 'require("@angular/material/tooltip").MatTooltipModule', + 'require("@angular/platform-browser").BrowserModule', + 'require("@angular/platform-browser/animations").BrowserAnimationsModule', + 'require("@ngx-translate/core").TranslateModule', + 'require("anuglar2-qrcode").QRCodeModule', + 'require("ng-mat-search-bar").NgMatSearchBarModule', + 'require("ng-simple-slideshow").SlideshowModule', + 'require("ng2-file-upload").FileUploadModule', + 'require("ngx-clipboard").ClipboardModule', + 'require("ngx-cookie").CookieModule', + 'require("ngx-cookie").CookieService', + 'require("ngx-highlightjs").HighlightModule', + 'require("ngx-spinner").NgxSpinnerModule', + 'require("ngx-text-diff").NgxTextDiffModule'], + 'frontend/src/app/app.routing.ts': ['.fieldAccess', + '@angular/router:RouterModule:forRoot', + 'Array.prototype.slice.call', + 'L.reverse', + 'L.shift', + 'RouterModule.forRoot', + 'T.reverse', + 'T.shift', + '__ecma.String:match', + '_tmp_11.push', + '_tmp_13.push', + '_tmp_16.push', + '_tmp_2.push', + '_tmp_4.push', + '_tmp_7.push', + '_tmp_9.push', + 'frontend/src/app/app.routing.ts::program:import', + 'frontend/src/app/app.routing.ts::program:loadFaucetModule', + 'frontend/src/app/app.routing.ts::program:loadWeb3SandboxtModule', + 'frontend/src/app/app.routing.ts::program:loadWeb3WalletModule', + 'frontend/src/app/app.routing.ts::program:require', + 'frontend/src/app/app.routing.ts::program:token1', + 'frontend/src/app/app.routing.ts::program:token2', + 'path.includes', + 'path.match', + 'require("./app.guard").AccountingGuard', + 'require("./app.guard").AdminGuard', + 'require("./app.guard").LoginGuard', + 'require("@angular/router").RouterModule', + 'url[0].toString'], + 'frontend/src/app/basket/basket.component.ts': ['frontend/src/app/basket/basket.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faCartArrowDown'], + 'frontend/src/app/basket/basket.component.ts::program:BasketComponent': ['bonus', + 'checkout', + 'getBonusPoints', + 'getProductCount', + 'productCount'], + 'frontend/src/app/challenge-solved-notification/challenge-solved-notification.component.ts': ['Date', + 'console.log', + 'expires.getFullYear', + 'expires.setFullYear', + 'frontend/src/app/challenge-solved-notification/challenge-solved-notification.component.ts::program:ChallengeSolvedNotification:import', + 'frontend/src/app/challenge-solved-notification/challenge-solved-notification.component.ts::program:ChallengeSolvedNotification:require', + 'frontend/src/app/challenge-solved-notification/challenge-solved-notification.component.ts::program:ChallengeSolvedNotificationComponent:saveProgress', + 'frontend/src/app/challenge-solved-notification/challenge-solved-notification.component.ts::program:ChallengeSolvedNotificationComponent:showNotification', + 'frontend/src/app/challenge-solved-notification/challenge-solved-notification.component.ts::program:shootConfetti', + 'module.shootConfetti', + 'this.cookieService.put', + 'this.notifications.splice', + 'this.showNotification'], + 'frontend/src/app/challenge-solved-notification/challenge-solved-notification.component.ts::program:ChallengeSolvedMessage': ['challenge', + 'flag', + 'hidden', + 'isRestore', + 'key'], + 'frontend/src/app/challenge-solved-notification/challenge-solved-notification.component.ts::program:ChallengeSolvedNotification': ['copied', + 'country', + 'flag', + 'message'], + 'frontend/src/app/challenge-solved-notification/challenge-solved-notification.component.ts::program:ChallengeSolvedNotificationComponent': ['closeNotification', + 'countryMap', + 'ngOnInit', + 'notifications', + 'saveProgress', + 'showCtfCountryDetailsInNotifications', + 'showCtfFlagsInNotifications', + 'showNotification'], + 'frontend/src/app/challenge-status-badge/challenge-status-badge.component.ts': ['console.log', + 'frontend/src/app/challenge-status-badge/challenge-status-badge.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-brands-svg-icons").faWindows'], + 'frontend/src/app/challenge-status-badge/challenge-status-badge.component.ts::program:ChallengeStatusBadgeComponent': ['allowRepeatNotifications', + 'challenge', + 'openHint', + 'repeatNotification', + 'showChallengeHints'], + 'frontend/src/app/change-password/change-password.component.ts': ['@angular/forms:Validators:minLength', + 'UntypedFormControl', + 'Validators.maxLength', + 'Validators.minLength', + '__whatwg.console:error', + 'console.error', + 'console.log', + 'frontend/src/app/change-password/change-password.component.ts::program:ChangePasswordComponent:changePassword', + 'frontend/src/app/change-password/change-password.component.ts::program:ChangePasswordComponent:resetForm', + 'frontend/src/app/change-password/change-password.component.ts::program:ChangePasswordComponent:resetPasswords', + "frontend/src/app/change-password/change-password.component.ts::program:localStorage.getItem('email')?.match", + 'frontend/src/app/change-password/change-password.component.ts::program:matchValidator', + 'frontend/src/app/change-password/change-password.component.ts::program:require', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-regular-svg-icons").faEdit', + 'require("@fortawesome/free-solid-svg-icons").faSave'], + 'frontend/src/app/change-password/change-password.component.ts::program:ChangePasswordComponent': ['changePassword', + 'confirmation', + 'error', + 'newPasswordControl', + 'ngOnInit', + 'passwordControl', + 'repeatNewPasswordControl', + 'resetForm', + 'resetPasswords'], + 'frontend/src/app/chatbot/chatbot.component.ts': ['.fieldAccess', + 'Date', + 'DateConstructor:getHours', + 'DateConstructor:setHours', + 'Document:getElementById', + 'UntypedFormControl', + 'console.log', + 'expires.getHours', + 'expires.setHours', + 'frontend/src/app/chatbot/chatbot.component.ts::program:ChatbotComponent:handleResponse', + 'frontend/src/app/chatbot/chatbot.component.ts::program:MessageActions:clearTimeout', + 'frontend/src/app/chatbot/chatbot.component.ts::program:MessageActions:require', + 'frontend/src/app/chatbot/chatbot.component.ts::program:MessageActions:setTimeout', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faBomb', + 'this.chatbotService.getResponse', + 'this.handleResponse'], + 'frontend/src/app/chatbot/chatbot.component.ts::program:ChatMessage': ['author', + 'body'], + 'frontend/src/app/chatbot/chatbot.component.ts::program:ChatbotComponent': ['chatScrollDownTimeoutId', + 'currentAction', + 'handleResponse', + 'juicyImageSrc', + 'messageActions', + 'messageControl', + 'messages', + 'ngOnDestroy', + 'ngOnInit', + 'profileImageSrc', + 'sendMessage'], + 'frontend/src/app/chatbot/chatbot.component.ts::program:MessageActions': ['namequery', + 'response'], + 'frontend/src/app/chatbot/chatbot.component.ts::program:MessageSources': ['bot', + 'user'], + 'frontend/src/app/code-area/code-area.component.ts': ['@Output', + '__ecma.Array.factory', + '__ecma.Number[]:push', + 'frontend/src/app/code-area/code-area.component.ts::program:LineMarker:require', + 'markedLineNumbers.push', + 'this.addLine.emit'], + 'frontend/src/app/code-area/code-area.component.ts::program:CodeAreaComponent': ['addLine', + 'code', + 'langs', + 'lineMarkers', + 'ngOnInit', + 'selectLines', + 'vulnLines'], + 'frontend/src/app/code-area/code-area.component.ts::program:LineMarker': ['lineNumber', + 'marked'], + 'frontend/src/app/code-fixes/code-fixes.component.ts': ['change.forEachChangedItem', + 'frontend/src/app/code-fixes/code-fixes.component.ts::program:require', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/frontend/node_modules/@angular/core/index").KeyValueChanges:forEachChangedItem', + 'this.differ.diff'], + 'frontend/src/app/code-fixes/code-fixes.component.ts::program:CodeFixesComponent': ['codeComponent', + 'cookieService', + 'differ', + 'fixes', + 'format', + 'ngDoCheck', + 'ngOnInit', + 'randomFixes', + 'selectedFix', + 'snippet'], + 'frontend/src/app/code-snippet/code-snippet.component.ts': ['.greaterEqualsThan', + 'Date', + 'UntypedFormControl', + 'console.log', + 'expires.getFullYear', + 'expires.setFullYear', + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:CodeSnippetComponent:lockIcon', + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:CodeSnippetComponent:resultIcon', + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:CodeSnippetComponent:shuffle', + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:RandomFixes:import', + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:RandomFixes:require', + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:RandomFixes:setFix', + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:RandomFixes:setVerdict', + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:RandomFixes:toggleTab', + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:shootConfetti', + 'module.shootConfetti', + 'this.cookieService.put', + 'this.tab.setValue'], + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:CodeSnippetComponent': ['addLine', + 'changeFix', + 'checkFix', + 'checkLines', + 'explanation', + 'fixes', + 'hint', + 'lock', + 'lockColor', + 'lockIcon', + 'ngOnInit', + 'randomFixes', + 'result', + 'resultColor', + 'resultIcon', + 'selectedFix', + 'selectedLines', + 'setFix', + 'setVerdict', + 'showFeedbackButtons', + 'shuffle', + 'snippet', + 'solved', + 'tab', + 'toggleTab'], + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:CodeSnippetComponent:shuffle:anonymous2:_anon_cdecl': ['fix', + 'index'], + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:RandomFixes': ['fix', + 'index'], + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:ResultState': ['Right', + 'Undecided', + 'Wrong'], + 'frontend/src/app/code-snippet/code-snippet.component.ts::program:Solved': ['findIt', + 'fixIt'], + 'frontend/src/app/complaint/complaint.component.ts': ['FileUploader', + 'UntypedFormControl', + 'Validators.maxLength', + 'console.log', + 'frontend/src/app/complaint/complaint.component.ts::program:ComplaintComponent:initComplaint', + 'frontend/src/app/complaint/complaint.component.ts::program:ComplaintComponent:resetForm', + 'frontend/src/app/complaint/complaint.component.ts::program:ComplaintComponent:save', + 'frontend/src/app/complaint/complaint.component.ts::program:ComplaintComponent:saveComplaint', + 'frontend/src/app/complaint/complaint.component.ts::program:require', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faBomb'], + 'frontend/src/app/complaint/complaint.component.ts::program:ComplaintComponent': ['complaint', + 'confirmation', + 'customerControl', + 'fileControl', + 'fileUploadError', + 'initComplaint', + 'messageControl', + 'ngOnInit', + 'resetForm', + 'save', + 'saveComplaint', + 'uploader', + 'userEmail'], + 'frontend/src/app/contact/contact.component.ts': ['@angular/forms:Validators:pattern', + 'UntypedFormControl', + 'Validators.maxLength', + 'Validators.pattern', + 'console.log', + 'frontend/src/app/contact/contact.component.ts::program:ContactComponent:getNewCaptcha', + 'frontend/src/app/contact/contact.component.ts::program:ContactComponent:ngOnInit', + 'frontend/src/app/contact/contact.component.ts::program:ContactComponent:resetCaptcha', + 'frontend/src/app/contact/contact.component.ts::program:ContactComponent:resetForm', + 'frontend/src/app/contact/contact.component.ts::program:ContactComponent:save', + 'frontend/src/app/contact/contact.component.ts::program:require', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faPaperPlane', + 'require("@fortawesome/free-solid-svg-icons").faStar', + 'this.snackBarHelperService.open'], + 'frontend/src/app/contact/contact.component.ts::program:ContactComponent': ['authorControl', + 'captcha', + 'captchaControl', + 'captchaId', + 'confirmation', + 'error', + 'feedback', + 'feedbackControl', + 'formatRating', + 'getNewCaptcha', + 'ngOnInit', + 'rating', + 'resetCaptcha', + 'resetForm', + 'save', + 'userIdControl'], + 'frontend/src/app/data-export/data-export.component.ts': ['.conditional', + 'Date', + 'DateConstructor:getTime', + 'UntypedFormControl', + 'Validators.minLength', + 'Window & ' + 'globalThis:open', + 'frontend/src/app/data-export/data-export.component.ts::program:DataExportComponent:getNewCaptcha', + 'frontend/src/app/data-export/data-export.component.ts::program:DataExportComponent:needCaptcha', + 'frontend/src/app/data-export/data-export.component.ts::program:DataExportComponent:ngOnInit', + 'frontend/src/app/data-export/data-export.component.ts::program:DataExportComponent:resetForm', + 'frontend/src/app/data-export/data-export.component.ts::program:DataExportComponent:resetFormError', + 'frontend/src/app/data-export/data-export.component.ts::program:require', + "frontend/src/app/data-export/data-export.component.ts::program:window.open('', " + "'_blank', " + "'width=500')?.document.write", + 'localStorage.getItem', + 'nowTime.getTime', + 'require("@angular/forms").Validators', + 'timeOfCaptcha.getTime'], + 'frontend/src/app/data-export/data-export.component.ts::program:DataExportComponent': ['captcha', + 'captchaControl', + 'confirmation', + 'dataRequest', + 'error', + 'formatControl', + 'getNewCaptcha', + 'lastSuccessfulTry', + 'needCaptcha', + 'ngOnInit', + 'presenceOfCaptcha', + 'resetForm', + 'resetFormError', + 'save', + 'userData'], + 'frontend/src/app/delivery-method/delivery-method.component.ts': ['SelectionModel', + 'console.log', + 'frontend/src/app/delivery-method/delivery-method.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faRocket', + 'require("@fortawesome/free-solid-svg-icons").faShippingFast', + 'require("@fortawesome/free-solid-svg-icons").faTruck'], + 'frontend/src/app/delivery-method/delivery-method.component.ts::program:DeliveryMethodComponent': ['address', + 'chooseDeliveryMethod', + 'dataSource', + 'deliveryMethodId', + 'displayedColumns', + 'methods', + 'ngOnInit', + 'routeToPreviousUrl', + 'selectMethod', + 'selection'], + 'frontend/src/app/deluxe-user/deluxe-user.component.ts': ['.fieldAccess', + '__ecma.String:lastIndexOf', + '__ecma.String:substring', + 'console.log', + 'decodeURIComponent', + 'frontend/src/app/deluxe-user/deluxe-user.component.ts::program:require', + 'logo.lastIndexOf', + 'logo.substring', + 'this.io.socket'], + 'frontend/src/app/deluxe-user/deluxe-user.component.ts::program:DeluxeUserComponent': ['applicationName', + 'error', + 'logoSrc', + 'membershipCost', + 'ngOnInit', + 'upgradeToDeluxe'], + 'frontend/src/app/error-page/error-page.component.ts': ['.fieldAccess', + 'frontend/src/app/error-page/error-page.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faHandPaper', + 'require("@fortawesome/free-solid-svg-icons").faUserSlash', + 'this.translate.get'], + 'frontend/src/app/error-page/error-page.component.ts::program:ErrorPageComponent': ['error', + 'ngOnInit'], + 'frontend/src/app/faucet/faucet.component.ts': ['.div', + '.await', + '.conditional', + '@wagmi/core:connect', + '@wagmi/core:createClient', + '@wagmi/core:disconnect', + '@wagmi/core:getAccount', + 'BeeTokenContract.approve', + 'approvalTx.wait()', + 'connect', + 'console.error', + 'console.log', + 'contract.balance', + 'contract.balanceOf', + 'contract.mintNFT', + 'contract.withdraw', + 'ethers.BigNumber:div', + 'ethers.Contract', + 'ethers.Contract:approve', + 'ethers.Contract:balance', + 'ethers.Contract:balanceOf', + 'ethers.Contract:mintNFT', + 'ethers.Contract:withdraw', + 'ethers.providers.JsonRpcSigner:getAddress', + 'ethers.providers.Web3Provider', + 'ethers.providers.Web3Provider:getBalance', + 'ethers.providers.Web3Provider:getSigner', + 'ethers.utils.formatEther', + 'ethers.utils.parseUnits', + 'ethers:getDefaultProvider', + 'frontend/src/app/faucet/faucet.component.ts::program:FaucetComponent:checkNftMinted', + 'frontend/src/app/faucet/faucet.component.ts::program:FaucetComponent:fetchBeeBalance', + 'frontend/src/app/faucet/faucet.component.ts::program:FaucetComponent:fetchMyBeeBalance', + 'frontend/src/app/faucet/faucet.component.ts::program:FaucetComponent:handleAuth', + 'frontend/src/app/faucet/faucet.component.ts::program:FaucetComponent:nftMintListener', + 'frontend/src/app/faucet/faucet.component.ts::program:require', + 'frontend/src/app/faucet/faucet.component.ts::program:setTimeout', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/frontend/node_modules/@wagmi/core/dist/wagmi-core.cjs").Ethereum:request', + 'provider.getBalance', + 'provider.getSigner', + 'signer.getAddress', + 'transaction.wait', + 'tx.wait'], + 'frontend/src/app/faucet/faucet.component.ts::program:FaucetComponent': ['BEEBalance', + 'challengeSolved', + 'checkNftMinted', + 'deployedContractAddress', + 'errorMessage', + 'extractBEETokens', + 'fetchBeeBalance', + 'fetchMyBeeBalance', + 'handleAuth', + 'handleChainChanged', + 'metamaskAddress', + 'mintButtonDisabled', + 'mintNFT', + 'myBEEBalance', + 'nftMintListener', + 'nftMintText', + 'ngOnInit', + 'session', + 'signOut', + 'successResponse', + 'userData', + 'withdrawAmount'], + 'frontend/src/app/faucet/faucet.module.ts': ['@angular/router:RouterModule:forChild', + 'RouterModule.forChild', + '_tmp_3.push', + '_tmp_4.push', + '_tmp_5.push', + 'configurationService.getApplicationConfiguration', + 'frontend/src/app/faucet/faucet.module.ts::program:require', + 'overlayContainer.getContainerElement', + 'require("./faucet.component").FaucetComponent', + 'require("@angular/common").CommonModule', + 'require("@angular/core").CUSTOM_ELEMENTS_SCHEMA', + 'require("@angular/forms").FormsModule', + 'require("@angular/forms").ReactiveFormsModule', + 'require("@angular/material/button").MatButtonModule', + 'require("@angular/material/card").MatCardModule', + 'require("@angular/material/input").MatInputModule', + 'require("@angular/material/snack-bar").MatSnackBarModule', + 'require("@angular/router").RouterModule', + 'require("@ngx-translate/core").TranslateModule'], + 'frontend/src/app/feedback-details/feedback-details.component.ts': ['frontend/src/app/feedback-details/feedback-details.component.ts::program:require'], + 'frontend/src/app/feedback-details/feedback-details.component.ts::program:FeedbackDetailsComponent': ['feedback', + 'id', + 'ngOnInit'], + 'frontend/src/app/forgot-password/forgot-password.component.ts': ['UntypedFormControl', + 'Validators.minLength', + 'frontend/src/app/forgot-password/forgot-password.component.ts::program:ForgotPasswordComponent:resetErrorForm', + 'frontend/src/app/forgot-password/forgot-password.component.ts::program:ForgotPasswordComponent:resetForm', + 'frontend/src/app/forgot-password/forgot-password.component.ts::program:clearTimeout', + 'frontend/src/app/forgot-password/forgot-password.component.ts::program:matchValidator', + 'frontend/src/app/forgot-password/forgot-password.component.ts::program:require', + 'frontend/src/app/forgot-password/forgot-password.component.ts::program:setTimeout', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-regular-svg-icons").faEdit', + 'require("@fortawesome/free-solid-svg-icons").faSave'], + 'frontend/src/app/forgot-password/forgot-password.component.ts::program:ForgotPasswordComponent': ['confirmation', + 'emailControl', + 'error', + 'findSecurityQuestion', + 'passwordControl', + 'repeatPasswordControl', + 'resetErrorForm', + 'resetForm', + 'resetPassword', + 'securityQuestion', + 'securityQuestionControl', + 'timeout', + 'timeoutDuration'], + 'frontend/src/app/last-login-ip/last-login-ip.component.ts': ['Storage:getItem', + 'frontend/src/app/last-login-ip/last-login-ip.component.ts::program:LastLoginIpComponent:parseAuthToken', + 'frontend/src/app/last-login-ip/last-login-ip.component.ts::program:require', + 'jwtDecode'], + 'frontend/src/app/last-login-ip/last-login-ip.component.ts::program:LastLoginIpComponent': ['lastLoginIp', + 'ngOnInit', + 'parseAuthToken'], + 'frontend/src/app/login/login.component.ts': ['Date', + 'UntypedFormControl', + 'Validators.minLength', + 'console.log', + 'expires.getHours', + 'expires.setHours', + 'frontend/src/app/login/login.component.ts::program:LoginComponent:login', + 'frontend/src/app/login/login.component.ts::program:require', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-brands-svg-icons").faGoogle', + 'require("@fortawesome/free-solid-svg-icons").faEye', + 'require("@fortawesome/free-solid-svg-icons").faEyeSlash', + 'require("@fortawesome/free-solid-svg-icons").faKey'], + 'frontend/src/app/login/login.component.ts::program:LoginComponent': ['clientId', + 'emailControl', + 'error', + 'googleLogin', + 'hide', + 'login', + 'ngOnInit', + 'oauthUnavailable', + 'passwordControl', + 'redirectUri', + 'rememberMe', + 'user'], + 'frontend/src/app/login/login.component.ts::program:LoginComponent:login:anonymous1:_anon_cdecl': ['error'], + 'frontend/src/app/navbar/navbar.component.ts': ['@Output', + 'Date', + 'console.log', + 'decodeURIComponent', + 'expires.getFullYear', + 'expires.setFullYear', + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:changeLanguage', + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:checkLanguage', + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:getLanguages', + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:getScoreBoardStatus', + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:getUserDetails', + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:noop', + 'frontend/src/app/navbar/navbar.component.ts::program:require', + 'library.add', + 'logo.lastIndexOf', + 'logo.substring', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-brands-svg-icons").faGithub', + 'require("@fortawesome/free-regular-svg-icons").faComments', + 'require("@fortawesome/free-solid-svg-icons").faBomb', + 'require("@fortawesome/free-solid-svg-icons").faComment', + 'require("@fortawesome/free-solid-svg-icons").faInfoCircle', + 'require("@fortawesome/free-solid-svg-icons").faLanguage', + 'require("@fortawesome/free-solid-svg-icons").faMapMarker', + 'require("@fortawesome/free-solid-svg-icons").faRecycle', + 'require("@fortawesome/free-solid-svg-icons").faSearch', + 'require("@fortawesome/free-solid-svg-icons").faShoppingCart', + 'require("@fortawesome/free-solid-svg-icons").faSignInAlt', + 'require("@fortawesome/free-solid-svg-icons").faSignOutAlt', + 'require("@fortawesome/free-solid-svg-icons").faThermometerEmpty', + 'require("@fortawesome/free-solid-svg-icons").faThermometerFull', + 'require("@fortawesome/free-solid-svg-icons").faThermometerHalf', + 'require("@fortawesome/free-solid-svg-icons").faThermometerQuarter', + 'require("@fortawesome/free-solid-svg-icons").faThermometerThreeQuarters', + 'require("@fortawesome/free-solid-svg-icons").faTrophy', + 'require("@fortawesome/free-solid-svg-icons").faUserCircle', + 'require("@fortawesome/free-solid-svg-icons").faUserSecret', + 'snackBarRef.onAction', + 'this.cookieService.get', + 'this.cookieService.put', + 'this.snackBar.open', + 'this.translate.use'], + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent': ['applicationName', + 'changeLanguage', + 'checkLanguage', + 'getLanguages', + 'getScoreBoardStatus', + 'getUserDetails', + 'goToDataErasurePage', + 'goToProfilePage', + 'isAccounting', + 'isLoggedIn', + 'itemTotal', + 'languages', + 'logoSrc', + 'logout', + 'ngOnInit', + 'noop', + 'onToggleSidenav', + 'scoreBoardVisible', + 'search', + 'selectedLanguage', + 'shortKeyLang', + 'showGitHubLink', + 'sidenavToggle', + 'userEmail', + 'version'], + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:changeLanguage:anonymous1:_anon_cdecl': ['key'], + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:changeLanguage:anonymous:_anon_cdecl': ['key'], + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:checkLanguage:anonymous1:_anon_cdecl': ['key'], + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:checkLanguage:anonymous2:_anon_cdecl': ['key'], + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:checkLanguage:anonymous3:_anon_cdecl': ['key'], + 'frontend/src/app/navbar/navbar.component.ts::program:NavbarComponent:checkLanguage:anonymous:_anon_cdecl': ['key'], + 'frontend/src/app/nft-unlock/nft-unlock.component.ts': ['console.error', + 'frontend/src/app/nft-unlock/nft-unlock.component.ts::program:NFTUnlockComponent:checkChallengeStatus', + 'frontend/src/app/nft-unlock/nft-unlock.component.ts::program:require'], + 'frontend/src/app/nft-unlock/nft-unlock.component.ts::program:NFTUnlockComponent': ['checkChallengeStatus', + 'errorMessage', + 'formSubmitted', + 'ngOnInit', + 'privateKey', + 'submitForm', + 'successResponse'], + 'frontend/src/app/oauth/oauth.component.ts': ['Date', + 'console.log', + 'expires.getHours', + 'expires.setHours', + 'frontend/src/app/oauth/oauth.component.ts::program:OAuthComponent:invalidateSession', + 'frontend/src/app/oauth/oauth.component.ts::program:OAuthComponent:login', + 'frontend/src/app/oauth/oauth.component.ts::program:OAuthComponent:parseRedirectUrlParams', + 'frontend/src/app/oauth/oauth.component.ts::program:btoa', + 'frontend/src/app/oauth/oauth.component.ts::program:require', + 'hash.split', + 'this.invalidateSession', + 'this.login', + 'this.route.snapshot.data.params.substr'], + 'frontend/src/app/oauth/oauth.component.ts::program:OAuthComponent': ['invalidateSession', + 'login', + 'ngOnInit', + 'parseRedirectUrlParams'], + 'frontend/src/app/order-completion/order-completion.component.ts': ['.conditional', + '.formatString', + '.greaterThan', + 'console.log', + 'frontend/src/app/order-completion/order-completion.component.ts::program:require', + 'frontend/src/app/order-completion/order-completion.component.ts::program:truncateTweet', + 'library.add', + 'paramMap.get', + 'parseFloat', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-brands-svg-icons").faTwitter', + 'tweet.substring', + 'window.open'], + 'frontend/src/app/order-completion/order-completion.component.ts::program:OrderCompletionComponent': ['address', + 'dataSource', + 'deliveryPrice', + 'ngOnInit', + 'openConfirmationPDF', + 'orderDetails', + 'orderId', + 'promotionalDiscount', + 'tableColumns', + 'truncateTweet', + 'tweetText'], + 'frontend/src/app/order-history/order-history.component.ts': ['.formatString', + 'StrippedProduct[]:push', + '__ecma.Array.factory', + '__ecma.Boolean:reverse', + 'console.log', + 'frontend/src/app/order-history/order-history.component.ts::program:Order:require', + 'orders.reverse', + 'products.push', + 'this.productService.get', + 'window.open'], + 'frontend/src/app/order-history/order-history.component.ts::program:Order': ['bonus', + 'delivered', + 'orderId', + 'products', + 'totalPrice'], + 'frontend/src/app/order-history/order-history.component.ts::program:OrderHistoryComponent': ['emptyState', + 'ngOnInit', + 'openConfirmationPDF', + 'orders', + 'showDetail', + 'tableColumns', + 'trackOrder'], + 'frontend/src/app/order-history/order-history.component.ts::program:StrippedProduct': ['id', + 'name', + 'price', + 'quantity', + 'total'], + 'frontend/src/app/order-summary/order-summary.component.ts': ['_tmp_15.push', + 'console.log', + 'frontend/src/app/order-summary/order-summary.component.ts::program:btoa', + 'frontend/src/app/order-summary/order-summary.component.ts::program:require'], + 'frontend/src/app/order-summary/order-summary.component.ts::program:OrderSummaryComponent': ['address', + 'bonus', + 'deliveryPrice', + 'getMessage', + 'itemTotal', + 'ngOnInit', + 'paymentMethod', + 'placeOrder', + 'promotionalDiscount'], + 'frontend/src/app/payment-method/payment-method.component.ts': ['@Output', + 'ArrayConstructor:from', + 'UntypedFormControl', + 'Validators.max', + 'Validators.min', + 'console.log', + 'frontend/src/app/payment-method/payment-method.component.ts::program:PaymentMethodComponent:load', + 'frontend/src/app/payment-method/payment-method.component.ts::program:PaymentMethodComponent:resetForm', + 'frontend/src/app/payment-method/payment-method.component.ts::program:require', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-regular-svg-icons/").faTrashAlt', + 'require("@fortawesome/free-solid-svg-icons").faPaperPlane', + 'this.emitSelection.emit', + 'this.paymentService.del', + 'this.snackBarHelperService.open'], + 'frontend/src/app/payment-method/payment-method.component.ts::program:PaymentMethodComponent': ['allowDelete', + 'card', + 'cardsExist', + 'confirmation', + 'dataSource', + 'delete', + 'displayedColumns', + 'emitSelection', + 'emitSelectionToParent', + 'error', + 'load', + 'monthControl', + 'monthRange', + 'nameControl', + 'ngOnInit', + 'numberControl', + 'paymentId', + 'resetForm', + 'save', + 'storedCards', + 'yearControl', + 'yearRange'], + 'frontend/src/app/payment/payment.component.ts': ['UntypedFormControl', + 'Validators.maxLength', + 'Validators.minLength', + 'console.log', + 'frontend/src/app/payment/payment.component.ts::program:PaymentComponent:choosePayment', + 'frontend/src/app/payment/payment.component.ts::program:PaymentComponent:initTotal', + 'frontend/src/app/payment/payment.component.ts::program:PaymentComponent:resetCouponForm', + 'frontend/src/app/payment/payment.component.ts::program:PaymentComponent:showConfirmation', + 'frontend/src/app/payment/payment.component.ts::program:require', + 'library.add', + 'paramMap.get', + 'parseFloat', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-brands-svg-icons").faLeanpub', + 'require("@fortawesome/free-brands-svg-icons").faStripe', + 'require("@fortawesome/free-solid-svg-icons").faCartArrowDown', + 'require("@fortawesome/free-solid-svg-icons").faCoffee', + 'require("@fortawesome/free-solid-svg-icons").faGift', + 'require("@fortawesome/free-solid-svg-icons").faHandHoldingUsd', + 'require("@fortawesome/free-solid-svg-icons").faHeart', + 'require("@fortawesome/free-solid-svg-icons").faPalette', + 'require("@fortawesome/free-solid-svg-icons").faStickyNote', + 'require("@fortawesome/free-solid-svg-icons").faThumbsUp', + 'require("@fortawesome/free-solid-svg-icons").faTimes', + 'require("@fortawesome/free-solid-svg-icons").faTshirt', + 'sessionStorage.setItem', + 'this.showConfirmation'], + 'frontend/src/app/payment/payment.component.ts::program:PaymentComponent': ['applicationName', + 'applyCoupon', + 'campaignCoupon', + 'campaigns', + 'card', + 'choosePayment', + 'clientDate', + 'couponConfirmation', + 'couponControl', + 'couponError', + 'couponPanelExpanded', + 'facebookUrl', + 'getMessage', + 'initTotal', + 'mode', + 'ngOnInit', + 'noop', + 'paymentId', + 'paymentMode', + 'paymentPanelExpanded', + 'resetCouponForm', + 'routeToPreviousUrl', + 'showBitcoinQrCode', + 'showConfirmation', + 'showDashQrCode', + 'showEtherQrCode', + 'totalPrice', + 'twitterUrl', + 'useWallet', + 'walletBalance', + 'walletBalanceStr'], + 'frontend/src/app/photo-wall/mime-type.validator.ts': ['.cast', + 'FileReader', + 'FileReader:addEventListener', + 'FileReader:readAsArrayBuffer', + 'Observable', + 'Observer>:complete', + 'Observer>:next', + 'Uint8Array', + 'fileReader.addEventListener', + 'fileReader.readAsArrayBuffer', + 'frontend/src/app/photo-wall/mime-type.validator.ts::program:require', + 'observer.complete', + 'observer.next'], + 'frontend/src/app/photo-wall/photo-wall.component.ts': ['.indexAccess', + 'FileReader', + 'FileReader:readAsDataURL', + 'UntypedFormControl', + 'UntypedFormGroup', + '_tmp_7.push', + 'console.log', + 'frontend/src/app/photo-wall/photo-wall.component.ts::program:PhotoWallComponent:ngOnInit', + 'frontend/src/app/photo-wall/photo-wall.component.ts::program:PhotoWallComponent:resetForm', + 'frontend/src/app/photo-wall/photo-wall.component.ts::program:require', + 'library.add', + 'reader.readAsDataURL', + 'require("./mime-type.validator").mimeType', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-brands-svg-icons").faTwitter'], + 'frontend/src/app/photo-wall/photo-wall.component.ts::program:PhotoWallComponent': ['emptyState', + 'form', + 'imagePreview', + 'isLoggedIn', + 'ngOnInit', + 'onImagePicked', + 'resetForm', + 'save', + 'slideshowDataSource', + 'twitterHandle'], + 'frontend/src/app/privacy-policy/privacy-policy.component.ts': ['console.log', + 'frontend/src/app/privacy-policy/privacy-policy.component.ts::program:require'], + 'frontend/src/app/privacy-policy/privacy-policy.component.ts::program:PrivacyPolicyComponent': ['applicationName', + 'applicationUrl', + 'ngOnInit', + 'privacyContactEmail'], + 'frontend/src/app/privacy-security/privacy-security.component.ts': ['frontend/src/app/privacy-security/privacy-security.component.ts::program:require'], + 'frontend/src/app/privacy-security/privacy-security.component.ts::program:PrivacySecurityComponent': ['Ip', + 'isHandset$', + 'ngAfterViewInit', + 'windowWidth'], + 'frontend/src/app/product-details/product-details.component.ts': ['UntypedFormControl', + 'Validators.maxLength', + 'console.log', + 'frontend/src/app/product-details/product-details.component.ts::program:require', + 'frontend/src/app/product-details/product-details.component.ts::program:setTimeout', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faArrowCircleLeft', + 'require("@fortawesome/free-solid-svg-icons").faCrown', + 'require("@fortawesome/free-solid-svg-icons").faPaperPlane', + 'require("@fortawesome/free-solid-svg-icons").faThumbsUp', + 'require("@fortawesome/free-solid-svg-icons").faUserEdit'], + 'frontend/src/app/product-details/product-details.component.ts::program:ProductDetailsComponent': ['addReview', + 'author', + 'editReview', + 'isLoggedIn', + 'likeReview', + 'ngOnDestroy', + 'ngOnInit', + 'reviewControl', + 'reviews$', + 'userSubscription'], + 'frontend/src/app/product-review-edit/product-review-edit.component.ts': ['UntypedFormControl', + 'Validators.maxLength', + 'Validators.minLength', + 'console.log', + 'frontend/src/app/product-review-edit/product-review-edit.component.ts::program:require', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faArrowCircleLeft', + 'require("@fortawesome/free-solid-svg-icons").faPaperPlane'], + 'frontend/src/app/product-review-edit/product-review-edit.component.ts::program:ProductReviewEditComponent': ['editReview', + 'editReviewControl', + 'error', + 'ngOnInit'], + 'frontend/src/app/purchase-basket/purchase-basket.component.ts': ['.minus', + '@Output', + 'console.log', + 'frontend/src/app/purchase-basket/purchase-basket.component.ts::program:PurchaseBasketComponent:addToQuantity', + 'frontend/src/app/purchase-basket/purchase-basket.component.ts::program:PurchaseBasketComponent:isDeluxe', + 'frontend/src/app/purchase-basket/purchase-basket.component.ts::program:PurchaseBasketComponent:load', + 'frontend/src/app/purchase-basket/purchase-basket.component.ts::program:PurchaseBasketComponent:sendToParent', + 'frontend/src/app/purchase-basket/purchase-basket.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-regular-svg-icons/").faTrashAlt', + 'require("@fortawesome/free-solid-svg-icons").faMinusSquare', + 'require("@fortawesome/free-solid-svg-icons").faPlusSquare', + 'this.addToQuantity', + 'this.basketService.del', + 'this.basketService.get', + 'this.basketService.put', + 'this.emitProductCount.emit'], + 'frontend/src/app/purchase-basket/purchase-basket.component.ts::program:PurchaseBasketComponent': ['addToQuantity', + 'allowEdit', + 'bonus', + 'dataSource', + 'dec', + 'delete', + 'displayTotal', + 'emitProductCount', + 'emitTotal', + 'inc', + 'isDeluxe', + 'itemTotal', + 'load', + 'ngOnInit', + 'sendToParent', + 'tableColumns', + 'totalPrice', + 'userEmail'], + 'frontend/src/app/qr-code/qr-code.component.ts': ['frontend/src/app/qr-code/qr-code.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faArrowCircleLeft'], + 'frontend/src/app/qr-code/qr-code.component.ts::program:QrCodeComponent': ['address', + 'data', + 'ngOnInit', + 'title', + 'url'], + 'frontend/src/app/recycle/recycle.component.ts': ['UntypedFormControl', + 'Validators.max', + 'Validators.min', + 'console.log', + 'frontend/src/app/recycle/recycle.component.ts::program:RecycleComponent:findAll', + 'frontend/src/app/recycle/recycle.component.ts::program:RecycleComponent:initRecycle', + 'frontend/src/app/recycle/recycle.component.ts::program:RecycleComponent:resetForm', + 'frontend/src/app/recycle/recycle.component.ts::program:RecycleComponent:save', + 'frontend/src/app/recycle/recycle.component.ts::program:require', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faPaperPlane', + 'this.snackBarHelperService.open'], + 'frontend/src/app/recycle/recycle.component.ts::program:RecycleComponent': ['addressComponent', + 'addressId', + 'bottomImage', + 'confirmation', + 'findAll', + 'getMessage', + 'initRecycle', + 'ngOnInit', + 'pickUpDateControl', + 'pickup', + 'recycle', + 'recycleQuantityControl', + 'recycles', + 'requestorControl', + 'resetForm', + 'save', + 'topImage', + 'userEmail'], + 'frontend/src/app/register/register.component.ts': ['UntypedFormControl', + 'Validators.maxLength', + 'Validators.minLength', + 'console.log', + 'frontend/src/app/register/register.component.ts::program:RegisterComponent:save', + 'frontend/src/app/register/register.component.ts::program:matchValidator', + 'frontend/src/app/register/register.component.ts::program:require', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faExclamationCircle', + 'require("@fortawesome/free-solid-svg-icons").faUserPlus'], + 'frontend/src/app/register/register.component.ts::program:RegisterComponent': ['emailControl', + 'error', + 'ngOnInit', + 'passwordControl', + 'repeatPasswordControl', + 'save', + 'securityAnswerControl', + 'securityQuestionControl', + 'securityQuestions', + 'selected'], + 'frontend/src/app/saved-address/saved-address.component.ts': ['frontend/src/app/saved-address/saved-address.component.ts::program:require'], + 'frontend/src/app/saved-payment-methods/saved-payment-methods.component.ts': ['frontend/src/app/saved-payment-methods/saved-payment-methods.component.ts::program:require'], + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts': ['.fieldAccess', + '.plus', + 'Array', + 'Challenge:localeCompare', + 'Challenge[]:filter', + 'Document:getElementById', + 'HTMLElement:scrollIntoView', + 'MatTableDataSource', + 'MutationObserver', + 'MutationObserver:disconnect', + 'MutationObserver:observe', + '__ecma.Array.factory:filter', + '__ecma.String[]:includes', + 'a.localeCompare', + 'challenges.filter', + 'challengesWithCodeSnippet.includes', + 'console.log', + 'dialogRef.afterClosed', + 'document.getElementById', + 'el.scrollIntoView', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:augmentHintText', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:calculateCodingProgressPercentage', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:calculateGradientOffset', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:calculateGradientOffsets', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:calculateProgressPercentage', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:calculateTutorialTier', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:determineToggledMajorityOfCategories', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:determineToggledMajorityOfDifficulties', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:populateFilteredChallengeLists', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:scrollToChallenge', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:toggleDifficulty', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent:trustDescriptionHtml', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:hasInstructions', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:import', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:require', + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:startHackingInstructorFor', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/frontend/node_modules/@angular/material/dialog/index").MatDialogRef:afterClosed', + 'library.add', + 'module.hasInstructions', + 'module.startHackingInstructorFor', + 'observer.disconnect', + 'observer.observe', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-brands-svg-icons").faBtc', + 'require("@fortawesome/free-brands-svg-icons").faGithub', + 'require("@fortawesome/free-brands-svg-icons").faGitter', + 'require("@fortawesome/free-regular-svg-icons").faGem', + 'require("@fortawesome/free-solid-svg-icons").faPollH', + 'require("@fortawesome/free-solid-svg-icons").faStar', + 'require("@fortawesome/free-solid-svg-icons").faTrophy', + 'this.calculateGradientOffset', + 'this.calculateGradientOffsets', + 'this.calculateTutorialTier', + 'this.dialog.open', + 'this.displayedChallengeCategories.includes', + 'this.displayedChallengeCategories.push', + 'this.displayedDifficulties.includes', + 'this.displayedDifficulties.push', + 'this.localBackupService.restore', + 'this.scrollToChallenge'], + 'frontend/src/app/score-board-legacy/score-board-legacy.component.ts::program:ScoreBoardLegacyComponent': ['allTutorialsCompleted', + 'allowRepeatNotifications', + 'appName', + 'augmentHintText', + 'availableChallengeCategories', + 'availableDifficulties', + 'calculateCodingProgressPercentage', + 'calculateGradientOffset', + 'calculateGradientOffsets', + 'calculateProgressPercentage', + 'calculateTutorialTier', + 'challenges', + 'codingChallengesEnabled', + 'determineToggledMajorityOfCategories', + 'determineToggledMajorityOfDifficulties', + 'disabledEnv', + 'displayedChallengeCategories', + 'displayedColumns', + 'displayedDifficulties', + 'filterToDataSource', + 'generateBadge', + 'generateColor', + 'isLastTutorialsTier', + 'localBackupEnabled', + 'ngAfterViewInit', + 'ngOnInit', + 'numDisabledChallenges', + 'offsetValue', + 'percentChallengesSolved', + 'percentCodingChallengesSolved', + 'populateFilteredChallengeLists', + 'questionnaireUrl', + 'restoreBackup', + 'restrictToTutorialsFirst', + 'saveBackup', + 'scrollToChallenge', + 'showChallengeHints', + 'showCodeSnippet', + 'showContributionInfoBox', + 'showDisabledChallenges', + 'showFeedbackButtons', + 'showHackingInstructor', + 'showOnlyTutorialChallenges', + 'showSolvedChallenges', + 'showVulnerabilityMitigations', + 'solvedChallengesOfDifficulty', + 'startHackingInstructor', + 'times', + 'toggleAllChallengeCategory', + 'toggleAllDifficulty', + 'toggleDifficulty', + 'toggleShowChallengeCategory', + 'toggleShowDisabledChallenges', + 'toggleShowOnlyTutorialChallenges', + 'toggleShowSolvedChallenges', + 'toggledMajorityOfCategories', + 'toggledMajorityOfDifficulties', + 'totalChallengesOfDifficulty', + 'trackById', + 'trustDescriptionHtml', + 'tutorialsTier'], + 'frontend/src/app/score-board/components/challenge-card/challenge-card.component.ts': ['frontend/src/app/score-board/components/challenge-card/challenge-card.component.ts::program:require'], + 'frontend/src/app/score-board/components/challenge-card/challenge-card.component.ts::program:ChallengeCardComponent': ['applicationConfiguration', + 'challenge', + 'hasInstructions', + 'openCodingChallengeDialog', + 'repeatChallengeNotification', + 'startHackingInstructorFor'], + 'frontend/src/app/score-board/components/challenges-unavailable-warning/challenges-unavailable-warning.component.ts': ['@Output', + 'EventEmitter', + 'frontend/src/app/score-board/components/challenges-unavailable-warning/challenges-unavailable-warning.component.ts::program:require', + 'frontend/src/app/score-board/components/challenges-unavailable-warning/challenges-unavailable-warning.component.ts::program:structuredClone'], + 'frontend/src/app/score-board/components/challenges-unavailable-warning/challenges-unavailable-warning.component.ts::program:ChallengesUnavailableWarningComponent': ['challenges', + 'disabledBecauseOfEnv', + 'filterSetting', + 'filterSettingChange', + 'ngOnChanges', + 'numberOfDisabledChallenges', + 'toggleShowDisabledChallenges'], + 'frontend/src/app/score-board/components/coding-challenge-progress-score-card/coding-challenge-progress-score-card.component.ts': ['.map', + 'EnrichedChallenge[]:map', + 'frontend/src/app/score-board/components/coding-challenge-progress-score-card/coding-challenge-progress-score-card.component.ts::program:CodingChallengeProgressScoreCardComponent:updatedNumberOfSolvedChallenges', + 'frontend/src/app/score-board/components/coding-challenge-progress-score-card/coding-challenge-progress-score-card.component.ts::program:require', + 'this.allChallenges\r\n' + ' ' + '.filter'], + 'frontend/src/app/score-board/components/coding-challenge-progress-score-card/coding-challenge-progress-score-card.component.ts::program:CodingChallengeProgressScoreCardComponent': ['allChallenges', + 'availableCodingChallenges', + 'ngOnChanges', + 'ngOnInit', + 'solvedCodingChallenges', + 'updatedNumberOfSolvedChallenges'], + 'frontend/src/app/score-board/components/difficulty-overview-score-card/difficulty-overview-score-card.component.ts': ['.map', + 'Object.freeze', + 'Object.values', + 'frontend/src/app/score-board/components/difficulty-overview-score-card/difficulty-overview-score-card.component.ts::program:DifficultyOverviewScoreCardComponent:calculateDifficultySummaries', + 'frontend/src/app/score-board/components/difficulty-overview-score-card/difficulty-overview-score-card.component.ts::program:DifficultyOverviewScoreCardComponent:updatedNumberOfSolvedChallenges', + 'frontend/src/app/score-board/components/difficulty-overview-score-card/difficulty-overview-score-card.component.ts::program:DifficultySummary:require', + 'frontend/src/app/score-board/components/difficulty-overview-score-card/difficulty-overview-score-card.component.ts::program:DifficultySummary:structuredClone', + 'this.allChallenges\r\n' + ' ' + '.filter'], + 'frontend/src/app/score-board/components/difficulty-overview-score-card/difficulty-overview-score-card.component.ts::program:DifficultyOverviewScoreCardComponent': ['allChallenges', + 'calculateDifficultySummaries', + 'difficultySummaries', + 'ngOnChanges', + 'ngOnInit', + 'solvedChallenges', + 'totalChallenges', + 'updatedNumberOfSolvedChallenges'], + 'frontend/src/app/score-board/components/difficulty-overview-score-card/difficulty-overview-score-card.component.ts::program:DifficultySummary': ['availableChallenges', + 'difficulty', + 'solvedChallenges'], + 'frontend/src/app/score-board/components/difficulty-stars/difficulty-stars.component.ts': ['frontend/src/app/score-board/components/difficulty-stars/difficulty-stars.component.ts::program:require'], + 'frontend/src/app/score-board/components/difficulty-stars/difficulty-stars.component.ts::program:DifficultyStarsComponent': ['difficulty'], + 'frontend/src/app/score-board/components/filter-settings/components/category-filter/category-filter.component.ts': ['@Output', + 'Set', + 'allChallenges.map', + 'frontend/src/app/score-board/components/filter-settings/components/category-filter/category-filter.component.ts::program:CategoryFilterComponent:getAvailableCategories', + 'frontend/src/app/score-board/components/filter-settings/components/category-filter/category-filter.component.ts::program:CategoryFilterComponent:isCategorySelected', + 'frontend/src/app/score-board/components/filter-settings/components/category-filter/category-filter.component.ts::program:require', + 'this.categories.includes', + 'this.categories.push', + 'this.isCategorySelected'], + 'frontend/src/app/score-board/components/filter-settings/components/category-filter/category-filter.component.ts::program:CategoryFilterComponent': ['allChallenges', + 'availableCategories', + 'categories', + 'categoriesChange', + 'getAvailableCategories', + 'isAllCategoriesSelected', + 'isCategorySelected', + 'ngOnChanges', + 'ngOnInit', + 'resetCategoryFilter', + 'toggleCategorySelected'], + 'frontend/src/app/score-board/components/filter-settings/components/score-board-additional-settings-dialog/score-board-additional-settings-dialog.component.ts': ['frontend/src/app/score-board/components/filter-settings/components/score-board-additional-settings-dialog/score-board-additional-settings-dialog.component.ts::program:require', + 'rxjs:Subscription:unsubscribe', + 'this.featureFlagService.defaultScoreBoard$.subscribe', + 'this.subscriptions.push'], + 'frontend/src/app/score-board/components/filter-settings/components/score-board-additional-settings-dialog/score-board-additional-settings-dialog.component.ts::program:ScoreBoardAdditionalSettingsDialogComponent': ['ngOnDestroy', + 'ngOnInit', + 'scoreBoardVersion', + 'subscriptions'], + 'frontend/src/app/score-board/components/filter-settings/filter-settings.component.ts': ['@Output', + 'EventEmitter', + 'Set', + 'frontend/src/app/score-board/components/filter-settings/filter-settings.component.ts::program:require', + 'frontend/src/app/score-board/components/filter-settings/filter-settings.component.ts::program:structuredClone', + 'this.filterSettingChange.emit'], + 'frontend/src/app/score-board/components/filter-settings/filter-settings.component.ts::program:FilterSettingsComponent': ['allChallenges', + 'canBeReset', + 'filterSetting', + 'filterSettingChange', + 'ngOnChanges', + 'onCategoryFilterChange', + 'onDifficultyFilterChange', + 'onSearchQueryFilterChange', + 'onStatusFilterChange', + 'onTagFilterChange', + 'openAdditionalSettingsDialog', + 'reset', + 'tags'], + 'frontend/src/app/score-board/components/filter-settings/pipes/difficulty-selection-summary.pipe.ts': ['DifficultyGroup[]:map', + 'DifficultyGroup[]:push', + '__ecma.Array.factory', + 'breakDifficultiesIntoNeighboringGroups', + 'convertDifficultyGroupsToString', + 'difficultyGroups.map', + 'difficultyGroups.push', + 'frontend/src/app/score-board/components/filter-settings/pipes/difficulty-selection-summary.pipe.ts::program:DifficultyGroup:require', + 'frontend/src/app/score-board/components/filter-settings/pipes/difficulty-selection-summary.pipe.ts::program:breakDifficultiesIntoNeighboringGroups', + 'frontend/src/app/score-board/components/filter-settings/pipes/difficulty-selection-summary.pipe.ts::program:convertDifficultyGroupsToString', + 'lodash-es/sortBy:sortBy', + 'sortBy'], + 'frontend/src/app/score-board/components/filter-settings/pipes/difficulty-selection-summary.pipe.ts::program:DifficultyGroup': ['end', + 'start'], + 'frontend/src/app/score-board/components/filter-settings/pipes/difficulty-selection-summary.pipe.ts::program:DifficultySelectionSummaryPipe': ['transform'], + 'frontend/src/app/score-board/components/hacking-challenge-progress-score-card/hacking-challenge-progress-score-card.component.ts': ['frontend/src/app/score-board/components/hacking-challenge-progress-score-card/hacking-challenge-progress-score-card.component.ts::program:HackingChallengeProgressScoreCardComponent:updatedNumberOfSolvedChallenges', + 'frontend/src/app/score-board/components/hacking-challenge-progress-score-card/hacking-challenge-progress-score-card.component.ts::program:require'], + 'frontend/src/app/score-board/components/hacking-challenge-progress-score-card/hacking-challenge-progress-score-card.component.ts::program:HackingChallengeProgressScoreCardComponent': ['allChallenges', + 'ngOnChanges', + 'ngOnInit', + 'solvedChallenges', + 'updatedNumberOfSolvedChallenges'], + 'frontend/src/app/score-board/components/legacy-notice/legacy-notice.component.ts': ['frontend/src/app/score-board/components/legacy-notice/legacy-notice.component.ts::program:require'], + 'frontend/src/app/score-board/components/legacy-notice/legacy-notice.component.ts::program:LegacyNoticeComponent': ['applicationConfig'], + 'frontend/src/app/score-board/components/score-card/score-card.component.ts': ['frontend/src/app/score-board/components/score-card/score-card.component.ts::program:require'], + 'frontend/src/app/score-board/components/score-card/score-card.component.ts::program:ScoreCardComponent': ['description', + 'score', + 'showAsPercentage', + 'showProgressBar', + 'total'], + 'frontend/src/app/score-board/components/tutorial-mode-warning/tutorial-mode-warning.component.ts': ['frontend/src/app/score-board/components/tutorial-mode-warning/tutorial-mode-warning.component.ts::program:require'], + 'frontend/src/app/score-board/components/tutorial-mode-warning/tutorial-mode-warning.component.ts::program:TutorialModeWarningComponent': ['allChallenges', + 'applicationConfig', + 'ngOnChanges', + 'tutorialModeActive'], + 'frontend/src/app/score-board/components/warning-card/warning-card.component.ts': ['frontend/src/app/score-board/components/warning-card/warning-card.component.ts::program:require'], + 'frontend/src/app/score-board/filter-settings/FilterSetting.ts::program:FilterSetting': ['categories', + 'difficulties', + 'restrictToTutorialChallengesFirst', + 'searchQuery', + 'showDisabledChallenges', + 'status', + 'tags'], + 'frontend/src/app/score-board/filter-settings/query-params-converters.ts': ['frontend/src/app/score-board/filter-settings/query-params-converters.ts::program:fromQueryParams', + 'frontend/src/app/score-board/filter-settings/query-params-converters.ts::program:require', + 'frontend/src/app/score-board/filter-settings/query-params-converters.ts::program:structuredClone', + 'frontend/src/app/score-board/filter-settings/query-params-converters.ts::program:toQueryParams', + 'isNaN', + 'parseInt', + 'require("./FilterSetting").DEFAULT_FILTER_SETTING', + 'structuredClone'], + 'frontend/src/app/score-board/helpers/challenge-filtering.ts': ['.filter', + 'EnrichedChallenge[]:every', + 'EnrichedChallenge[]:filter', + '__ecma.Math:min', + 'challenges.filter', + 'filterSetting.tags.includes', + 'frontend/src/app/score-board/helpers/challenge-filtering.ts::program:filterChallenges', + 'frontend/src/app/score-board/helpers/challenge-filtering.ts::program:getCompleteChallengeStatus', + 'frontend/src/app/score-board/helpers/challenge-filtering.ts::program:require', + 'getCompleteChallengeStatus', + 'tutorialChallenges.every'], + 'frontend/src/app/score-board/helpers/challenge-sorting.ts': ['frontend/src/app/score-board/helpers/challenge-sorting.ts::program:require', + 'frontend/src/app/score-board/helpers/challenge-sorting.ts::program:sortChallenges', + 'sortBy'], + 'frontend/src/app/score-board/pipes/challenge-hint.pipe.ts': ['frontend/src/app/score-board/pipes/challenge-hint.pipe.ts::program:ChallengeHintPipeArgs:require', + 'of'], + 'frontend/src/app/score-board/pipes/challenge-hint.pipe.ts::program:ChallengeHintPipe': ['transform'], + 'frontend/src/app/score-board/pipes/challenge-hint.pipe.ts::program:ChallengeHintPipeArgs': ['hintUrl'], + 'frontend/src/app/score-board/score-board.component.ts': ['__whatwg.console:warn', + 'combineLatest', + 'fromQueryParams', + 'frontend/src/app/score-board/score-board.component.ts::program:CodeChallengeSolvedWebsocket:require', + 'frontend/src/app/score-board/score-board.component.ts::program:CodeChallengeSolvedWebsocket:structuredClone', + 'frontend/src/app/score-board/score-board.component.ts::program:ScoreBoardComponent:filterAndUpdateChallenges', + 'frontend/src/app/score-board/score-board.component.ts::program:ScoreBoardComponent:rewriteLegacyChallengeDirectLink', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/frontend/src/app/Models/challenge.model").Challenge[]:map', + 'require("./filter-settings/FilterSetting").DEFAULT_FILTER_SETTING', + 'rxjs:combineLatest', + 'structuredClone', + 'tag.trim', + 'this.rewriteLegacyChallengeDirectLink', + 'this.route.queryParams.subscribe', + 'this.subscriptions.push', + 'toQueryParams'], + 'frontend/src/app/score-board/score-board.component.ts::program:ChallengeSolvedWebsocket': ['challenge', + 'flag', + 'hidden', + 'isRestore', + 'key', + 'name'], + 'frontend/src/app/score-board/score-board.component.ts::program:CodeChallengeSolvedWebsocket': ['codingChallengeStatus', + 'key'], + 'frontend/src/app/score-board/score-board.component.ts::program:ScoreBoardComponent': ['allChallenges', + 'applicationConfiguration', + 'filterAndUpdateChallenges', + 'filterSetting', + 'filteredChallenges', + 'getChallengeKey', + 'isInitialized', + 'ngOnDestroy', + 'ngOnInit', + 'onChallengeSolvedWebsocket', + 'onCodeChallengeSolvedWebsocket', + 'onFilterSettingUpdate', + 'openCodingChallengeDialog', + 'repeatChallengeNotification', + 'reset', + 'rewriteLegacyChallengeDirectLink', + 'subscriptions'], + 'frontend/src/app/score-board/score-board.module.ts': ['_tmp_1.push', + '_tmp_2.push', + 'frontend/src/app/score-board/score-board.module.ts::program:require', + 'require("./components/challenge-card/challenge-card.component").ChallengeCardComponent', + 'require("./components/challenges-unavailable-warning/challenges-unavailable-warning.component").ChallengesUnavailableWarningComponent', + 'require("./components/coding-challenge-progress-score-card/coding-challenge-progress-score-card.component").CodingChallengeProgressScoreCardComponent', + 'require("./components/difficulty-overview-score-card/difficulty-overview-score-card.component").DifficultyOverviewScoreCardComponent', + 'require("./components/difficulty-stars/difficulty-stars.component").DifficultyStarsComponent', + 'require("./components/filter-settings/components/category-filter/category-filter.component").CategoryFilterComponent', + 'require("./components/filter-settings/components/score-board-additional-settings-dialog/score-board-additional-settings-dialog.component").ScoreBoardAdditionalSettingsDialogComponent', + 'require("./components/filter-settings/filter-settings.component").FilterSettingsComponent', + 'require("./components/filter-settings/pipes/difficulty-selection-summary.pipe").DifficultySelectionSummaryPipe', + 'require("./components/hacking-challenge-progress-score-card/hacking-challenge-progress-score-card.component").HackingChallengeProgressScoreCardComponent', + 'require("./components/legacy-notice/legacy-notice.component").LegacyNoticeComponent', + 'require("./components/score-card/score-card.component").ScoreCardComponent', + 'require("./components/tutorial-mode-warning/tutorial-mode-warning.component").TutorialModeWarningComponent', + 'require("./components/warning-card/warning-card.component").WarningCardComponent', + 'require("./pipes/challenge-hint.pipe").ChallengeHintPipe', + 'require("./score-board.component").ScoreBoardComponent', + 'require("@angular/common").CommonModule', + 'require("@angular/forms").FormsModule', + 'require("@angular/forms").ReactiveFormsModule', + 'require("@angular/material/button").MatButtonModule', + 'require("@angular/material/dialog").MatDialogModule', + 'require("@angular/material/form-field").MatFormFieldModule', + 'require("@angular/material/icon").MatIconModule', + 'require("@angular/material/input").MatInputModule', + 'require("@angular/material/progress-spinner").MatProgressSpinnerModule', + 'require("@angular/material/radio").MatRadioModule', + 'require("@angular/material/select").MatSelectModule', + 'require("@angular/material/tooltip").MatTooltipModule', + 'require("@angular/router").RouterModule', + 'require("@ngx-translate/core").TranslateModule'], + 'frontend/src/app/score-board/types/EnrichedChallenge.ts': ['frontend/src/app/score-board/types/EnrichedChallenge.ts::program:EnrichedChallenge:require'], + 'frontend/src/app/score-board/types/EnrichedChallenge.ts::program:EnrichedChallenge': ['hasCodingChallenge', + 'originalDescription', + 'tagList'], + 'frontend/src/app/search-result/search-result.component.ts': ['.fieldAccess', + '__ecma.Array.factory', + '__ecma.String:trim', + '_tmp_7.push', + 'console.log', + 'dataTable.find', + 'dataTable.push', + 'decodeURIComponent', + 'frontend/src/app/search-result/search-result.component.ts::program:SearchResultComponent:filterTable', + 'frontend/src/app/search-result/search-result.component.ts::program:SearchResultComponent:startHackingInstructor', + 'frontend/src/app/search-result/search-result.component.ts::program:SearchResultComponent:trustProductDescription', + 'frontend/src/app/search-result/search-result.component.ts::program:TableEntry:import', + 'frontend/src/app/search-result/search-result.component.ts::program:TableEntry:require', + 'frontend/src/app/search-result/search-result.component.ts::program:startHackingInstructorFor', + 'library.add', + 'module.startHackingInstructorFor', + 'queryParam.toLowerCase', + 'queryParam.trim', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faCartPlus', + 'require("@fortawesome/free-solid-svg-icons").faEye', + 'this.io.socket', + 'this.productService.search', + 'this.quantityService.getAll', + 'this.sanitizer.bypassSecurityTrustHtml', + 'this.snackBarHelperService.open', + 'this.trustProductDescription'], + 'frontend/src/app/search-result/search-result.component.ts::program:SearchResultComponent': ['addToBasket', + 'breakpoint', + 'dataSource', + 'displayedColumns', + 'emptyState', + 'filterTable', + 'gridDataSource', + 'isDeluxe', + 'isLoggedIn', + 'ngAfterViewInit', + 'ngOnDestroy', + 'onResize', + 'pageSizeOptions', + 'paginator', + 'productSubscription', + 'resultsLength', + 'routerSubscription', + 'searchValue', + 'showDetail', + 'startHackingInstructor', + 'tableData', + 'trustProductDescription'], + 'frontend/src/app/search-result/search-result.component.ts::program:TableEntry': ['deluxePrice', + 'description', + 'id', + 'image', + 'name', + 'price', + 'quantity'], + 'frontend/src/app/server-started-notification/server-started-notification.component.ts': ['console.log', + 'encodeURIComponent', + 'frontend/src/app/server-started-notification/server-started-notification.component.ts::program:HackingProgress:require', + 'this.cookieService.get'], + 'frontend/src/app/server-started-notification/server-started-notification.component.ts::program:HackingProgress': ['autoRestoreMessage', + 'cleared'], + 'frontend/src/app/server-started-notification/server-started-notification.component.ts::program:ServerStartedNotificationComponent': ['clearProgress', + 'closeNotification', + 'hackingProgress', + 'ngOnInit'], + 'frontend/src/app/sidenav/sidenav.component.ts': ['@Output', + 'console.log', + 'frontend/src/app/sidenav/sidenav.component.ts::program:SidenavComponent:getApplicationDetails', + 'frontend/src/app/sidenav/sidenav.component.ts::program:SidenavComponent:getScoreBoardStatus', + 'frontend/src/app/sidenav/sidenav.component.ts::program:SidenavComponent:getUserDetails', + 'frontend/src/app/sidenav/sidenav.component.ts::program:SidenavComponent:noop', + 'frontend/src/app/sidenav/sidenav.component.ts::program:import', + 'frontend/src/app/sidenav/sidenav.component.ts::program:onToggleSidenav', + 'frontend/src/app/sidenav/sidenav.component.ts::program:require', + 'frontend/src/app/sidenav/sidenav.component.ts::program:startHackingInstructorFor', + 'module.startHackingInstructorFor'], + 'frontend/src/app/sidenav/sidenav.component.ts::program:SidenavComponent': ['applicationName', + 'getApplicationDetails', + 'getScoreBoardStatus', + 'getUserDetails', + 'goToDataErasurePage', + 'goToProfilePage', + 'isAccounting', + 'isLoggedIn', + 'isShowing', + 'logout', + 'ngOnInit', + 'noop', + 'offerScoreBoardTutorial', + 'onToggleSidenav', + 'scoreBoardLink$', + 'scoreBoardVisible', + 'showGitHubLink', + 'showOrdersSubmenu', + 'showPrivacySubmenu', + 'sidenavToggle', + 'startHackingInstructor', + 'userEmail', + 'version'], + 'frontend/src/app/token-sale/token-sale.component.ts': ['console.log', + 'frontend/src/app/token-sale/token-sale.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-brands-svg-icons").faBitcoin', + 'require("@fortawesome/free-regular-svg-icons").faCommentAlt', + 'require("@fortawesome/free-regular-svg-icons").faComments', + 'require("@fortawesome/free-solid-svg-icons").faCommentAlt', + 'require("@fortawesome/free-solid-svg-icons").faComments', + 'require("@fortawesome/free-solid-svg-icons").faGraduationCap', + 'require("@fortawesome/free-solid-svg-icons").faUniversity'], + 'frontend/src/app/token-sale/token-sale.component.ts::program:TokenSaleComponent': ['altcoinName', + 'ngOnInit'], + 'frontend/src/app/track-result/track-result.component.ts': ['MatTableDataSource', + 'frontend/src/app/track-result/track-result.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faHome', + 'require("@fortawesome/free-solid-svg-icons").faSync', + 'require("@fortawesome/free-solid-svg-icons").faTruck', + 'require("@fortawesome/free-solid-svg-icons").faTruckLoading', + 'require("@fortawesome/free-solid-svg-icons").faWarehouse'], + 'frontend/src/app/track-result/track-result.component.ts::program:Status': ['Delivered', + 'New', + 'Packing', + 'Transit'], + 'frontend/src/app/track-result/track-result.component.ts::program:TrackResultComponent': ['Status', + 'dataSource', + 'displayedColumns', + 'ngOnInit', + 'orderId', + 'results', + 'status'], + 'frontend/src/app/two-factor-auth-enter/two-factor-auth-enter.component.ts': ['Date', + 'UntypedFormControl', + 'UntypedFormGroup', + 'Validators.maxLength', + 'Validators.minLength', + 'Validators.pattern', + 'expires.getHours', + 'expires.setHours', + 'frontend/src/app/two-factor-auth-enter/two-factor-auth-enter.component.ts::program:TokenEnterFormFields:authentication.bid?.toString', + 'frontend/src/app/two-factor-auth-enter/two-factor-auth-enter.component.ts::program:TokenEnterFormFields:require', + 'frontend/src/app/two-factor-auth-enter/two-factor-auth-enter.component.ts::program:TokenEnterFormFields:setTimeout', + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faUnlockAlt'], + 'frontend/src/app/two-factor-auth-enter/two-factor-auth-enter.component.ts::program:TokenEnterFormFields': ['token'], + 'frontend/src/app/two-factor-auth-enter/two-factor-auth-enter.component.ts::program:TwoFactorAuthEnterComponent': ['errored', + 'twoFactorForm', + 'verify'], + 'frontend/src/app/two-factor-auth/two-factor-auth.component.ts': ['UntypedFormControl', + 'UntypedFormGroup', + 'Validators.pattern', + '_tmp_15.push', + 'frontend/src/app/two-factor-auth/two-factor-auth.component.ts::program:TwoFactorAuthComponent:updateStatus', + 'frontend/src/app/two-factor-auth/two-factor-auth.component.ts::program:require', + "frontend/src/app/two-factor-auth/two-factor-auth.component.ts::program:this.twoFactorDisableForm.get('passwordControl')?.markAsPristine", + "frontend/src/app/two-factor-auth/two-factor-auth.component.ts::program:this.twoFactorSetupForm.get('initalTokenControl')?.markAsPristine", + "frontend/src/app/two-factor-auth/two-factor-auth.component.ts::program:this.twoFactorSetupForm.get('passwordControl')?.markAsPristine", + 'library.add', + 'require("@angular/forms").Validators', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faSave', + 'require("@fortawesome/free-solid-svg-icons").faUnlockAlt', + 'this.configurationService.getApplicationConfiguration', + 'this.twoFactorAuthService.status'], + 'frontend/src/app/two-factor-auth/two-factor-auth.component.ts::program:TwoFactorAuthComponent': ['appName', + 'data', + 'disable', + 'errored', + 'ngOnInit', + 'setup', + 'setupStatus', + 'setupToken', + 'totpSecret', + 'totpUrl', + 'twoFactorDisableForm', + 'twoFactorSetupForm', + 'updateStatus'], + 'frontend/src/app/user-details/user-details.component.ts': ['console.log', + 'frontend/src/app/user-details/user-details.component.ts::program:require', + 'library.add', + 'require("@fortawesome/fontawesome-svg-core").library', + 'require("@fortawesome/free-solid-svg-icons").faArrowCircleLeft'], + 'frontend/src/app/user-details/user-details.component.ts::program:UserDetailsComponent': ['ngOnInit', + 'user'], + 'frontend/src/app/wallet-web3/wallet-web3.component.ts': ['.await', + 'connect', + 'console.error', + 'contract.balanceOf', + 'contract.ethdeposit', + 'contract.withdraw', + 'ethers.Contract', + 'ethers.Contract:ethdeposit', + 'ethers.providers.Web3Provider', + 'ethers.utils.formatEther', + 'ethers.utils.parseEther', + 'frontend/src/app/wallet-web3/wallet-web3.component.ts::program:WalletWeb3Component:getUserEthBalance', + 'frontend/src/app/wallet-web3/wallet-web3.component.ts::program:WalletWeb3Component:handleAuth', + 'frontend/src/app/wallet-web3/wallet-web3.component.ts::program:require', + 'provider.getSigner', + 'this.inputAmount.toString', + 'transaction.wait'], + 'frontend/src/app/wallet-web3/wallet-web3.component.ts::program:WalletWeb3Component': ['challengeSolved', + 'depositETH', + 'errorMessage', + 'getUserEthBalance', + 'handleAuth', + 'handleChainChanged', + 'inputAmount', + 'metamaskAddress', + 'mintButtonDisabled', + 'myBEEBalance', + 'ngOnInit', + 'session', + 'successResponse', + 'userData', + 'walletBalance', + 'withdrawETH'], + 'frontend/src/app/wallet-web3/wallet-web3.module.ts': ['.getContainerElement', + 'RouterModule.forChild', + '_tmp_3.push', + '_tmp_4.push', + '_tmp_5.push', + 'configurationService.getApplicationConfiguration', + 'frontend/src/app/wallet-web3/wallet-web3.module.ts::program:require', + 'require("./wallet-web3.component").WalletWeb3Component', + 'require("@angular/common").CommonModule', + 'require("@angular/core").CUSTOM_ELEMENTS_SCHEMA', + 'require("@angular/forms").FormsModule', + 'require("@angular/forms").ReactiveFormsModule', + 'require("@angular/material/button").MatButtonModule', + 'require("@angular/material/card").MatCardModule', + 'require("@angular/material/input").MatInputModule', + 'require("@angular/material/snack-bar").MatSnackBarModule', + 'require("@angular/router").RouterModule', + 'require("@ngx-translate/core").TranslateModule'], + 'frontend/src/app/wallet/wallet.component.ts': ['UntypedFormControl', + 'Validators.max', + 'Validators.min', + 'console.log', + 'frontend/src/app/wallet/wallet.component.ts::program:require', + 'parseFloat', + 'require("@angular/forms").Validators'], + 'frontend/src/app/wallet/wallet.component.ts::program:WalletComponent': ['balance', + 'balanceControl', + 'continue', + 'ngOnInit'], + 'frontend/src/app/web3-sandbox/web3-sandbox.component.ts': ['.filter', + '.await', + '.fieldAccess', + 'Array<{ name: ' + 'string, type: ' + 'string }>:map', + 'Object.keys', + 'connect', + 'console.log', + 'contract.deployed', + 'ethers.Contract', + 'ethers.Contract:deployed', + 'ethers.ContractFactory', + 'ethers.ContractFactory:deploy', + 'ethers.providers.Web3Provider', + 'factory.deploy', + 'frontend/src/app/web3-sandbox/web3-sandbox.component.ts::program:Web3SandboxComponent:getInputHints', + 'frontend/src/app/web3-sandbox/web3-sandbox.component.ts::program:Web3SandboxComponent:handleAuth', + 'frontend/src/app/web3-sandbox/web3-sandbox.component.ts::program:Web3SandboxComponent:parseInputValue', + 'frontend/src/app/web3-sandbox/web3-sandbox.component.ts::program:require', + 'inputs.map', + 'provider.getSigner', + 'solidity-browser-compiler:solidityCompiler', + 'this.contractFunctions.indexOf', + 'this.parseInputValue', + 'value.toLowerCase', + 'value.trim'], + 'frontend/src/app/web3-sandbox/web3-sandbox.component.ts::program:Web3SandboxComponent': ['code', + 'commonGweiValue', + 'compileAndFetchContracts', + 'compiledContracts', + 'compilerErrors', + 'compilerVersions', + 'contractFunctions', + 'contractNames', + 'deploySelectedContract', + 'deployedContractAddress', + 'editorOptions', + 'getInputHints', + 'handleAuth', + 'handleChainChanged', + 'invokeFunction', + 'invokeOutput', + 'metamaskAddress', + 'ngOnInit', + 'parseInputValue', + 'selectedCompilerVersion', + 'selectedContractName', + 'session', + 'userData'], + 'frontend/src/app/web3-sandbox/web3-sandbox.module.ts': ['.getContainerElement', + 'RouterModule.forChild', + '_tmp_3.push', + '_tmp_4.push', + '_tmp_5.push', + 'configurationService.getApplicationConfiguration', + 'frontend/src/app/web3-sandbox/web3-sandbox.module.ts::program:require', + 'require("./web3-sandbox.component").Web3SandboxComponent', + 'require("@angular/common").CommonModule', + 'require("@angular/core").CUSTOM_ELEMENTS_SCHEMA', + 'require("@angular/forms").FormsModule', + 'require("@angular/forms").ReactiveFormsModule', + 'require("@angular/material/button").MatButtonModule', + 'require("@angular/material/card").MatCardModule', + 'require("@angular/material/input").MatInputModule', + 'require("@angular/material/snack-bar").MatSnackBarModule', + 'require("@angular/router").RouterModule', + 'require("@ctrl/ngx-codemirror").CodemirrorModule', + 'require("@ngx-translate/core").TranslateModule'], + 'frontend/src/app/welcome-banner/welcome-banner.component.ts': ['Date', + 'console.log', + 'expires.getFullYear', + 'expires.setFullYear', + 'frontend/src/app/welcome-banner/welcome-banner.component.ts::program:WelcomeBannerComponent:closeWelcome', + 'frontend/src/app/welcome-banner/welcome-banner.component.ts::program:import', + 'frontend/src/app/welcome-banner/welcome-banner.component.ts::program:require', + 'frontend/src/app/welcome-banner/welcome-banner.component.ts::program:startHackingInstructorFor', + 'module.startHackingInstructorFor'], + 'frontend/src/app/welcome-banner/welcome-banner.component.ts::program:WelcomeBannerComponent': ['closeWelcome', + 'message', + 'ngOnInit', + 'showDismissBtn', + 'showHackingInstructor', + 'startHackingInstructor', + 'title', + 'welcomeBannerStatusCookieKey'], + 'frontend/src/app/welcome/welcome.component.ts': ['console.log', + 'frontend/src/app/welcome/welcome.component.ts::program:require'], + 'frontend/src/app/welcome/welcome.component.ts::program:WelcomeComponent': ['ngOnInit', + 'welcomeBannerStatusCookieKey'], + 'frontend/src/assets/private/EffectComposer.js': ['.fieldAccess', + '.indexAccess', + 'THREE.WebGLRenderTarget', + '__ecma.Boolean:render', + '__ecma.Number:clone', + 'context.stencilFunc', + 'frontend/src/assets/private/EffectComposer.js::program:reset', + 'frontend/src/assets/private/EffectComposer.js::program:swapBuffers', + 'pass.render', + 'renderTarget.clone', + 'this.copyPass.render', + 'this.passes.push', + 'this.passes.splice', + 'this.renderTarget1.clone', + 'this.reset'], + 'frontend/src/assets/private/MaskPass.js': ['.fieldAccess', + 'context.clearStencil', + 'context.colorMask', + 'context.depthMask', + 'context.disable', + 'context.enable', + 'context.stencilFunc', + 'context.stencilOp', + 'renderer.render'], + 'frontend/src/assets/private/OrbitControls.js': ['.assignmentDivision', + '.assignmentMinus', + '.assignmentMultiplication', + '.fieldAccess', + '.multiplication', + 'Math.cos', + 'Math.min', + 'Math.sin', + 'Object.create', + 'THREE.Vector2', + 'THREE.Vector3', + '__ecma.Boolean:copy', + '__ecma.Boolean:distanceTo', + '__ecma.Boolean:subVectors', + '__ecma.Math:atan2', + '__ecma.Math:cos', + '__ecma.Math:max', + '__ecma.Math:pow', + '__ecma.Math:sin', + '__ecma.Math:sqrt', + '__ecma.Math:tan', + '__ecma.Number:length', + '__ecma.Number:preventDefault', + '__ecma.Number:stopPropagation', + 'dollyDelta.subVectors', + 'dollyEnd.set', + 'dollyStart.copy', + 'dollyStart.set', + 'event.preventDefault', + 'event.stopPropagation', + 'frontend/src/assets/private/OrbitControls.js::program:anonymous:anonymous4:add', + 'frontend/src/assets/private/OrbitControls.js::program:anonymous:anonymous4:set', + 'frontend/src/assets/private/OrbitControls.js::program:anonymous:getAutoRotationAngle', + 'frontend/src/assets/private/OrbitControls.js::program:anonymous:getZoomScale', + 'frontend/src/assets/private/OrbitControls.js::program:dispatchEvent', + 'frontend/src/assets/private/OrbitControls.js::program:dollyIn', + 'frontend/src/assets/private/OrbitControls.js::program:dollyOut', + 'frontend/src/assets/private/OrbitControls.js::program:pan', + 'frontend/src/assets/private/OrbitControls.js::program:panLeft', + 'frontend/src/assets/private/OrbitControls.js::program:panUp', + 'frontend/src/assets/private/OrbitControls.js::program:rotateLeft', + 'frontend/src/assets/private/OrbitControls.js::program:rotateUp', + 'frontend/src/assets/private/OrbitControls.js::program:update', + 'lastPosition.copy', + 'lastPosition.distanceTo', + 'offset.length', + 'pan.add', + 'pan.set', + 'panDelta.subVectors', + 'panEnd.set', + 'panOffset.multiplyScalar', + 'panOffset.set', + 'panStart.copy', + 'panStart.set', + 'position.clone', + 'position.copy', + 'rotateDelta.subVectors', + 'rotateEnd.set', + 'rotateStart.copy', + 'rotateStart.set', + 'scope.pan', + 'this.target.add'], + 'frontend/src/assets/private/RenderPass.js': ['renderer.getClearAlpha', + 'renderer.getClearColor', + 'renderer.render', + 'renderer.setClearColor'], + 'frontend/src/assets/private/ShaderPass.js': ['renderer.render'], + 'frontend/src/confetti/index.ts': ['Document:createElement', + 'HTMLCanvasElement:remove', + 'canvas-confetti:confetti:create', + 'canvas.remove', + 'confetti.create', + 'document.body.appendChild', + 'frontend/src/confetti/index.ts::program:require', + 'frontend/src/confetti/index.ts::program:setTimeout', + 'frontend/src/confetti/index.ts::program:shoot', + 'frontend/src/confetti/index.ts::program:timeout', + 'setTimeout'], + 'frontend/src/hacking-instructor/challenges/bonusPayload.ts': ['frontend/src/hacking-instructor/challenges/bonusPayload.ts::program:require'], + 'frontend/src/hacking-instructor/challenges/codingChallenges.ts': ['frontend/src/hacking-instructor/challenges/codingChallenges.ts::program:require'], + 'frontend/src/hacking-instructor/challenges/domXss.ts': ['frontend/src/hacking-instructor/challenges/domXss.ts::program:require'], + 'frontend/src/hacking-instructor/challenges/forgedFeedback.ts': ['frontend/src/hacking-instructor/challenges/forgedFeedback.ts::program:require'], + 'frontend/src/hacking-instructor/challenges/loginBender.ts': ['frontend/src/hacking-instructor/challenges/loginBender.ts::program:require'], + 'frontend/src/hacking-instructor/challenges/loginJim.ts': ['frontend/src/hacking-instructor/challenges/loginJim.ts::program:require'], + 'frontend/src/hacking-instructor/challenges/passwordStrength.ts': ['frontend/src/hacking-instructor/challenges/passwordStrength.ts::program:require'], + 'frontend/src/hacking-instructor/challenges/privacyPolicy.ts': ['frontend/src/hacking-instructor/challenges/privacyPolicy.ts::program:require'], + 'frontend/src/hacking-instructor/challenges/scoreBoard.ts': ['frontend/src/hacking-instructor/challenges/scoreBoard.ts::program:require'], + 'frontend/src/hacking-instructor/challenges/viewBasket.ts': ['frontend/src/hacking-instructor/challenges/viewBasket.ts::program:require'], + 'frontend/src/hacking-instructor/helpers/helpers.ts': ['.await', + '.indexAccess', + '.notNullAssert', + 'Document:querySelector', + 'HTMLImageElement:addEventListener', + 'Image', + 'Object.defineProperty', + '__ecma.String:replace', + '__whatwg.console:clear', + '__whatwg.console:dir', + 'console.dir', + 'document.querySelector', + 'element.addEventListener', + 'fetch', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:resolve', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:setTimeout', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:sleep', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitForAngularRouteToBeVisited', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitForDevTools', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitForElementToGetClicked', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitForElementsInnerHtmlToBe', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitForInputToHaveValue', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitForInputToNotBeEmpty', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitForInputToNotHaveValueAndNotBeEmpty', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitForLogIn', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitForLogOut', + 'frontend/src/hacking-instructor/helpers/helpers.ts::program:waitInMs', + 'res.json', + 'setTimeout', + 'value.replace', + 'value.toLowerCase'], + 'frontend/src/hacking-instructor/index.ts': ['ChallengeHint:resolved', + 'ChallengeInstruction[]:find', + 'Document:createElement', + 'Document:querySelector', + 'HTMLDivElement:appendChild', + 'HTMLElement:addEventListener', + 'HTMLElement:remove', + 'Promise.race', + 'Promise[]:push', + '_tmp_4.push', + 'elem.appendChild', + 'element.addEventListener', + 'element.remove', + 'element.scrollIntoView', + 'frontend/src/hacking-instructor/index.ts::program:ChallengeHint:require', + 'frontend/src/hacking-instructor/index.ts::program:ChallengeHint:resolve', + 'frontend/src/hacking-instructor/index.ts::program:ChallengeHint:resolved', + 'frontend/src/hacking-instructor/index.ts::program:loadHint', + 'frontend/src/hacking-instructor/index.ts::program:waitForCancel', + 'frontend/src/hacking-instructor/index.ts::program:waitForDoubleClick', + 'relAnchor.appendChild', + 'require("./challenges/bonusPayload").BonusPayloadInstruction', + 'require("./challenges/codingChallenges").CodingChallengesInstruction', + 'require("./challenges/domXss").DomXssInstruction', + 'require("./challenges/forgedFeedback").ForgedFeedbackInstruction', + 'require("./challenges/loginAdmin").LoginAdminInstruction', + 'require("./challenges/loginBender").LoginBenderInstruction', + 'require("./challenges/loginJim").LoginJimInstruction', + 'require("./challenges/passwordStrength").PasswordStrengthInstruction', + 'require("./challenges/privacyPolicy").PrivacyPolicyInstruction', + 'require("./challenges/scoreBoard").ScoreBoardInstruction', + 'require("./challenges/viewBasket").ViewBasketInstruction', + 'snarkdown:snarkdown', + 'target.parentElement.insertBefore', + 'waitForDoubleClick', + 'wrapper.appendChild'], + 'frontend/src/hacking-instructor/index.ts::program:ChallengeHint': ['fixture', + 'fixtureAfter', + 'resolved', + 'text', + 'unskippable'], + 'frontend/src/hacking-instructor/index.ts::program:ChallengeInstruction': ['hints', + 'name'], + 'frontend/src/hacking-instructor/index.ts::program:hasInstructions:anonymous:_anon_cdecl': ['name'], + 'frontend/src/hacking-instructor/index.ts::program:startHackingInstructorFor:anonymous:_anon_cdecl': ['name'], + 'frontend/src/hacking-instructor/tutorialUnavailable.ts': ['frontend/src/hacking-instructor/tutorialUnavailable.ts::program:require'], + 'frontend/src/main.ts': ['@angular/core:enableProdMode', + '@angular/platform-browser-dynamic:platformBrowserDynamic', + 'console.log', + 'frontend/src/main.ts::program:require', + 'platformBrowserDynamic', + 'require("./app/app.module").AppModule'], + 'frontend/src/polyfills.ts': ['frontend/src/polyfills.ts::program:require'], + 'lib/accuracy.ts': ['.division', + 'Object.entries', + 'accuracy.toString', + 'calculateAccuracy', + 'colors.cyan', + 'colors.green', + 'colors.red', + 'colors.yellow', + 'colors/safe:colors:cyan', + 'colors/safe:colors:green', + 'colors/safe:colors:red', + 'colors/safe:colors:yellow', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/node_modules/winston/index").Logger:info', + 'lib/accuracy.ts::program:calculateAccuracy', + 'lib/accuracy.ts::program:require', + 'lib/accuracy.ts::program:storeVerdict', + 'lib/accuracy.ts::program:totalAccuracy', + 'logger.info', + 'storeVerdict'], + 'lib/antiCheat.ts': ['.await', + '.division', + '.fieldAccess', + 'Date', + 'Map:entries', + 'Map:get', + 'Map:has', + 'Math.round', + 'areCoupled', + 'checkForIdenticalSolvedChallenge', + 'codingChallenges.entries', + 'codingChallenges.get', + 'codingChallenges.has', + 'colors.cyan', + 'colors.green', + 'colors.red', + 'colors.yellow', + 'config.get', + 'isTrivial', + 'lib/antiCheat.ts::program:areCoupled', + 'lib/antiCheat.ts::program:calculateCheatScore', + 'lib/antiCheat.ts::program:calculateFindItCheatScore', + 'lib/antiCheat.ts::program:calculateFixItCheatScore', + 'lib/antiCheat.ts::program:checkForIdenticalSolvedChallenge', + 'lib/antiCheat.ts::program:checkForPreSolveInteractions', + 'lib/antiCheat.ts::program:coupledChallenges[challenge.key]?.indexOf', + 'lib/antiCheat.ts::program:coupledChallenges[previousChallenge.key]?.indexOf', + 'lib/antiCheat.ts::program:isTrivial', + 'lib/antiCheat.ts::program:next', + 'lib/antiCheat.ts::program:previous', + 'lib/antiCheat.ts::program:require', + 'lib/antiCheat.ts::program:totalCheatScore', + 'logger.info', + 'median', + 'solves.map', + 'solves.push', + 'timestamp.getTime', + 'utils.endsWith', + 'utils:utils:endsWith'], + 'lib/antiCheat.ts::program:anonymous4:anonymous:_anon_cdecl': ['cheatScore'], + 'lib/antiCheat.ts::program:anonymous:anonymous:_anon_cdecl': ['url'], + 'lib/botUtils.ts': ['.filter', + '.indexAccess', + '__ecma.Boolean:join', + '__ecma.Boolean:partial_ratio', + 'challengeUtils.solveIf', + 'fuzz.partial_ratio', + 'lib/botUtils.ts::program:require', + 'products\r\n .filter', + 'queriedProducts.join', + 'security.generateCoupon'], + 'lib/challengeUtils.ts': ['../models/challenge:ChallengeModel:update', + '.conditional', + '.indexAccess', + 'ChallengeModel.update', + 'Entities', + 'Object.prototype.hasOwnProperty.call', + '__ecma.Boolean:find', + '__ecma.Boolean:push', + 'accuracy.calculateFindItAccuracy', + 'accuracy.calculateFixItAccuracy', + 'accuracy.storeFindItVerdict', + 'accuracy.storeFixItVerdict', + 'accuracy:accuracy:calculateFindItAccuracy', + 'accuracy:accuracy:calculateFixItAccuracy', + 'accuracy:accuracy:storeFindItVerdict', + 'accuracy:accuracy:storeFixItVerdict', + 'calculateCheatScore', + 'calculateFindItCheatScore', + 'calculateFixItCheatScore', + 'challenge.save', + 'colors.cyan', + 'colors.green', + 'colors.grey', + 'colors.red', + 'colors/safe:colors:grey', + 'config.get', + 'config:config:get', + 'entities.decode', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/node_modules/winston/index").Logger:warn', + 'lib/antiCheat.ts::program:calculateCheatScore', + 'lib/challengeUtils.ts::program:anonymous3:_anon_cdecl:save', + 'lib/challengeUtils.ts::program:criteria', + 'lib/challengeUtils.ts::program:notSolved', + 'lib/challengeUtils.ts::program:require', + 'lib/challengeUtils.ts::program:sendCodingChallengeNotification', + 'lib/challengeUtils.ts::program:sendNotification', + 'lib/challengeUtils.ts::program:solve', + 'logger.error', + 'logger.info', + 'logger.warn', + 'notSolved', + 'notifications.find', + 'notifications.push', + 'require("../models/challenge").ChallengeModel', + "require('../data/datacache').challenges", + "require('../data/datacache').notifications", + 'sanitize-html:sanitizeHtml', + 'sendNotification', + 'solve', + 'utils.ctfFlag', + 'utils.getErrorMessage', + 'utils:utils:ctfFlag', + 'utils:utils:getErrorMessage', + 'webhook.notify', + 'webhook:webhook:notify'], + 'lib/challengeUtils.ts::program:anonymous1:anonymous:_anon_cdecl': ['difficulty', + 'key', + 'name'], + 'lib/challengeUtils.ts::program:anonymous2:_anon_cdecl': ['description', + 'difficulty', + 'key', + 'name'], + 'lib/challengeUtils.ts::program:anonymous2:anonymous:_anon_cdecl': ['key'], + 'lib/challengeUtils.ts::program:anonymous3:_anon_cdecl': ['codingChallengeStatus', + 'key'], + 'lib/codingChallenges.ts': ['(...items: ANY[]) => __ecma.Number:push', + '.await', + '.fieldAccess', + 'CachedCodeChallenge>', + 'Map', + 'Map:set', + 'Object.freeze', + '[...fileContent.matchAll', + '__ecma.Array.factory', + '__ecma.Null:set', + '__ecma.String:matchAll', + '__ecma.String:replace', + '__ecma.String:split', + '__ecma.String[]:map', + '_internalCodeChallenges.set', + 'challenges.map', + 'code.includes', + 'fileContent.matchAll', + 'files.map', + 'findFilesWithCodeChallenges', + 'fs.lstat', + 'fs.readFile', + 'fs.readdir', + 'fs/promises:fs:lstat', + 'fs/promises:fs:readFile', + 'fs/promises:fs:readdir', + 'getCodingChallengeFromFileContent', + 'lib/codingChallenges.ts::program:CachedCodeChallenge:match.groups?.challenges?.split', + 'lib/codingChallenges.ts::program:CachedCodeChallenge:require', + 'lib/codingChallenges.ts::program:CachedCodeChallenge:super', + 'lib/codingChallenges.ts::program:findFilesWithCodeChallenges', + 'lib/codingChallenges.ts::program:getCodeChallenges', + 'lib/codingChallenges.ts::program:getCodeChallengesFromFile', + 'lib/codingChallenges.ts::program:getCodingChallengeFromFileContent', + 'logger.warn', + 'matches.push', + 'neutralLines.push', + 'path.resolve', + 'snippet.replace', + 'snippet.split', + 'snippet.trim', + 'source.match', + 'super', + 'vulnLines.push'], + 'lib/codingChallenges.ts::program:BrokenBoundary': ['message', 'name'], + 'lib/codingChallenges.ts::program:CachedCodeChallenge': ['neutralLines', + 'snippet', + 'vulnLines'], + 'lib/codingChallenges.ts::program:FileMatch': ['content', 'path'], + 'lib/insecurity.ts': ['(data: __ecma.String) => ANY:update', + '(token: __ecma.String, secret: __ecma.String) => ' + '__ecma.Boolean:decode', + '.addition', + '.conditional', + '.indexAccess', + '.logicalOr', + 'Date', + 'Set', + '__ecma.Boolean:toString', + '__ecma.String:indexOf', + 'authenticatedUsers.get', + 'authenticatedUsers.put', + 'coupon.match', + 'crypto.createHash', + 'crypto.createHmac', + 'crypto:crypto:createHash', + 'crypto:crypto:createHmac', + 'decoded.toString', + 'express-jwt:expressJwt', + 'express:Response:cookie', + 'express:Response:status', + 'fs.readFileSync', + 'fs:fs:readFileSync', + 'hmac.update', + 'input.replace', + 'jsonwebtoken:jwt:sign', + 'jsonwebtoken:jwt:verify', + 'jws.decode', + 'jwt.sign', + 'jwt.verify', + 'lib/insecurity.ts::program:IAuthenticatedUsers:get', + 'lib/insecurity.ts::program:IAuthenticatedUsers:jws.verify ' + 'as ((token: string, secret: string) => boolean)', + 'lib/insecurity.ts::program:IAuthenticatedUsers:next', + 'lib/insecurity.ts::program:IAuthenticatedUsers:put', + 'lib/insecurity.ts::program:IAuthenticatedUsers:require', + 'lib/insecurity.ts::program:appendUserId', + 'lib/insecurity.ts::program:authorize', + 'lib/insecurity.ts::program:cutOffPoisonNullByte', + 'lib/insecurity.ts::program:decode', + 'lib/insecurity.ts::program:deluxeToken', + 'lib/insecurity.ts::program:denyAll', + 'lib/insecurity.ts::program:discountFromCoupon', + 'lib/insecurity.ts::program:generateCoupon', + 'lib/insecurity.ts::program:hasValidFormat', + 'lib/insecurity.ts::program:hash', + 'lib/insecurity.ts::program:hmac', + 'lib/insecurity.ts::program:isAccounting', + 'lib/insecurity.ts::program:isAuthorized', + 'lib/insecurity.ts::program:isDeluxe', + 'lib/insecurity.ts::program:isRedirectAllowed', + 'lib/insecurity.ts::program:sanitizeFilename', + 'lib/insecurity.ts::program:sanitizeHtml', + 'lib/insecurity.ts::program:sanitizeLegacy', + 'lib/insecurity.ts::program:sanitizeSecure', + 'lib/insecurity.ts::program:updateAuthenticatedUsers', + 'lib/insecurity.ts::program:verify', + 'parseInt', + 'res.cookie', + 'res.status', + 'sanitize-filename:sanitizeFilenameLib', + 'sanitize-html:sanitizeHtmlLib', + 'sanitizeFilenameLib', + 'sanitizeHtml', + 'sanitizeHtmlLib', + 'sanitizeSecure', + 'str.indexOf', + 'str.substring', + 'this.get', + 'this.put', + 'url.includes', + 'utils.contains', + 'utils.jwtFrom', + 'utils.toMMMYY', + 'utils.unquote', + 'utils:utils:contains', + 'utils:utils:jwtFrom', + 'utils:utils:toMMMYY', + 'utils:utils:unquote', + 'z85.decode', + 'z85.encode', + 'z85:z85:decode', + 'z85:z85:encode'], + 'lib/insecurity.ts::program:IAuthenticatedUsers': ['from', + 'get', + 'idMap', + 'put', + 'tokenMap', + 'tokenOf', + 'updateFrom'], + 'lib/insecurity.ts::program:ResponseWithUser': ['bid', + 'data', + 'exp', + 'iat', + 'status'], + 'lib/insecurity.ts::program:anonymous12:_anon_cdecl': ['bid', + 'data', + 'exp', + 'iat', + 'status'], + 'lib/insecurity.ts::program:anonymous17:_anon_cdecl': ['headers'], + 'lib/is-docker.ts': ['fs.readFileSync', + 'fs.statSync', + 'fs:fs:statSync', + 'lib/is-docker.ts::program:hasDockerCGroup', + 'lib/is-docker.ts::program:hasDockerEnv', + 'lib/is-docker.ts::program:isDocker', + 'lib/is-docker.ts::program:require'], + 'lib/is-heroku.ts': ['.in'], + 'lib/is-windows.ts': ['__ecma.String:test', + 'lib/is-windows.ts::program:isWindows'], + 'lib/logger.ts': ['lib/logger.ts::program:require', + 'winston.createLogger', + 'winston:winston:createLogger'], + 'lib/noUpdate.ts': ['(callbackfn: (value: unknown, index: __ecma.Number, ' + 'array: unknown[]) => void, thisArg?: ANY) => ' + 'void:forEach', + '(callbackfn: (value: unknown, index: __ecma.Number, ' + 'array: unknown[]) => void, thisArg?: ANY) => void:push', + '.indexAccess', + 'ArrayConstructor:from', + 'ValidationErrorItemType[]:push', + '__ecma.Array.factory', + '__ecma.String[]:forEach', + 'changedKeys.forEach', + 'changedKeys.push', + 'instanceChanged.forEach', + 'lib/noUpdate.ts::program:ExtendedModel:require', + 'lib/noUpdate.ts::program:makeKeyNonUpdatable', + 'model.addHook', + 'sequelize/types:Model:addHook', + 'validationErrors.push'], + 'lib/noUpdate.ts::program:ExtendedModel': ['_changed', + '_previousDataValues', + 'rawAttributes'], + 'lib/noUpdate.ts::program:ExtendedValidationOptions': ['validate'], + 'lib/startup/cleanupFtpFolder.ts': ['../utils:utils:getErrorMessage', + 'files.forEach', + 'fs-extra:remove', + 'fs.remove', + 'glob', + 'lib/startup/cleanupFtpFolder.ts::program:require', + 'logger.warn', + 'path.resolve', + 'string[]:forEach', + 'utils.getErrorMessage'], + 'lib/startup/customizeApplication.ts': ['../utils:utils:downloadToFile', + '../utils:utils:extractFilename', + '../utils:utils:isUrl', + 'config.get', + 'config.get', + 'fs.copyFileSync', + 'fs:copyFileSync', + 'lib/startup/customizeApplication.ts::program:customizeChatbotAvatar', + 'lib/startup/customizeApplication.ts::program:customizeCookieConsentBanner', + 'lib/startup/customizeApplication.ts::program:customizeFavicon', + 'lib/startup/customizeApplication.ts::program:customizeHackingInstructorAvatar', + 'lib/startup/customizeApplication.ts::program:customizeLogo', + 'lib/startup/customizeApplication.ts::program:customizePromotionSubtitles', + 'lib/startup/customizeApplication.ts::program:customizePromotionVideo', + 'lib/startup/customizeApplication.ts::program:customizeTheme', + 'lib/startup/customizeApplication.ts::program:customizeTitle', + 'lib/startup/customizeApplication.ts::program:require', + 'lib/startup/customizeApplication.ts::program:retrieveCustomFile', + 'replace', + 'utils.downloadToFile', + 'utils.extractFilename', + 'utils.isUrl'], + 'lib/startup/customizeEasterEgg.ts': ['config.get', + 'config.has', + 'config:config:get', + 'config:config:has', + 'lib/startup/customizeEasterEgg.ts::program:replaceImagePath', + 'lib/startup/customizeEasterEgg.ts::program:replaceThreeJsTitleTag', + 'lib/startup/customizeEasterEgg.ts::program:require', + 'replaceImagePath', + 'utils.downloadToFile', + 'utils.extractFilename', + 'utils.isUrl'], + 'lib/startup/registerWebsocketEvents.ts': ['../utils:utils:contains', + 'Array.isArray', + 'ArrayConstructor:isArray', + 'Server', + 'challengeUtils.solveIf', + 'config.get', + 'io.on', + 'lib/startup/registerWebsocketEvents.ts::program:data?.match', + 'lib/startup/registerWebsocketEvents.ts::program:registerWebsocketEvents', + 'lib/startup/registerWebsocketEvents.ts::program:require', + 'notifications.findIndex', + 'notifications.forEach', + 'notifications.splice', + "require('../../data/datacache').notifications", + 'security.isRedirectAllowed', + 'socket.emit', + 'socket.io:Server:on', + 'socket.on', + 'utils.contains'], + 'lib/startup/registerWebsocketEvents.ts::program:anonymous:anonymous:anonymous1:anonymous:_anon_cdecl': ['flag'], + 'lib/startup/restoreOverwrittenFilesWithOriginals.ts': ['.await', + '__ecma.String:resolve', + 'access', + 'copyFile', + 'filename.lastIndexOf', + 'filename.substring', + 'files.map', + 'lib/startup/restoreOverwrittenFilesWithOriginals.ts::program:access', + 'lib/startup/restoreOverwrittenFilesWithOriginals.ts::program:copyFile', + 'lib/startup/restoreOverwrittenFilesWithOriginals.ts::program:exists', + 'lib/startup/restoreOverwrittenFilesWithOriginals.ts::program:require', + 'logger.warn', + 'path.resolve', + 'utils.getErrorMessage', + 'utils:getErrorMessage'], + 'lib/startup/validateChatBot.ts': ['checkIntentWithFunctionHandlerExists', + 'colors.bold', + 'colors.green', + 'colors.italic', + 'colors.red', + 'colors.yellow', + 'colors/safe:colors:bold', + 'colors/safe:colors:italic', + 'config.get', + 'lib/startup/validateChatBot.ts::program:checkIntentWithFunctionHandlerExists', + 'lib/startup/validateChatBot.ts::program:require', + 'lib/startup/validateChatBot.ts::program:validateChatBot', + 'logger.error', + 'logger.info', + 'logger.warn', + 'utils.extractFilename'], + 'lib/startup/validateChatBot.ts::program:anonymous:anonymous1:_anon_cdecl': ['action', + 'handler'], + 'lib/startup/validateDependencies.ts': ['check-dependencies', + 'colors.bold', + 'colors.green', + 'colors.red', + 'lib/startup/validateDependencies.ts::program:require', + 'logger.error', + 'logger.info', + 'logger.warn', + 'utils.getErrorMessage'], + 'lib/startup/validatePreconditions.ts': ['.fieldAccess', + '__ecma.String:substr', + 'check-internet-connected', + 'colors.bold', + 'colors.green', + 'colors.italic', + 'colors.red', + 'colors.yellow', + 'config.get', + 'lib/startup/validatePreconditions.ts::program:access', + 'lib/startup/validatePreconditions.ts::program:checkIfDomainReachable', + 'lib/startup/validatePreconditions.ts::program:checkIfPortIsAvailable', + 'lib/startup/validatePreconditions.ts::program:checkIfRequiredFileExists', + 'lib/startup/validatePreconditions.ts::program:checkIfRunningOnSupportedCPU', + 'lib/startup/validatePreconditions.ts::program:checkIfRunningOnSupportedNodeVersion', + 'lib/startup/validatePreconditions.ts::program:checkIfRunningOnSupportedOS', + 'lib/startup/validatePreconditions.ts::program:reject', + 'lib/startup/validatePreconditions.ts::program:require', + 'lib/startup/validatePreconditions.ts::program:resolve', + 'logger.error', + 'logger.info', + 'logger.warn', + 'path.resolve', + 'pathRelativeToProjectRoot.lastIndexOf', + 'pathRelativeToProjectRoot.substr', + 'port.toString', + 'portscanner.checkPortStatus', + 'portscanner:checkPortStatus', + 'process.exit', + 'process:exit', + 'reject', + 'semver.satisfies', + 'semver.validRange', + 'semver:satisfies', + 'semver:validRange', + 'supportedArch.includes', + 'supportedOS.includes'], + 'lib/utils.ts': ['(v: ANY) => void:close', + '(v: ANY) => void:write', + '/^Bearer$/i.test', + '.addition', + '.await', + '.indexAccess', + 'Date:getDate', + 'Date:getFullYear', + 'Date:getMonth', + 'JSON.stringify', + 'String', + '__ecma.Array.factory', + '__ecma.String:substring', + '_tmp_6.push', + 'any[]:push', + 'clarinet.parser', + 'clarinet:clarinet:parser', + 'config.get', + 'contains', + 'containsEscaped', + 'crypto.randomBytes', + 'crypto:crypto:randomBytes', + 'date.getDate', + 'date.getFullYear', + 'date.getMonth', + 'disabledEnv.includes', + 'download', + 'download:download', + 'element.replace', + 'endsWith', + 'file.indexOf', + 'file.substring', + 'fs.readFileSync', + 'fs.writeFileSync', + 'fs:fs:writeFileSync', + 'ipv6.substr', + 'is-heroku:isHeroku', + 'jsSHA', + 'jssha:jsSHA:getHMAC', + 'jssha:jsSHA:setHMACKey', + 'jssha:jsSHA:update', + 'lib/utils.ts::program:contains', + 'lib/utils.ts::program:containsEscaped', + 'lib/utils.ts::program:endsWith', + 'lib/utils.ts::program:getCtfKey', + 'lib/utils.ts::program:getErrorMessage', + 'lib/utils.ts::program:isGitpod', + 'lib/utils.ts::program:require', + 'lib/utils.ts::program:startsWith', + 'logger.warn', + 'parser.close', + 'parser.write', + 'result.push', + 'shaObj.getHMAC', + 'shaObj.setHMACKey', + 'shaObj.update', + 'startsWith', + 'str.includes', + 'str.indexOf', + 'str.replace', + 'str.substr', + 'str.substring', + 'string | __ecma.String[]:includes', + 'text.match', + 'undefined[]:push', + 'url.lastIndexOf', + 'url.substring', + 'year.toString'], + 'lib/utils.ts::program:anonymous17:_anon_cdecl': ['headers'], + 'lib/webhook.ts': ['.await', + '.conditional', + 'colors.bold', + 'colors.cyan', + 'colors.green', + 'colors.red', + 'config.get', + 'lib/webhook.ts::program:post', + 'lib/webhook.ts::program:require', + 'logger.info', + 'logger:logger:info', + 'os.hostname', + 'os.release', + 'os.type', + 'os:os:hostname', + 'os:os:release', + 'os:os:type', + 'post', + 'utils.ctfFlag', + 'utils.version', + 'utils:utils:version'], + 'lib/webhook.ts::program:anonymous:_anon_cdecl': ['key', 'name'], + 'models/address.ts': ['models/address.ts::program:Address::init', + 'models/address.ts::program:Address:init', + 'models/address.ts::program:AddressModelInit', + 'models/address.ts::program:require'], + 'models/address.ts::program:Address': ['UserId', + 'city', + 'country', + 'fullName', + 'id', + 'mobileNum', + 'state', + 'streetAddress', + 'zipCode'], + 'models/basket.ts': ['models/basket.ts::program:Basket::init', + 'models/basket.ts::program:Basket:init', + 'models/basket.ts::program:BasketModelInit', + 'models/basket.ts::program:require'], + 'models/basket.ts::program:Basket': ['Products', 'UserId', 'coupon', 'id'], + 'models/basketitem.ts': ['models/basketitem.ts::program:BasketItem::init', + 'models/basketitem.ts::program:BasketItem:init', + 'models/basketitem.ts::program:BasketItemModelInit', + 'models/basketitem.ts::program:require'], + 'models/basketitem.ts::program:BasketItem': ['BasketId', + 'ProductId', + 'id', + 'quantity'], + 'models/captcha.ts': ['models/captcha.ts::program:Captcha::init', + 'models/captcha.ts::program:Captcha:init', + 'models/captcha.ts::program:CaptchaModelInit', + 'models/captcha.ts::program:require'], + 'models/captcha.ts::program:Captcha': ['answer', 'captcha', 'captchaId'], + 'models/card.ts': ['models/card.ts::program:Card::init', + 'models/card.ts::program:Card:init', + 'models/card.ts::program:CardModelInit', + 'models/card.ts::program:require'], + 'models/card.ts::program:Card': ['UserId', + 'cardNum', + 'expMonth', + 'expYear', + 'fullName', + 'id'], + 'models/challenge.ts': ['models/challenge.ts::program:Challenge::init', + 'models/challenge.ts::program:Challenge:init', + 'models/challenge.ts::program:ChallengeModelInit', + 'models/challenge.ts::program:require'], + 'models/challenge.ts::program:Challenge': ['category', + 'codingChallengeStatus', + 'description', + 'difficulty', + 'disabledEnv', + 'hint', + 'hintUrl', + 'id', + 'key', + 'mitigationUrl', + 'name', + 'solved', + 'tags', + 'tutorialOrder'], + 'models/complaint.ts': ['models/complaint.ts::program:Complaint::init', + 'models/complaint.ts::program:Complaint:init', + 'models/complaint.ts::program:ComplaintModelInit', + 'models/complaint.ts::program:require'], + 'models/complaint.ts::program:Complaint': ['UserId', 'file', 'id', 'message'], + 'models/delivery.ts': ['models/delivery.ts::program:Delivery::init', + 'models/delivery.ts::program:Delivery:init', + 'models/delivery.ts::program:DeliveryModelInit', + 'models/delivery.ts::program:require'], + 'models/delivery.ts::program:Delivery': ['deluxePrice', + 'eta', + 'icon', + 'id', + 'name', + 'price'], + 'models/feedback.ts': ['challengeUtils.solveIf', + 'challengeUtils:solveIf', + 'lib/insecurity.ts::program:sanitizeHtml', + 'models/feedback.ts::program:Feedback::init', + 'models/feedback.ts::program:Feedback:init', + 'models/feedback.ts::program:FeedbackModelInit', + 'models/feedback.ts::program:require', + 'models/feedback.ts::program:setDataValue', + 'security.sanitizeHtml', + 'security.sanitizeSecure', + 'this.setDataValue', + 'utils.contains', + 'utils.disableOnContainerEnv', + 'utils:contains', + 'utils:disableOnContainerEnv'], + 'models/feedback.ts::program:Feedback': ['UserId', 'comment', 'id', 'rating'], + 'models/imageCaptcha.ts': ['models/imageCaptcha.ts::program:ImageCaptcha::init', + 'models/imageCaptcha.ts::program:ImageCaptcha:init', + 'models/imageCaptcha.ts::program:ImageCaptchaModelInit', + 'models/imageCaptcha.ts::program:require'], + 'models/imageCaptcha.ts::program:ImageCaptcha': ['UserId', + 'answer', + 'createdAt', + 'id', + 'image'], + 'models/index.ts': ['AddressModelInit', + 'BasketItemModelInit', + 'BasketModelInit', + 'CaptchaModelInit', + 'CardModelInit', + 'ChallengeModelInit', + 'ComplaintModelInit', + 'DeliveryModelInit', + 'FeedbackModelInit', + 'ImageCaptchaModelInit', + 'MemoryModelInit', + 'PrivacyRequestModelInit', + 'ProductModelInit', + 'QuantityModelInit', + 'RecycleModelInit', + 'SecurityAnswerModelInit', + 'SecurityQuestionModelInit', + 'Sequelize', + 'UserModelInit', + 'WalletModelInit', + 'models/index.ts::program:require', + 'relationsInit'], + 'models/memory.ts': ['models/memory.ts::program:Memory::init', + 'models/memory.ts::program:Memory:init', + 'models/memory.ts::program:MemoryModelInit', + 'models/memory.ts::program:require'], + 'models/memory.ts::program:Memory': ['UserId', 'caption', 'id', 'imagePath'], + 'models/privacyRequests.ts': ['models/privacyRequests.ts::program:PrivacyRequestModel::init', + 'models/privacyRequests.ts::program:PrivacyRequestModel:init', + 'models/privacyRequests.ts::program:PrivacyRequestModelInit', + 'models/privacyRequests.ts::program:require'], + 'models/privacyRequests.ts::program:PrivacyRequestModel': ['UserId', + 'deletionRequested', + 'id'], + 'models/product.ts': ['challengeUtils.solveIf', + 'models/product.ts::program:Product::init', + 'models/product.ts::program:Product:init', + 'models/product.ts::program:ProductModelInit', + 'models/product.ts::program:require', + 'models/product.ts::program:setDataValue', + 'security.sanitizeSecure', + 'this.setDataValue', + 'utils.contains', + 'utils.disableOnContainerEnv'], + 'models/product.ts::program:Product': ['BasketItem', + 'deluxePrice', + 'description', + 'id', + 'image', + 'name', + 'price'], + 'models/quantity.ts': ['models/quantity.ts::program:Quantity::init', + 'models/quantity.ts::program:Quantity:init', + 'models/quantity.ts::program:QuantityModelInit', + 'models/quantity.ts::program:require'], + 'models/quantity.ts::program:Quantity': ['ProductId', + 'id', + 'limitPerUser', + 'quantity'], + 'models/recycle.ts': ['models/recycle.ts::program:Recycle::init', + 'models/recycle.ts::program:Recycle:init', + 'models/recycle.ts::program:RecycleModelInit', + 'models/recycle.ts::program:require'], + 'models/recycle.ts::program:Recycle': ['AddressId', + 'UserId', + 'date', + 'id', + 'isPickup', + 'quantity'], + 'models/relations.ts': ['AddressModel.belongsTo', + 'BasketModel.belongsTo', + 'BasketModel.belongsToMany', + 'CardModel.belongsTo', + 'ComplaintModel.belongsTo', + 'FeedbackModel.belongsTo', + 'ImageCaptchaModel.belongsTo', + 'MemoryModel.belongsTo', + 'PrivacyRequestModel.belongsTo', + 'ProductModel.belongsToMany', + 'QuantityModel.belongsTo', + 'RecycleModel.belongsTo', + 'SecurityAnswerModel.belongsTo', + 'WalletModel.belongsTo', + 'address:AddressModel:belongsTo', + 'basket:BasketModel:belongsTo', + 'basket:BasketModel:belongsToMany', + 'card:CardModel:belongsTo', + 'complaint:ComplaintModel:belongsTo', + 'feedback:FeedbackModel:belongsTo', + 'imageCaptcha:ImageCaptchaModel:belongsTo', + 'makeKeyNonUpdatable', + 'memory:MemoryModel:belongsTo', + 'models/privacyRequests.ts::program:PrivacyRequestModel:belongsTo', + 'models/relations.ts::program:relationsInit', + 'models/relations.ts::program:require', + 'product:ProductModel:belongsToMany', + 'quantity:QuantityModel:belongsTo', + 'recycle:RecycleModel:belongsTo', + 'require("./address").AddressModel', + 'require("./basket").BasketModel', + 'require("./basketitem").BasketItemModel', + 'require("./card").CardModel', + 'require("./complaint").ComplaintModel', + 'require("./feedback").FeedbackModel', + 'require("./imageCaptcha").ImageCaptchaModel', + 'require("./memory").MemoryModel', + 'require("./privacyRequests").PrivacyRequestModel', + 'require("./product").ProductModel', + 'require("./quantity").QuantityModel', + 'require("./recycle").RecycleModel', + 'require("./securityAnswer").SecurityAnswerModel', + 'require("./securityQuestion").SecurityQuestionModel', + 'require("./user").UserModel', + 'require("./wallet").WalletModel', + 'securityAnswer:SecurityAnswerModel:belongsTo', + 'wallet:WalletModel:belongsTo'], + 'models/securityAnswer.ts': ['models/securityAnswer.ts::program:SecurityAnswer::init', + 'models/securityAnswer.ts::program:SecurityAnswer:init', + 'models/securityAnswer.ts::program:SecurityAnswerModelInit', + 'models/securityAnswer.ts::program:require', + 'models/securityAnswer.ts::program:setDataValue', + 'security.hmac'], + 'models/securityAnswer.ts::program:SecurityAnswer': ['SecurityQuestionId', + 'UserId', + 'answer', + 'id'], + 'models/securityQuestion.ts': ['models/securityQuestion.ts::program:SecurityQuestion::init', + 'models/securityQuestion.ts::program:SecurityQuestion:init', + 'models/securityQuestion.ts::program:SecurityQuestionModelInit', + 'models/securityQuestion.ts::program:require'], + 'models/securityQuestion.ts::program:SecurityQuestion': ['id', 'question'], + 'models/user.ts': ['../lib/utils:utils:contains', + '../lib/utils:utils:disableOnContainerEnv', + 'Promise.reject', + 'challengeUtils.solveIf', + 'config.get', + 'models/user.ts::program:User::addHook', + 'models/user.ts::program:User::init', + 'models/user.ts::program:User:addHook', + 'models/user.ts::program:User:init', + 'models/user.ts::program:UserModelInit', + 'models/user.ts::program:getDataValue', + 'models/user.ts::program:require', + 'models/user.ts::program:setDataValue', + 'security.hash', + 'security.sanitizeLegacy', + 'security.sanitizeSecure', + 'this.setDataValue', + 'utils.contains', + 'utils.disableOnContainerEnv'], + 'models/user.ts::program:User': ['deluxeToken', + 'email', + 'id', + 'isActive', + 'lastLoginIp', + 'password', + 'profileImage', + 'role', + 'totpSecret', + 'username'], + 'models/wallet.ts': ['models/wallet.ts::program:Wallet::init', + 'models/wallet.ts::program:Wallet:init', + 'models/wallet.ts::program:WalletModelInit', + 'models/wallet.ts::program:require'], + 'models/wallet.ts::program:Wallet': ['UserId', 'balance', 'id'], + 'routes/2fa.ts': ['../lib/utils:utils:queryResultToJson', + '../models/basket:BasketModel:findOrCreate', + '../models/user:UserModel:findByPk', + '../models/user:UserModel:save', + '.await', + '.fieldAccess', + 'BasketModel.findOrCreate', + 'UserModel.findByPk', + 'challengeUtils.solveIf', + 'config.get', + 'express:Response:json', + 'lib/insecurity.ts::program:authorize', + 'otplib.authenticator.check', + 'require("../models/basket").BasketModel', + 'require("../models/user").UserModel', + 'res.json', + 'res.status', + 'routes/2fa.ts::program:anonymous', + 'routes/2fa.ts::program:anonymous1', + 'routes/2fa.ts::program:anonymous2', + 'routes/2fa.ts::program:anonymous3', + 'routes/2fa.ts::program:require', + 'security.authenticatedUsers.from', + 'security.authenticatedUsers.put', + 'security.authenticatedUsers.updateFrom', + 'security.authorize', + 'security.decode', + 'security.hash', + 'security.verify', + 'userModel.save', + 'utils.queryResultToJson'], + 'routes/address.ts': ['../models/address:AddressModel:destroy', + '../models/address:AddressModel:findAll', + '../models/address:AddressModel:findOne', + 'AddressModel.destroy', + 'AddressModel.findAll', + 'AddressModel.findOne', + 'require("../models/address").AddressModel', + 'res.status', + 'routes/address.ts::program:delAddressById', + 'routes/address.ts::program:getAddress', + 'routes/address.ts::program:getAddressById', + 'routes/address.ts::program:require'], + 'routes/angular.ts': ['../lib/utils:utils:startsWith', + '.fieldAccess', + 'express:Response:sendFile', + 'path.PlatformPath:resolve', + 'path.resolve', + 'res.sendFile', + 'routes/angular.ts::program:next', + 'routes/angular.ts::program:require', + 'routes/angular.ts::program:serveAngularClient', + 'utils.startsWith'], + 'routes/angular.ts::program:serveAngularClient:anonymous:_anon_cdecl': ['url'], + 'routes/appConfiguration.ts': ['res.json', + 'routes/appConfiguration.ts::program:require', + 'routes/appConfiguration.ts::program:retrieveAppConfiguration'], + 'routes/appVersion.ts': ['../lib/utils:utils:version', + 'config.get', + 'res.json', + 'routes/appVersion.ts::program:require', + 'routes/appVersion.ts::program:retrieveAppVersion', + 'utils.version'], + 'routes/authenticatedUsers.ts': ['../lib/utils:utils:queryResultToJson', + '../models/user:UserModel:findAll', + 'UserModel.findAll', + 'next', + 'require("../models/user").UserModel', + 'res.json', + 'routes/authenticatedUsers.ts::program:next', + 'routes/authenticatedUsers.ts::program:require', + 'routes/authenticatedUsers.ts::program:retrieveUserList', + 'security.authenticatedUsers.tokenOf', + 'utils.queryResultToJson'], + 'routes/authenticatedUsers.ts::program:retrieveUserList:anonymous:anonymous:anonymous:_anon_cdecl': ['password', + 'token', + 'totpSecret'], + 'routes/b2bOrder.ts': ['challengeUtils.solveIf', + 'res.json', + 'res.status', + 'routes/b2bOrder.ts::program:b2bOrder', + 'routes/b2bOrder.ts::program:b2bOrder:dateTwoWeeksFromNow', + 'routes/b2bOrder.ts::program:b2bOrder:uniqueOrderNumber', + 'routes/b2bOrder.ts::program:next', + 'routes/b2bOrder.ts::program:require', + 'security.hash', + 'utils.disableOnContainerEnv', + 'utils.getErrorMessage', + 'vm.createContext', + 'vm.runInContext', + 'vm:createContext', + 'vm:runInContext'], + 'routes/b2bOrder.ts::program:b2bOrder:anonymous:_anon_cdecl': ['body'], + 'routes/basket.ts': ['../models/basket:BasketModel:findOne', + 'BasketModel.findOne', + 'challengeUtils.solveIf', + 'express:Request:__', + 'next', + 'req.__', + 'require("../models/basket").BasketModel', + 'res.json', + 'routes/basket.ts::program:next', + 'routes/basket.ts::program:require', + 'routes/basket.ts::program:retrieveBasket', + 'security.authenticatedUsers.from', + 'utils.queryResultToJson'], + 'routes/basketItems.ts': ['../lib/utils:utils:parseJsonCustom', + '../models/basketitem:BasketItemModel:build', + '../models/basketitem:BasketItemModel:findOne', + '../models/basketitem:BasketItemModel:save', + '../models/quantity:QuantityModel:findOne', + 'BasketItemModel.build', + 'BasketItemModel.findOne', + 'QuantityModel.findOne', + '__ecma.Array.factory', + '__ecma.Number:push', + 'basketIds.push', + 'basketItemInstance.save', + 'challengeUtils.solveIf', + 'express:Response:__', + 'next', + 'productIds.push', + 'quantities.push', + 'quantityCheck', + 'require("../models/basketitem").BasketItemModel', + 'require("../models/quantity").QuantityModel', + 'res.__', + 'res.json', + 'res.status', + 'routes/basketItems.ts::program:RequestWithRawBody:next', + 'routes/basketItems.ts::program:RequestWithRawBody:require', + 'routes/basketItems.ts::program:addBasketItem', + 'routes/basketItems.ts::program:quantityCheck', + 'routes/basketItems.ts::program:quantityCheckBeforeBasketItemAddition', + 'routes/basketItems.ts::program:quantityCheckBeforeBasketItemUpdate', + 'security.authenticatedUsers.from', + 'security.isDeluxe', + 'utils.parseJsonCustom'], + 'routes/basketItems.ts::program:RequestWithRawBody': ['rawBody'], + 'routes/captcha.ts': ['../models/captcha:CaptchaModel:build', + '../models/captcha:CaptchaModel:findOne', + '../models/captcha:CaptchaModel:save', + '.addition', + 'CaptchaModel.build', + 'CaptchaModel.findOne', + '__ecma.Math:floor', + 'captchaInstance.save', + 'eval', + 'firstTerm.toString', + 'next', + 'require("../models/captcha").CaptchaModel', + 'res.__', + 'res.json', + 'res.status', + 'routes/captcha.ts::program:next', + 'routes/captcha.ts::program:require', + 'secondTerm.toString', + 'thirdTerm.toString'], + 'routes/changePassword.ts': ['../models/user:UserModel:update', + '::/models/user:UserModel:update', + '.conditional', + '.fieldAccess', + 'UserModel.findByPk', + '__ecma.Boolean:hash', + 'challengeUtils.solveIf', + 'next', + 'require("../models/user").UserModel', + 'res.__', + 'res.json', + 'res.status', + 'routes/changePassword.ts::program:changePassword', + 'routes/changePassword.ts::program:newPassword?.toString', + 'routes/changePassword.ts::program:next', + 'routes/changePassword.ts::program:require', + 'security.authenticatedUsers.get', + 'security.hash', + 'user.update'], + 'routes/changePassword.ts::program:changePassword:anonymous:_anon_cdecl': ['connection', + 'headers', + 'query'], + 'routes/chatbot.ts': ['../lib/botUtils:botUtils:response.handler', + '../lib/insecurity:security:authorize', + '../lib/utils:utils:extractFilename', + '../lib/utils:utils:jwtFrom', + '../lib/utils:utils:queryResultToJson', + '.await', + '.fieldAccess', + '.logicalOr', + 'Bot', + 'JSON.parse', + 'UserModel.findByPk', + '__ecma.Null:addUser', + '__ecma.Null:greet', + '__ecma.Null:respond', + '__ecma.Null:train', + 'bot.addUser', + 'bot.train', + 'botUtils[response.handler]', + 'challengeUtils.solveIf', + 'config.get', + 'config.get', + 'config:config:get', + 'download', + 'fs.copyFile', + 'fs.readFile', + 'fs.writeFile', + 'fs/promises:fs:copyFile', + 'fs/promises:fs:writeFile', + 'getUserFromJwt', + 'isString', + 'juicy-chat-bot:Bot:addUser', + 'juicy-chat-bot:Bot:greet', + 'juicy-chat-bot:Bot:respond', + 'juicy-chat-bot:Bot:train', + 'jwt.verify', + 'lodash:isString', + 'logger.error', + 'processQuery', + 'require("../models/user").UserModel', + 'res.status', + 'routes/chatbot.ts::program:getUserFromJwt', + 'routes/chatbot.ts::program:initialize', + 'routes/chatbot.ts::program:next', + 'routes/chatbot.ts::program:processQuery', + 'routes/chatbot.ts::program:require', + 'routes/chatbot.ts::program:resolve', + 'routes/chatbot.ts::program:respond', + 'routes/chatbot.ts::program:setUserName', + 'routes/chatbot.ts::program:status', + 'security.authenticatedUsers.put', + 'security.authorize', + 'setUserName', + 'userModel.update', + 'utils.extractFilename', + 'utils.getErrorMessage', + 'utils.isUrl', + 'utils.jwtFrom', + 'utils.queryResultToJson'], + 'routes/checkKeys.ts': ['HDNodeWallet.fromPhrase', + 'challengeUtils.solveIf', + 'checkKeys.checkKeys', + 'ethers:HDNodeWallet:fromPhrase', + 'require("ethers").HDNodeWallet', + 'res.status', + 'routes/checkKeys.ts::program:checkKeys', + 'routes/checkKeys.ts::program:nftUnlocked', + 'routes/checkKeys.ts::program:require', + 'utils.getErrorMessage'], + 'routes/continueCode.ts': ['../models/challenge:ChallengeModel:findAll', + 'ChallengeModel.findAll', + 'Hashids', + 'Object.prototype.hasOwnProperty.call', + '__ecma.Array.factory', + 'continueCode.continueCode', + 'hashids.encode', + 'hashids/cjs:encode', + 'ids.push', + 'require("../models/challenge").ChallengeModel', + "require('../data/datacache').challenges", + 'res.json', + 'routes/continueCode.ts::program:continueCode', + 'routes/continueCode.ts::program:continueCodeFindIt', + 'routes/continueCode.ts::program:continueCodeFixIt', + 'routes/continueCode.ts::program:require'], + 'routes/countryMapping.ts': ['config:get', + 'express:Response:send', + 'logger.warn', + 'res.send', + 'res.status', + 'routes/countryMapping.ts::program:countryMapping', + 'routes/countryMapping.ts::program:require'], + 'routes/coupon.ts': ['../models/basket:BasketModel:findByPk', + '../models/basket:BasketModel:update', + '.conditional', + '.fieldAccess', + 'BasketModel.findByPk', + 'basket.update', + 'next', + 'require("../models/basket").BasketModel', + 'res.json', + 'res.status', + 'routes/coupon.ts::program:applyCoupon', + 'routes/coupon.ts::program:coupon?.toString', + 'routes/coupon.ts::program:next', + 'routes/coupon.ts::program:require', + 'security.discountFromCoupon'], + 'routes/coupon.ts::program:applyCoupon:anonymous:_anon_cdecl': ['params'], + 'routes/createProductReviews.ts': ['challengeUtils.solveIf', + "require('../data/mongodb').reviews", + 'res.status', + 'reviews.insert', + 'routes/createProductReviews.ts::program:productReviews', + 'routes/createProductReviews.ts::program:require', + 'security.authenticatedUsers.from', + 'utils.getErrorMessage'], + 'routes/currentUser.ts': ['challengeUtils.solveIf', + 'express:Response:jsonp', + 'res.json', + 'res.jsonp', + 'routes/currentUser.ts::program:require', + 'routes/currentUser.ts::program:retrieveLoggedInUser', + 'security.verify'], + 'routes/dataErasure.ts': ['../models/securityAnswer:SecurityAnswerModel:findOne', + '../models/securityQuestion:SecurityQuestionModel:findByPk', + '.addition', + 'PrivacyRequestModel.create', + 'SecurityAnswerModel.findOne', + 'SecurityQuestionModel.findByPk', + 'challengeUtils.solveIf', + 'express.Router', + 'express:Response:clearCookie', + 'express:Response:render', + 'express:express:Router', + 'filePath.includes', + 'html.slice', + 'models/privacyRequests.ts::program:PrivacyRequestModel:create', + 'path.resolve', + 'require("../models/privacyRequests").PrivacyRequestModel', + 'require("../models/securityAnswer").SecurityAnswerModel', + 'require("../models/securityQuestion").SecurityQuestionModel', + 'res.clearCookie', + 'res.render', + 'res.send', + "router.get('/',async(req:Request,res:Response,next:NextFunction):Promise=>{\r" + 'constloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\r' + 'if(!loggedInUser){\r' + "next(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\r" + 'return\r' + '}\r' + 'constemail=loggedInUser.data.email\r' + '\r' + 'try{\r' + 'constanswer=awaitSecurityAnswerModel.findOne({\r' + 'include:[{\r' + 'model:UserModel,\r' + 'where:{email}\r' + '}]\r' + '})\r' + 'if(answer==null){\r' + "thrownewError('Noanswerfound!')\r" + '}\r' + 'constquestion=awaitSecurityQuestionModel.findByPk(answer.SecurityQuestionId)\r' + 'if(question==null){\r' + "thrownewError('Noquestionfound!')\r" + '}\r' + '\r' + "res.render('dataErasureForm',{userEmail:email,securityQuestion:question.question})\r" + '}catch(error){\r' + 'next(error)\r' + '}\r' + '})', + "router.post('/',async(req:Request,Record,DataErasureRequestParams>,res:Response,next:NextFunction):Promise=>{\r" + 'constloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\r' + 'if(!loggedInUser){\r' + "next(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\r" + 'return\r' + '}\r' + '\r' + 'try{\r' + 'awaitPrivacyRequestModel.create({\r' + 'UserId:loggedInUser.data.id,\r' + 'deletionRequested:true\r' + '})\r' + '\r' + "res.clearCookie('token')\r" + 'if(req.body.layout){\r' + 'constfilePath:string=path.resolve(req.body.layout).toLowerCase()\r' + "constisForbiddenFile:boolean=(filePath.includes('ftp')||filePath.includes('ctf.key')||filePath.includes('encryptionkeys'))\r" + 'if(!isForbiddenFile){\r' + "res.render('dataErasureResult',{\r" + '...req.body\r' + '},(error,html)=>{\r' + 'if(!html||error){\r' + 'next(newError(error.message))\r' + '}else{\r' + '...', + 'routes/dataErasure.ts::program:DataErasureRequestParams:next', + 'routes/dataErasure.ts::program:DataErasureRequestParams:require'], + 'routes/dataErasure.ts::program:DataErasureRequestParams': ['email', + 'layout', + 'securityAnswer'], + 'routes/dataExport.ts': ['../models/memory:MemoryModel:findAll', + '.await', + '.fieldAccess', + 'Array<{\r\n' + ' message: string\r\n' + ' author: string\r\n' + ' product: number\r\n' + ' likesCount: number\r\n' + ' likedBy: string\r\n' + ' }>:forEach', + 'Array<{\r\n' + ' orderId: string\r\n' + ' totalPrice: number\r\n' + ' products: ProductModel[]\r\n' + ' bonus: number\r\n' + ' eta: string\r\n' + ' }>:forEach', + 'MemoryModel.findAll', + 'MemoryModel[]:forEach', + 'challengeUtils.solveIf', + 'email.replace', + 'express:Request:get', + 'memories.forEach', + 'orders.forEach', + 'req.get', + 'require("../models/memory").MemoryModel', + 'res.status', + 'reviews.forEach', + 'routes/dataExport.ts::program:dataExport', + 'routes/dataExport.ts::program:next', + 'routes/dataExport.ts::program:req.headers?.authorization?.replace', + 'routes/dataExport.ts::program:require', + 'security.hash'], + 'routes/delivery.ts': ['../models/delivery:DeliveryModel:findAll', + '../models/delivery:DeliveryModel:findOne', + 'DeliveryModel.findAll', + 'DeliveryModel.findOne', + '__ecma.Array.factory', + '__ecma.Number:isDeluxe', + 'require("../models/delivery").DeliveryModel', + 'res.status', + 'routes/delivery.ts::program:getDeliveryMethod', + 'routes/delivery.ts::program:getDeliveryMethods', + 'routes/delivery.ts::program:require', + 'security.isDeluxe', + 'sendMethods.push'], + 'routes/deluxe.ts': ['../models/card:CardModel:findOne', + '../models/user:UserModel:findOne', + '../models/wallet:WalletModel:decrement', + '../models/wallet:WalletModel:findOne', + '.await', + 'CardModel.findOne', + 'UserModel.findOne', + 'WalletModel.decrement', + 'WalletModel.findOne', + '__ecma.Boolean:authorize', + '__ecma.Boolean:deluxeToken', + '__ecma.Boolean:isCustomer', + '__ecma.Boolean:isDeluxe', + '__ecma.Boolean:verify', + 'challengeUtils.solveIf', + 'require("../models/card").CardModel', + 'require("../models/user").UserModel', + 'require("../models/wallet").WalletModel', + 'res.status', + 'routes/deluxe.ts::program:deluxeMembershipStatus', + 'routes/deluxe.ts::program:require', + 'routes/deluxe.ts::program:upgradeToDeluxe', + 'security.authenticatedUsers.put', + 'security.authorize', + 'security.deluxeToken', + 'security.isCustomer', + 'security.isDeluxe', + 'security.verify', + 'user.update', + 'utils.getErrorMessage', + 'utils.jwtFrom', + 'utils.queryResultToJson'], + 'routes/easterEgg.ts': ['challengeUtils.solveIf', + 'path.resolve', + 'res.sendFile', + 'routes/easterEgg.ts::program:require', + 'routes/easterEgg.ts::program:serveEasterEgg'], + 'routes/fileServer.ts': ['../lib/utils:utils:endsWith', + '.fieldAccess', + 'challengeUtils.solveIf', + 'endsWithAllowlistedFileType', + 'file.includes', + 'file.toLowerCase', + 'path.resolve', + 'res.sendFile', + 'res.status', + 'routes/fileServer.ts::program:next', + 'routes/fileServer.ts::program:require', + 'routes/fileServer.ts::program:servePublicFiles', + 'routes/fileServer.ts::program:servePublicFiles:endsWithAllowlistedFileType', + 'routes/fileServer.ts::program:servePublicFiles:verify', + 'routes/fileServer.ts::program:servePublicFiles:verifySuccessfulPoisonNullByteExploit', + 'security.cutOffPoisonNullByte', + 'utils.endsWith', + 'verify', + 'verifySuccessfulPoisonNullByteExploit'], + 'routes/fileServer.ts::program:servePublicFiles:anonymous:_anon_cdecl': ['params', + 'query'], + 'routes/fileUpload.ts': ['../lib/utils:utils:matchesEtcPasswdFile', + '../lib/utils:utils:matchesSystemIniFile', + '../lib/utils:utils:trunc', + '.fieldAccess', + '__ecma.Boolean:includes', + 'absolutePath.includes', + 'challengeUtils.notSolved', + 'challengeUtils.solve', + 'challengeUtils.solveIf', + 'challengeUtils:notSolved', + 'challengeUtils:solve', + 'entry.autodrain', + 'entry.pipe', + 'file.originalname.toLowerCase', + 'fs.close', + 'fs.createReadStream', + 'fs.createWriteStream', + 'fs.open', + 'fs.write', + 'fs:close', + 'fs:createReadStream', + 'fs:createWriteStream', + 'fs:open', + 'fs:write', + 'next', + 'os.tmpdir', + 'os:os:tmpdir', + 'path.join', + 'path.resolve', + 'path:path:join', + 'path:path:resolve', + 'res.status', + 'routes/fileUpload.ts::program:file?.originalname.substr', + "routes/fileUpload.ts::program:file?.originalname.substr(file.originalname.lastIndexOf('.') " + '+ 1).toLowerCase', + 'routes/fileUpload.ts::program:file?.originalname.toLowerCase', + 'routes/fileUpload.ts::program:next', + 'routes/fileUpload.ts::program:require', + 'unzipper.Parse', + 'unzipper:Parse', + 'utils.contains', + 'utils.disableOnContainerEnv', + 'utils.endsWith', + 'utils.matchesEtcPasswdFile', + 'utils.matchesSystemIniFile', + 'utils.trunc', + 'vm.createContext', + 'vm.runInContext', + 'vm:runInContext', + 'xmlDoc.toString'], + 'routes/fileUpload.ts::program:checkFileType:_anon_cdecl': ['file'], + 'routes/fileUpload.ts::program:checkUploadSize:_anon_cdecl': ['file'], + 'routes/fileUpload.ts::program:ensureFileIsPassed:_anon_cdecl': ['file'], + 'routes/fileUpload.ts::program:handleXmlUpload:_anon_cdecl': ['file'], + 'routes/fileUpload.ts::program:handleZipFileUpload:_anon_cdecl': ['file'], + 'routes/imageCaptcha.ts': ['../models/imageCaptcha:ImageCaptchaModel:build', + '../models/imageCaptcha:ImageCaptchaModel:findAll', + '../models/imageCaptcha:ImageCaptchaModel:save', + 'ImageCaptchaModel.build', + 'ImageCaptchaModel.findAll', + 'imageCaptchaInstance.save', + 'require("../models/imageCaptcha").ImageCaptchaModel', + 'res.__', + 'res.json', + 'res.status', + 'routes/imageCaptcha.ts::program:next', + 'routes/imageCaptcha.ts::program:require', + 'security.authenticatedUsers.from', + 'svg-captcha:create', + 'svgCaptcha.create'], + 'routes/keyServer.ts': ['.fieldAccess', + 'file.includes', + 'path.resolve', + 'res.sendFile', + 'res.status', + 'routes/keyServer.ts::program:next', + 'routes/keyServer.ts::program:require', + 'routes/keyServer.ts::program:serveKeyFiles'], + 'routes/keyServer.ts::program:serveKeyFiles:anonymous:_anon_cdecl': ['params'], + 'routes/languages.ts': ['../data/static/locales.json:locales:find', + 'JSON.parse', + 'Object.keys', + 'Object.prototype.hasOwnProperty.call', + '__ecma.Array.factory', + 'calcPercentage', + 'fileName.indexOf', + 'fileName.substring', + 'fs.readFile', + 'fs.readdir', + 'fs:readFile', + 'fs:readdir', + 'languageFiles.forEach', + 'languages.push', + 'languages.sort', + 'locales.find', + 'res.status', + 'routes/languages.ts::program:getLanguageList', + 'routes/languages.ts::program:getLanguageList:anonymous:calcPercentage', + 'routes/languages.ts::program:next', + 'routes/languages.ts::program:reject', + 'routes/languages.ts::program:require', + 'routes/languages.ts::program:resolve'], + 'routes/likeProductReviews.ts': ['.fieldAccess', + '__ecma.String[]:push', + 'challengeUtils.solveIf', + 'likedBy.includes', + 'likedBy.push', + 'res.json', + 'res.status', + 'routes/likeProductReviews.ts::program:productReviews', + 'routes/likeProductReviews.ts::program:require', + 'routes/likeProductReviews.ts::program:setTimeout', + 'security.authenticatedUsers.from'], + 'routes/logfileServer.ts': ['.fieldAccess', + 'file.includes', + 'path.resolve', + 'res.sendFile', + 'res.status', + 'routes/logfileServer.ts::program:next', + 'routes/logfileServer.ts::program:require', + 'routes/logfileServer.ts::program:serveLogFiles'], + 'routes/logfileServer.ts::program:serveLogFiles:anonymous:_anon_cdecl': ['params'], + 'routes/login.ts': ['../lib/utils:utils:queryResultToJson', + '../models/user:UserModel:count', + 'BasketModel.findOrCreate', + 'UserModel.count', + 'afterLogin', + 'challengeUtils.notSolved', + 'challengeUtils.solve', + 'challengeUtils.solveIf', + 'config.get', + 'lib/insecurity.ts::program:authorize', + 'next', + 'require("../models/basket").BasketModel', + 'require("../models/user").UserModel', + 'res.__', + 'res.json', + 'res.status', + 'routes/login.ts::program:login', + 'routes/login.ts::program:login:afterLogin', + 'routes/login.ts::program:login:verifyPostLoginChallenges', + 'routes/login.ts::program:login:verifyPreLoginChallenges', + 'routes/login.ts::program:next', + 'routes/login.ts::program:require', + 'security.authenticatedUsers.put', + 'security.authorize', + 'security.hash', + 'utils.queryResultToJson', + 'verifyPostLoginChallenges', + 'verifyPreLoginChallenges'], + 'routes/login.ts::program:login:afterLogin:_anon_cdecl': ['bid', 'data'], + 'routes/login.ts::program:login:anonymous:anonymous:_anon_cdecl': ['data'], + 'routes/login.ts::program:login:verifyPostLoginChallenges:_anon_cdecl': ['data'], + 'routes/memory.ts': ['MemoryModel.create', + 'MemoryModel.findAll', + '_tmp_4.push', + 'require("../models/memory").MemoryModel', + 'require("../models/user").UserModel', + 'res.status', + 'routes/memory.ts::program:addMemory', + 'routes/memory.ts::program:getMemories', + 'routes/memory.ts::program:require'], + 'routes/metrics.ts': ['../lib/accuracy:accuracy:totalFindItAccuracy', + '../lib/accuracy:accuracy:totalFixItAccuracy', + '../lib/utils:utils:version', + '../models/challenge:ChallengeModel:count', + '../models/complaint:ComplaintModel:count', + '../models/feedback:FeedbackModel:count', + '../models/wallet:WalletModel:sum', + '.fieldAccess', + '.formatString', + '.logicalOr', + 'ChallengeModel.count', + 'ComplaintModel.count', + 'FeedbackModel.count', + 'Map', + 'Map:get', + 'Map:keys', + 'Map:set', + 'Object.values', + 'Prometheus.Counter', + 'Prometheus.Gauge', + 'Prometheus.collectDefaultMetrics', + 'UserModel.count', + 'WalletModel.sum', + 'accuracy.totalFindItAccuracy', + 'accuracy.totalFixItAccuracy', + 'accuracyMetrics.set', + 'challengeCount.get', + 'challengeCount.set', + 'challengeSolvedMetrics.set', + 'challengeStatuses.get', + 'challengeStatuses.keys', + 'challengeStatuses.set', + 'challengeTotalMetrics.set', + 'challengeUtils.solveIf', + 'cheatScoreMetrics.set', + 'codingChallengesProgressMetrics.set', + 'config.get', + 'express:Response:end', + 'express:Response:set', + 'fileUploadErrorsMetric.labels', + 'fileUploadsCountMetric.labels', + 'httpRequestsMetric.labels', + 'interactionsMetrics.set', + 'key.split', + 'logger.warn', + 'on-finished', + 'onFinished', + 'orderMetrics.set', + 'orders.count', + 'prom-client:collectDefaultMetrics', + 'register.metrics', + 'register.setDefaultLabels', + 'require("../models/challenge").ChallengeModel', + 'require("../models/complaint").ComplaintModel', + 'require("../models/feedback").FeedbackModel', + 'require("../models/user").UserModel', + 'require("../models/wallet").WalletModel', + "require('../data/datacache').challenges", + "require('../data/mongodb').orders", + "require('../data/mongodb').reviews", + 'res.end', + 'res.set', + 'reviews.count', + 'routes/metrics.ts::program:next', + 'routes/metrics.ts::program:observeFileUploadMetricsMiddleware', + 'routes/metrics.ts::program:observeMetrics', + 'routes/metrics.ts::program:observeRequestMetricsMiddleware', + 'routes/metrics.ts::program:require', + 'routes/metrics.ts::program:serveMetrics', + 'routes/metrics.ts::program:setInterval', + 'userAgent.includes', + 'userMetrics.set', + 'userTotalMetrics.set', + 'utils.getErrorMessage', + 'utils.version', + 'version.match', + 'versionMetrics.set', + 'walletMetrics.set'], + 'routes/metrics.ts::program:observeFileUploadMetricsMiddleware:anonymous:_anon_cdecl': ['file'], + 'routes/nftMint.ts': ['.fieldAccess', + 'Set', + 'Set:add', + 'Set:delete', + 'Set:has', + 'addressesMinted.add', + 'addressesMinted.delete', + 'addressesMinted.has', + 'challengeUtils.solveIf', + 'contract.on', + 'ethers.Contract', + 'ethers.WebSocketProvider', + 'res.status', + 'routes/nftMint.ts::program:nftMintListener', + 'routes/nftMint.ts::program:require', + 'routes/nftMint.ts::program:walletNFTVerify', + 'utils.getErrorMessage'], + 'routes/order.ts': ['', + '../models/basketitem:BasketItemModel:destroy', + '../models/quantity:QuantityModel:update', + '../models/wallet:WalletModel:increment', + '::/models/basket:BasketModel:update', + '.conditional', + '.fieldAccess', + '.formatString', + 'BasketItemModel.destroy', + 'BasketModel.findOne', + 'Buffer.from', + 'Date', + 'DeliveryModel.findOne', + 'PDFDocument', + 'Product[]:push', + 'QuantityModel.findOne', + 'QuantityModel.update', + 'WalletModel.decrement', + 'WalletModel.findOne', + 'WalletModel.increment', + '__ecma.Array.factory', + '__ecma.Number:discountFromCoupon', + '__ecma.Number:hash', + '__ecma.Number:toFixed', + 'basket.update', + 'basketProducts.push', + 'calculateApplicableDiscount', + 'challengeUtils.solveIf', + 'config.get', + 'deliveryAmount.toFixed', + 'doc.end', + 'doc.font', + 'doc.fontSize', + 'doc.moveDown', + 'doc.moveTo', + 'doc.pipe', + 'doc.text', + 'email.replace', + 'fileWriter.on', + 'fs.createWriteStream', + 'next', + 'parseFloat', + 'path.PlatformPath:join', + 'path.join', + 'req.__', + 'require("../models/basket").BasketModel', + 'require("../models/basketitem").BasketItemModel', + 'require("../models/delivery").DeliveryModel', + 'require("../models/quantity").QuantityModel', + 'require("../models/wallet").WalletModel', + 'res.json', + 'routes/order.ts::program:Product:basket.Products?.forEach', + 'routes/order.ts::program:Product:next', + 'routes/order.ts::program:Product:require', + 'routes/order.ts::program:calculateApplicableDiscount', + 'routes/order.ts::program:placeOrder', + 'security.authenticatedUsers.from', + 'security.discountFromCoupon', + 'security.hash', + 'security.isDeluxe', + 'utils.randomHexString'], + 'routes/order.ts::program:Product': ['bonus', + 'id', + 'name', + 'price', + 'quantity', + 'total'], + 'routes/order.ts::program:placeOrder:anonymous:anonymous:anonymous1:_anon_cdecl': ['BasketItem', + 'deluxePrice', + 'id', + 'name', + 'price'], + 'routes/orderHistory.ts': ['.await', + '.fieldAccess', + 'email.replace', + 'order.reverse', + 'orderHistory.orderHistory', + 'orders.find', + 'orders.update', + "require('../data/mongodb').orders", + 'res.status', + 'routes/orderHistory.ts::program:allOrders', + 'routes/orderHistory.ts::program:next', + 'routes/orderHistory.ts::program:orderHistory', + 'routes/orderHistory.ts::program:req.headers?.authorization?.replace', + 'routes/orderHistory.ts::program:require', + 'routes/orderHistory.ts::program:toggleDeliveryStatus'], + 'routes/payment.ts': ['../models/card:CardModel:destroy', + '../models/card:CardModel:findAll', + '.await', + 'CardModel.destroy', + 'CardModel.findAll', + 'CardModel.findOne', + 'CardModel[]:forEach', + 'String', + '__ecma.Array.factory', + '__ecma.String:repeat', + 'cardNumber.substring', + 'cards.forEach', + 'displayCard[]:push', + 'displayableCards.push', + 'require("../models/card").CardModel', + 'res.status', + 'routes/payment.ts::program:delPaymentMethodById', + 'routes/payment.ts::program:displayCard:require', + 'routes/payment.ts::program:getPaymentMethodById', + 'routes/payment.ts::program:getPaymentMethods'], + 'routes/payment.ts::program:displayCard': ['UserId', + 'cardNum', + 'expMonth', + 'expYear', + 'fullName', + 'id'], + 'routes/premiumReward.ts': ['challengeUtils.solveIf', + 'path.resolve', + 'res.sendFile', + 'routes/premiumReward.ts::program:require', + 'routes/premiumReward.ts::program:servePremiumContent'], + 'routes/privacyPolicyProof.ts': ['challengeUtils.solveIf', + 'path.resolve', + 'res.sendFile', + 'routes/privacyPolicyProof.ts::program:require', + 'routes/privacyPolicyProof.ts::program:servePrivacyPolicyProof'], + 'routes/profileImageFileUpload.ts': ['.fieldAccess', + 'UserModel.findByPk', + 'express:Response:location', + 'express:Response:redirect', + 'file-type:fromBuffer', + 'fileType.fromBuffer', + 'fs.close', + 'fs.open', + 'fs.write', + 'logger.warn', + 'next', + 'require("../models/user").UserModel', + 'res.location', + 'res.redirect', + 'res.status', + 'routes/profileImageFileUpload.ts::program:fileUpload', + 'routes/profileImageFileUpload.ts::program:next', + 'routes/profileImageFileUpload.ts::program:require', + 'user.update', + 'utils.startsWith'], + 'routes/profileImageUrlUpload.ts': ['.get', + '.fieldAccess', + 'UserModel.findByPk', + '__ecma.Boolean:split', + 'fs.createWriteStream', + 'imageRequest.pipe', + 'logger.warn', + 'next', + 'request\r\n .get', + 'request:get', + 'require("../models/user").UserModel', + 'res.location', + 'res.redirect', + 'routes/profileImageUrlUpload.ts::program:next', + 'routes/profileImageUrlUpload.ts::program:profileImageUrlUpload', + 'routes/profileImageUrlUpload.ts::program:require', + 'routes/profileImageUrlUpload.ts::program:user?.update', + 'url.match', + 'url.split', + 'utils.getErrorMessage'], + 'routes/quarantineServer.ts': ['.fieldAccess', + 'file.includes', + 'path.resolve', + 'res.sendFile', + 'res.status', + 'routes/quarantineServer.ts::program:next', + 'routes/quarantineServer.ts::program:require', + 'routes/quarantineServer.ts::program:serveQuarantineFiles'], + 'routes/quarantineServer.ts::program:serveQuarantineFiles:anonymous:_anon_cdecl': ['params', + 'query'], + 'routes/recycles.ts': ['../models/recycle:RecycleModel:findAll', + 'RecycleModel.findAll', + 'require("../models/recycle").RecycleModel', + 'res.send', + 'routes/recycles.ts::program:blockRecycleItems', + 'routes/recycles.ts::program:getRecycleItem', + 'routes/recycles.ts::program:require', + 'utils.queryResultToJson'], + 'routes/redirect.ts': ['.fieldAccess', + 'challengeUtils.solveIf', + 'res.redirect', + 'res.status', + 'routes/redirect.ts::program:isUnintendedRedirect', + 'routes/redirect.ts::program:next', + 'routes/redirect.ts::program:performRedirect', + 'routes/redirect.ts::program:require', + 'security.isRedirectAllowed', + 'utils.startsWith', + 'utils:startsWith'], + 'routes/redirect.ts::program:performRedirect:anonymous:_anon_cdecl': ['query'], + 'routes/repeatNotification.ts': ['challengeUtils.findChallengeByName', + 'challengeUtils.sendNotification', + 'challengeUtils:findChallengeByName', + 'challengeUtils:sendNotification', + 'decodeURIComponent', + 'express:Response:sendStatus', + 'res.sendStatus', + 'routes/repeatNotification.ts::program:repeatNotification', + 'routes/repeatNotification.ts::program:require'], + 'routes/repeatNotification.ts::program:repeatNotification:anonymous:_anon_cdecl': ['query'], + 'routes/resetPassword.ts': ['.fieldAccess', + 'SecurityAnswerModel.findOne', + 'UserModel.findByPk', + '__ecma.Boolean:hmac', + 'challengeUtils.solveIf', + 'config.get', + 'next', + 'require("../models/securityAnswer").SecurityAnswerModel', + 'require("../models/user").UserModel', + 'res.__', + 'res.json', + 'res.status', + 'routes/resetPassword.ts::program:next', + 'routes/resetPassword.ts::program:require', + 'routes/resetPassword.ts::program:resetPassword', + 'routes/resetPassword.ts::program:user?.update', + 'routes/resetPassword.ts::program:user?.update({ ' + 'password: newPassword }).then', + 'routes/resetPassword.ts::program:user?.update({ ' + 'password: newPassword }).then((user: UserModel) ' + '=> {\r\n' + ' ' + 'verifySecurityAnswerChallenges(user, answer)\r\n' + ' res.json({ user })\r\n' + ' }).catch', + 'routes/resetPassword.ts::program:verifySecurityAnswerChallenges', + 'routes/resetPassword.ts::program:verifySecurityAnswerChallenges:anonymous6:anonymous', + 'routes/resetPassword.ts::program:verifySecurityAnswerChallenges:anonymous7:anonymous', + 'security.hmac', + 'verifySecurityAnswerChallenges'], + 'routes/resetPassword.ts::program:resetPassword:anonymous:_anon_cdecl': ['body', + 'connection'], + 'routes/restoreProgress.ts': ['.fieldAccess', + 'Hashids', + 'Object.prototype.hasOwnProperty.call', + '__ecma.Boolean:notSolved', + '__ecma.Boolean:solve', + '__ecma.Boolean:solveFindIt', + '__ecma.Boolean:solveFixIt', + 'challengeUtils.notSolved', + 'challengeUtils.solve', + 'challengeUtils.solveFindIt', + 'challengeUtils.solveFixIt', + 'hashids.decode', + 'hashids/cjs:decode', + 'ids.includes', + 'idsFindIt.includes', + 'idsFixIt.includes', + 'import("C:/Users/user/SampleProjects/javascript/juice-shop/node_modules/hashids/cjs/util").NumberLike[]:includes', + "require('../data/datacache').challenges", + 'res.end', + 'res.json', + 'res.status', + 'restoreProgress.restoreProgress', + 'routes/restoreProgress.ts::program:require', + 'routes/restoreProgress.ts::program:restoreProgress', + 'routes/restoreProgress.ts::program:restoreProgressFindIt', + 'routes/restoreProgress.ts::program:restoreProgressFixIt'], + 'routes/restoreProgress.ts::program:restoreProgress:anonymous:_anon_cdecl': ['params'], + 'routes/restoreProgress.ts::program:restoreProgressFindIt:anonymous:_anon_cdecl': ['params'], + 'routes/restoreProgress.ts::program:restoreProgressFixIt:anonymous:_anon_cdecl': ['params'], + 'routes/saveLoginIp.ts': ['../lib/utils:utils:toSimpleIpAddress', + 'UserModel.findByPk', + 'challengeUtils.solveIf', + 'next', + 'require("../models/user").UserModel', + 'res.json', + 'res.sendStatus', + 'routes/saveLoginIp.ts::program:lastLoginIp?.toString', + 'routes/saveLoginIp.ts::program:next', + 'routes/saveLoginIp.ts::program:require', + 'routes/saveLoginIp.ts::program:saveLoginIp', + 'routes/saveLoginIp.ts::program:user?.update', + 'routes/saveLoginIp.ts::program:user?.update({ ' + 'lastLoginIp: lastLoginIp?.toString() }).then', + 'routes/saveLoginIp.ts::program:user?.update({ ' + 'lastLoginIp: lastLoginIp?.toString() ' + '}).then((user: UserModel) => {\r\n' + ' res.json(user)\r\n' + ' }).catch', + 'security.authenticatedUsers.from', + 'security.sanitizeSecure', + 'utils.disableOnContainerEnv', + 'utils.toSimpleIpAddress'], + 'routes/search.ts': ['../lib/utils:utils:containsOrEscaped', + '../lib/utils:utils:queryResultToJson', + '.conditional', + 'JSON.stringify', + 'UserModel.findAll', + 'challengeUtils.notSolved', + 'challengeUtils.solve', + 'criteria.substring', + 'next', + 'req.__', + 'require("../models/user").UserModel', + 'res.json', + 'routes/search.ts::program:next', + 'routes/search.ts::program:require', + 'routes/search.ts::program:searchProducts', + 'utils.contains', + 'utils.containsOrEscaped', + 'utils.queryResultToJson'], + 'routes/search.ts::program:ErrorWithParent': ['parent'], + 'routes/securityQuestion.ts': ['SecurityAnswerModel.findOne', + 'SecurityQuestionModel.findByPk', + 'next', + 'require("../models/securityAnswer").SecurityAnswerModel', + 'require("../models/securityQuestion").SecurityQuestionModel', + 'res.json', + 'routes/securityQuestion.ts::program:email?.toString', + 'routes/securityQuestion.ts::program:next', + 'routes/securityQuestion.ts::program:require', + 'routes/securityQuestion.ts::program:securityQuestion'], + 'routes/securityQuestion.ts::program:securityQuestion:anonymous:_anon_cdecl': ['query'], + 'routes/showProductReviews.ts': ['Date', + 'challengeUtils.solveIf', + 'res.json', + 'res.status', + 'routes/showProductReviews.ts::program:productReviews', + 'routes/showProductReviews.ts::program:require', + 'security.authenticatedUsers.from', + 'utils.disableOnContainerEnv', + 'utils.queryResultToJson', + 'utils:queryResultToJson'], + 'routes/trackOrder.ts': ['.conditional', + 'challengeUtils.solveIf', + 'res.json', + 'res.status', + 'routes/trackOrder.ts::program:require', + 'routes/trackOrder.ts::program:trackOrder', + 'utils.contains', + 'utils.disableOnContainerEnv', + 'utils.queryResultToJson', + 'utils:queryResultToJson'], + 'routes/updateProductReviews.ts': ['challengeUtils.solveIf', + 'res.json', + 'res.status', + 'routes/updateProductReviews.ts::program:productReviews', + 'routes/updateProductReviews.ts::program:require', + 'security.authenticatedUsers.from'], + 'routes/updateProductReviews.ts::program:productReviews:anonymous:anonymous:_anon_cdecl': ['modified', + 'original'], + 'routes/updateUserProfile.ts': ['UserModel.findByPk', + 'challengeUtils.solveIf', + 'lib/insecurity.ts::program:authorize', + 'next', + 'require("../models/user").UserModel', + 'res.cookie', + 'res.location', + 'res.redirect', + 'routes/updateUserProfile.ts::program:next', + 'routes/updateUserProfile.ts::program:req.headers.origin?.includes', + 'routes/updateUserProfile.ts::program:req.headers.referer?.includes', + 'routes/updateUserProfile.ts::program:require', + 'routes/updateUserProfile.ts::program:updateUserProfile', + 'security.authenticatedUsers.put', + 'security.authorize', + 'user.update', + 'utils.queryResultToJson'], + 'routes/userProfile.ts': ['.addition', + 'Buffer:toString', + 'Entities', + 'UserModel.findByPk', + '__ecma.String:replace', + 'buf.toString', + 'challengeUtils.solveIf', + 'config.get', + 'config.get', + 'entities.encode', + 'eval', + 'fn', + 'fs.readFile', + 'next', + 'pug.compile', + 'pug:compile', + 'require("../models/user").UserModel', + 'res.send', + 'res.set', + 'routes/userProfile.ts::program:fn', + 'routes/userProfile.ts::program:getUserProfile', + 'routes/userProfile.ts::program:getUserProfile:favicon', + 'routes/userProfile.ts::program:next', + 'routes/userProfile.ts::program:require', + 'routes/userProfile.ts::program:user?.profileImage.match', + 'routes/userProfile.ts::program:username?.match', + 'routes/userProfile.ts::program:username?.substring', + 'security.hash', + 'template.replace', + 'utils.contains', + 'utils.disableOnContainerEnv', + 'utils.extractFilename'], + 'routes/verify.ts': ['../lib/utils:utils:disableOnWindowsEnv', + '../lib/utils:utils:jwtFrom', + '../models/complaint:ComplaintModel:findAndCountAll', + '../models/feedback:FeedbackModel:findAndCountAll', + '.conditional', + '.fieldAccess', + 'ComplaintModel.findAndCountAll', + 'FeedbackModel.findAndCountAll', + 'Product:reload', + 'challengeUtils.notSolved', + 'challengeUtils.solve', + 'challengeUtils.solveIf', + 'config.get', + 'config.get', + 'hasAlgorithm', + 'hasEmail', + 'jsonwebtoken:decode', + 'jsonwebtoken:verify', + 'jws.decode', + 'jws:jws:decode', + 'jwt.decode', + 'jwt.verify', + 'jwtChallenge', + 'next', + 'osaft.reload', + 'require("../models/complaint").ComplaintModel', + 'require("../models/feedback").FeedbackModel', + 'res.status', + 'routes/verify.ts::program:accessControlChallenges', + 'routes/verify.ts::program:captchaBypassChallenge', + 'routes/verify.ts::program:changeProductChallenge', + 'routes/verify.ts::program:dangerousIngredients', + 'routes/verify.ts::program:databaseRelatedChallenges', + 'routes/verify.ts::program:dlpPastebinDataLeakChallenge', + 'routes/verify.ts::program:emptyUserRegistration', + 'routes/verify.ts::program:errorHandlingChallenge', + 'routes/verify.ts::program:eslintScopeVulnIds', + 'routes/verify.ts::program:feedbackChallenge', + 'routes/verify.ts::program:forgedFeedbackChallenge', + 'routes/verify.ts::program:hasAlgorithm', + 'routes/verify.ts::program:hasEmail', + 'routes/verify.ts::program:hasEmail:_anon_cdecl:split', + 'routes/verify.ts::program:hiddenImageChallenge', + 'routes/verify.ts::program:jwtChallenge', + 'routes/verify.ts::program:jwtChallenges', + 'routes/verify.ts::program:knownVulnerableComponentChallenge', + 'routes/verify.ts::program:knownVulnerableComponents', + 'routes/verify.ts::program:next', + 'routes/verify.ts::program:passwordRepeatChallenge', + 'routes/verify.ts::program:registerAdminChallenge', + 'routes/verify.ts::program:require', + 'routes/verify.ts::program:serverSideChallenges', + 'routes/verify.ts::program:supplyChainAttackChallenge', + 'routes/verify.ts::program:token?.data?.email?.match', + 'routes/verify.ts::program:typosquattingAngularChallenge', + 'routes/verify.ts::program:typosquattingNpmChallenge', + 'routes/verify.ts::program:weirdCryptoChallenge', + 'routes/verify.ts::program:weirdCryptos', + 'security.authenticatedUsers.from', + 'token.split', + 'token?.data?.email?.match', + 'url.match', + 'url.toLowerCase', + 'utils.contains', + 'utils.disableOnWindowsEnv', + 'utils.endsWith', + 'utils.jwtFrom'], + 'routes/verify.ts::program:anonymous5:anonymous:_anon_cdecl': ['url'], + 'routes/verify.ts::program:anonymous6:anonymous:_anon_cdecl': ['statusCode'], + 'routes/verify.ts::program:dlpPastebinDataLeakChallenge:anonymous2:_anon_cdecl': ['count'], + 'routes/verify.ts::program:dlpPastebinDataLeakChallenge:anonymous:_anon_cdecl': ['count'], + 'routes/verify.ts::program:feedbackChallenge:anonymous:_anon_cdecl': ['count'], + 'routes/verify.ts::program:hasEmail:_anon_cdecl': ['data'], + 'routes/verify.ts::program:hiddenImageChallenge:anonymous2:_anon_cdecl': ['count'], + 'routes/verify.ts::program:hiddenImageChallenge:anonymous:_anon_cdecl': ['count'], + 'routes/verify.ts::program:knownVulnerableComponentChallenge:anonymous2:_anon_cdecl': ['count'], + 'routes/verify.ts::program:knownVulnerableComponentChallenge:anonymous:_anon_cdecl': ['count'], + 'routes/verify.ts::program:supplyChainAttackChallenge:anonymous2:_anon_cdecl': ['count'], + 'routes/verify.ts::program:supplyChainAttackChallenge:anonymous:_anon_cdecl': ['count'], + 'routes/verify.ts::program:typosquattingAngularChallenge:anonymous2:_anon_cdecl': ['count'], + 'routes/verify.ts::program:typosquattingAngularChallenge:anonymous:_anon_cdecl': ['count'], + 'routes/verify.ts::program:typosquattingNpmChallenge:anonymous2:_anon_cdecl': ['count'], + 'routes/verify.ts::program:typosquattingNpmChallenge:anonymous:_anon_cdecl': ['count'], + 'routes/verify.ts::program:weirdCryptoChallenge:anonymous2:_anon_cdecl': ['count'], + 'routes/verify.ts::program:weirdCryptoChallenge:anonymous:_anon_cdecl': ['count'], + 'routes/videoHandler.ts': ['.fieldAccess', + 'Entities', + '__ecma.Boolean:get', + '__ecma.String:replace', + '__ecma.String:toString', + 'buf.toString', + 'challengeUtils.solveIf', + 'compiledTemplate.replace', + 'config.get', + 'config.get', + 'data.toString', + 'entities.encode', + 'express:Response:writeHead', + 'file.pipe', + 'fs.ReadStream:pipe', + 'fs.createReadStream', + 'fs.readFile', + 'fs.readFileSync', + 'fs.statSync', + 'fs:createReadStream', + 'fs:readFileSync', + 'fs:statSync', + 'pug.compile', + 'range.replace', + 'res.send', + 'res.writeHead', + 'routes/videoHandler.ts::program:anonymous1:favicon', + 'routes/videoHandler.ts::program:fn', + 'routes/videoHandler.ts::program:getSubsFromFile', + 'routes/videoHandler.ts::program:getVideo', + 'routes/videoHandler.ts::program:promotionVideo', + 'routes/videoHandler.ts::program:require', + 'routes/videoHandler.ts::program:videoPath', + 'template.replace', + 'utils.contains', + 'utils.extractFilename'], + 'routes/vulnCodeFixes.ts': ['../lib/accuracy:accuracy:storeFixItVerdict', + '.fieldAccess', + '.indexAccess', + '__ecma.Array.factory', + 'accuracy.storeFixItVerdict', + 'challengeUtils.solveFixIt', + 'fixes.push', + 'fs.existsSync', + 'fs.readFileSync', + 'fs.readdirSync', + 'fs:existsSync', + 'fs:readdirSync', + 'js-yaml:load', + 'parseInt', + 'readFixes', + 'res.__', + 'res.status', + 'routes/vulnCodeFixes.ts::program:VerdictRequestBody:codingChallengeInfos?.fixes.find', + 'routes/vulnCodeFixes.ts::program:VerdictRequestBody:require', + 'routes/vulnCodeFixes.ts::program:readFixes', + 'yaml.load'], + 'routes/vulnCodeFixes.ts::program:FixesRequestParams': ['key'], + 'routes/vulnCodeFixes.ts::program:VerdictRequestBody': ['key', 'selectedFix'], + 'routes/vulnCodeFixes.ts::program:anonymous2:anonymous:anonymous:_anon_cdecl': ['id'], + 'routes/vulnCodeFixes.ts::program:codeFix': ['correct', 'fixes'], + 'routes/vulnCodeSnippet.ts': ['../lib/accuracy:accuracy:getFindItAttempts', + '../lib/accuracy:accuracy:storeFindItVerdict', + '.await', + '.fieldAccess', + '.indexAccess', + 'Map:keys', + '__ecma.Number[]:includes', + 'accuracy.getFindItAttempts', + 'accuracy.storeFindItVerdict', + 'challengeUtils.solveFindIt', + 'codeChallenges.get', + 'codeChallenges.has', + 'codeChallenges.keys', + 'fs.existsSync', + 'fs.readFileSync', + 'fs:fs:existsSync', + 'getVerdict', + 'js-yaml:yaml:load', + 'number[]:every', + 'number[]:filter', + 'number[]:includes', + 'number[]:toString', + 'okLines.includes', + 'res.__', + 'res.json', + 'res.status', + 'retrieveCodeSnippet', + 'routes/vulnCodeSnippet.ts::program:VerdictRequestBody:require', + 'routes/vulnCodeSnippet.ts::program:checkVulnLines', + 'routes/vulnCodeSnippet.ts::program:getVerdict', + 'routes/vulnCodeSnippet.ts::program:retrieveChallengesWithCodeSnippet', + 'routes/vulnCodeSnippet.ts::program:retrieveCodeSnippet', + 'routes/vulnCodeSnippet.ts::program:serveChallengesWithCodeSnippet', + 'routes/vulnCodeSnippet.ts::program:serveCodeSnippet', + 'routes/vulnCodeSnippet.ts::program:setStatusCode', + 'selectedLines.filter', + 'selectedLines.includes', + 'utils.getErrorMessage', + 'vulnLines.every', + 'vulnLines.toString', + 'yaml.load'], + 'routes/vulnCodeSnippet.ts::program:SnippetRequestBody': ['challenge'], + 'routes/vulnCodeSnippet.ts::program:VerdictRequestBody': ['key', + 'selectedLines'], + 'routes/wallet.ts': ['CardModel.findOne', + 'WalletModel.findOne', + 'WalletModel.increment', + 'require("../models/card").CardModel', + 'require("../models/wallet").WalletModel', + 'res.status', + 'routes/wallet.ts::program:addWalletBalance', + 'routes/wallet.ts::program:getWalletBalance', + 'routes/wallet.ts::program:require'], + 'routes/web3Wallet.ts': ['.fieldAccess', + 'Set', + 'challengeUtils.solveIf', + 'contract.on', + 'ethers.Contract', + 'ethers.WebSocketProvider', + 'res.status', + 'routes/web3Wallet.ts::program:contractExploitListener', + 'routes/web3Wallet.ts::program:require', + 'utils.getErrorMessage', + 'walletsConnected.add', + 'walletsConnected.delete', + 'walletsConnected.has'], + 'rsn/rsn-update.ts': ['checkDiffs', + 'colors.bold', + 'console.log', + 'rsn/rsn-update.ts::program:require', + 'rsn/rsnUtil.ts::program:readFiles', + 'writeToFile'], + 'rsn/rsn-verbose.ts': ['(callbackfn: (value: ANY, index: __ecma.Number, ' + 'array: ANY[]) => void, thisArg?: ANY) => void:forEach', + 'checkData', + 'checkDiffs', + 'colors.bold', + 'colors.green', + 'colors.red', + 'console.log', + 'filesWithDiff.forEach', + 'rsn/rsn-verbose.ts::program:require', + 'rsn/rsnUtil.ts::program:checkData', + 'rsn/rsnUtil.ts::program:getDataFromFile', + 'rsn/rsnUtil.ts::program:readFiles', + 'seePatch'], + 'rsn/rsn.ts': ['checkData', + 'checkDiffs', + 'colors.bold', + 'colors.green', + 'colors.red', + 'console.log', + 'rsn/rsn.ts::program:require', + 'rsn/rsnUtil.ts::program:getDataFromFile', + 'rsn/rsnUtil.ts::program:readFiles'], + 'rsn/rsnUtil.ts': ['Diff.diffLines', + 'Diff.structuredPatch', + 'JSON.parse', + 'JSON.stringify', + '__ecma.Array.factory', + '__ecma.Number:split', + '__ecma.Number[]:every', + '__ecma.String:endsWith', + 'colors.bold', + 'colors.green', + 'colors.inverse', + 'colors.red', + 'colors/safe:colors:inverse', + 'console.log', + 'dataValueAdded.every', + 'dataValueAddedRemoved.every', + 'data[key].added.sort', + 'diff:diffLines', + 'diff:structuredPatch', + 'file.endsWith', + 'file.split', + 'files.filter', + 'filesWithDiff.push', + 'filterString', + 'fs.readFileSync', + 'fs.readdirSync', + 'fs.writeFileSync', + 'fs:readdirSync', + 'fs:writeFileSync', + 'keys.reduce', + 'rsn/rsnUtil.ts::program:checkData', + 'rsn/rsnUtil.ts::program:checkDiffs', + 'rsn/rsnUtil.ts::program:filterString', + 'rsn/rsnUtil.ts::program:getDataFromFile', + 'rsn/rsnUtil.ts::program:readFiles', + 'rsn/rsnUtil.ts::program:require', + 'rsn/rsnUtil.ts::program:seePatch', + 'rsn/rsnUtil.ts::program:writeToFile', + 'string[]:reduce', + 'text.replace'], + 'server.ts': ['.fieldAccess', + '.logicalOr', + 'Date', + 'DateConstructor:toUTCString', + 'Error', + 'Metrics.updateLoop', + 'NodeJS.Process:on', + 'Object', + 'Object.keys', + 'WalletModel.create', + '__ecma.String:replace', + '__ecma.String:startsWith', + '__ecma.String[]:every', + 'address.delAddressById', + 'address.getAddress', + 'address.getAddressById', + 'antiCheat.checkForPreSolveInteractions', + "app.delete('/api/Addresss/:id',security.appendUserId(),address.delAddressById())", + "app.delete('/api/Cards/:id',security.appendUserId(),payment.delPaymentMethodById())", + "app.delete('/api/Products/:id',security.denyAll())", + "app.delete('/api/Quantitys/:id',security.denyAll())", + "app.delete('/api/Recycles/:id',security.denyAll())", + "app.disable('x-powered-by')", + "app.enable('trustproxy')", + "app.get('/api/Addresss',security.appendUserId(),address.getAddress())", + "app.get('/api/Addresss/:id',security.appendUserId(),address.getAddressById())", + "app.get('/api/Cards',security.appendUserId(),payment.getPaymentMethods())", + "app.get('/api/Cards/:id',security.appendUserId(),payment.getPaymentMethodById())", + "app.get('/api/Complaints',security.isAuthorized())", + "app.get('/api/Deliverys',delivery.getDeliveryMethods())", + "app.get('/api/Deliverys/:id',delivery.getDeliveryMethod())", + "app.get('/api/PrivacyRequests',security.denyAll())", + "app.get('/api/Recycles',recycles.blockRecycleItems())", + "app.get('/api/Recycles/:id',recycles.getRecycleItem())", + "app.get('/api/SecurityAnswers',security.denyAll())", + "app.get('/api/Users',security.isAuthorized())", + "app.get('/metrics',metrics.serveMetrics())", + "app.get('/profile',security.updateAuthenticatedUsers(),userProfile())", + "app.get('/promotion',videoHandler.promotionVideo())", + "app.get('/redirect',redirect())", + "app.get('/rest/2fa/status',security.isAuthorized(),twoFactorAuth.status())", + "app.get('/rest/admin/application-configuration',appConfiguration())", + "app.get('/rest/admin/application-version',appVersion())", + "app.get('/rest/basket/:id',basket())", + "app.get('/rest/captcha',captcha())", + "app.get('/rest/chatbot/status',chatbot.status())", + "app.get('/rest/continue-code',continueCode.continueCode())", + "app.get('/rest/continue-code-findIt',continueCode.continueCodeFindIt())", + "app.get('/rest/continue-code-fixIt',continueCode.continueCodeFixIt())", + "app.get('/rest/country-mapping',countryMapping())", + "app.get('/rest/deluxe-membership',deluxe.deluxeMembershipStatus())", + "app.get('/rest/image-captcha',imageCaptcha())", + "app.get('/rest/languages',languageList())", + "app.get('/rest/memories',memory.getMemories())", + "app.get('/rest/order-history',orderHistory.orderHistory())", + "app.get('/rest/order-history/orders',security.isAccounting(),orderHistory.allOrders())", + "app.get('/rest/products/:id/reviews',showProductReviews())", + "app.get('/rest/products/search',search())", + "app.get('/rest/repeat-notification',repeatNotification())", + "app.get('/rest/saveLoginIp',saveLoginIp())", + "app.get('/rest/track-order/:id',trackOrder())", + "app.get('/rest/user/authentication-details',authenticatedUsers())", + "app.get('/rest/user/change-password',changePassword())", + "app.get('/rest/user/security-question',securityQuestion())", + "app.get('/rest/user/whoami',security.updateAuthenticatedUsers(),currentUser())", + "app.get('/rest/wallet/balance',security.appendUserId(),wallet.getWalletBalance())", + "app.get('/rest/web3/nftMintListen',nftMint.nftMintListener())", + "app.get('/rest/web3/nftUnlocked',checkKeys.nftUnlocked())", + "app.get('/snippets',vulnCodeSnippet.serveChallengesWithCodeSnippet())", + "app.get('/snippets/:challenge',vulnCodeSnippet.serveCodeSnippet())", + "app.get('/snippets/fixes/:key',vulnCodeFixes.serveCodeFixes())", + "app.get('/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg',easterEgg())", + "app.get('/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us',premiumReward())", + "app.get('/video',videoHandler.getVideo())", + "app.get('/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility',privacyPolicyProof())", + "app.get(['/.well-known/security.txt','/security.txt'],verify.accessControlChallenges())", + "app.options('*',cors())", + "app.patch('/rest/products/reviews',security.isAuthorized(),updateProductReviews())", + "app.post('/api/Addresss',security.appendUserId())", + "app.post('/api/BasketItems',security.appendUserId(),basketItems.quantityCheckBeforeBasketItemAddition(),basketItems.addBasketItem())", + "app.post('/api/Cards',security.appendUserId())", + "app.post('/api/Challenges',security.denyAll())", + "app.post('/api/Complaints',security.isAuthorized())", + "app.post('/api/Feedbacks',captcha.verifyCaptcha())", + "app.post('/api/Feedbacks',verify.captchaBypassChallenge())", + "app.post('/api/Feedbacks',verify.forgedFeedbackChallenge())", + "app.post('/api/PrivacyRequests',security.isAuthorized())", + "app.post('/api/Products',security.isAuthorized())", + "app.post('/api/Quantitys',security.denyAll())", + "app.post('/api/Recycles',security.isAuthorized())", + "app.post('/api/SecurityQuestions',security.denyAll())", + "app.post('/api/Users',(req:Request,res:Response,next:NextFunction)=>{\r" + 'if(req.body.email!==undefined&&req.body.password!==undefined&&req.body.passwordRepeat!==undefined){\r' + 'if(req.body.email.length!==0&&req.body.password.length!==0){\r' + 'req.body.email=req.body.email.trim()\r' + 'req.body.password=req.body.password.trim()\r' + 'req.body.passwordRepeat=req.body.passwordRepeat.trim()\r' + '}else{\r' + "res.status(400).send(res.__('Invalidemail/passwordcannotbeempty'))\r" + '}\r' + '}\r' + 'next()\r' + '})', + "app.post('/api/Users',verify.emptyUserRegistration())", + "app.post('/api/Users',verify.passwordRepeatChallenge())", + "app.post('/api/Users',verify.registerAdminChallenge())", + "app.post('/b2b/v2/orders',b2bOrder())", + "app.post('/file-upload',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),handleZipFileUpload,checkUploadSize,checkFileType,handleXmlUpload)", + "app.post('/profile',updateUserProfile())", + "app.post('/profile/image/file',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),profileImageFileUpload())", + "app.post('/profile/image/url',uploadToMemory.single('file'),profileImageUrlUpload())", + "app.post('/rest/2fa/disable',\r" + 'newRateLimit({windowMs:5*60*1000,max:100}),\r' + 'security.isAuthorized(),\r' + 'twoFactorAuth.disable()\r' + ')', + "app.post('/rest/2fa/setup',\r" + 'newRateLimit({windowMs:5*60*1000,max:100}),\r' + 'security.isAuthorized(),\r' + 'twoFactorAuth.setup()\r' + ')', + "app.post('/rest/2fa/verify',\r" + 'newRateLimit({windowMs:5*60*1000,max:100}),\r' + 'twoFactorAuth.verify()\r' + ')', + "app.post('/rest/basket/:id/checkout',order())", + "app.post('/rest/chatbot/respond',chatbot.process())", + "app.post('/rest/deluxe-membership',security.appendUserId(),deluxe.upgradeToDeluxe())", + "app.post('/rest/memories',uploadToDisk.single('image'),ensureFileIsPassed,security.appendUserId(),metrics.observeFileUploadMetricsMiddleware(),memory.addMemory())", + "app.post('/rest/products/reviews',security.isAuthorized(),likeProductReviews())", + "app.post('/rest/user/data-export',security.appendUserId(),dataExport())", + "app.post('/rest/user/data-export',security.appendUserId(),imageCaptcha.verifyCaptcha())", + "app.post('/rest/user/login',login())", + "app.post('/rest/user/reset-password',resetPassword())", + "app.post('/rest/web3/submitKey',checkKeys.checkKeys())", + "app.post('/rest/web3/walletExploitAddress',web3Wallet.contractExploitListener())", + "app.post('/rest/web3/walletNFTVerify',nftMint.walletNFTVerify())", + "app.post('/snippets/fixes',vulnCodeFixes.checkCorrectFix())", + "app.post('/snippets/verdict',vulnCodeSnippet.checkVulnLines())", + "app.put('/api/Addresss/:id',security.appendUserId())", + "app.put('/api/BasketItems/:id',security.appendUserId(),basketItems.quantityCheckBeforeBasketItemUpdate())", + "app.put('/api/Cards/:id',security.denyAll())", + "app.put('/api/Feedbacks/:id',security.denyAll())", + "app.put('/api/Recycles/:id',security.denyAll())", + "app.put('/rest/basket/:id/coupon/:coupon',coupon())", + "app.put('/rest/continue-code-findIt/apply/:continueCode',restoreProgress.restoreProgressFindIt())", + "app.put('/rest/continue-code-fixIt/apply/:continueCode',restoreProgress.restoreProgressFixIt())", + "app.put('/rest/continue-code/apply/:continueCode',restoreProgress.restoreProgress())", + "app.put('/rest/order-history/:id/delivery-status',security.isAccounting(),orderHistory.toggleDeliveryStatus())", + "app.put('/rest/products/:id/reviews',createProductReviews())", + "app.put('/rest/wallet/balance',security.appendUserId(),wallet.addWalletBalance())", + "app.route('/api/Users/:id')", + "app.set('viewengine','hbs')", + "app.use('/api-docs',swaggerUi.serve,swaggerUi.setup(swaggerDocument))", + "app.use('/api/BasketItems',security.isAuthorized())", + "app.use('/api/BasketItems/:id',security.isAuthorized())", + "app.use('/api/Challenges/:id',security.denyAll())", + "app.use('/api/Complaints/:id',security.denyAll())", + "app.use('/api/Feedbacks/:id',security.isAuthorized())", + "app.use('/api/PrivacyRequests',security.isAuthorized())", + "app.use('/api/PrivacyRequests/:id',security.denyAll())", + "app.use('/api/PrivacyRequests/:id',security.isAuthorized())", + "app.use('/api/Quantitys/:id',security.isAccounting(),ipfilter(['123.456.789'],{mode:'allow'}))", + "app.use('/api/SecurityAnswers/:id',security.denyAll())", + "app.use('/api/SecurityQuestions/:id',security.denyAll())", + "app.use('/assets/i18n',verify.accessControlChallenges())", + "app.use('/assets/public/images/padding',verify.accessControlChallenges())", + "app.use('/assets/public/images/products',verify.accessControlChallenges())", + "app.use('/assets/public/images/uploads',verify.accessControlChallenges())", + "app.use('/b2b/v2',security.isAuthorized())", + "app.use('/dataerasure',dataErasure)", + "app.use('/encryptionkeys',serveIndexMiddleware,serveIndex('encryptionkeys',{icons:true,view:'details'}))", + "app.use('/encryptionkeys/:file',keyServer())", + "app.use('/ftp',serveIndexMiddleware,serveIndex('ftp',{icons:true}))", + "app.use('/ftp(?!/quarantine)/:file',fileServer())", + "app.use('/ftp/quarantine/:file',quarantineServer())", + "app.use('/rest/basket',security.isAuthorized(),security.appendUserId())", + "app.use('/rest/basket/:id',security.isAuthorized())", + "app.use('/rest/basket/:id/order',security.isAuthorized())", + "app.use('/rest/user/authentication-details',security.isAuthorized())", + "app.use('/rest/user/reset-password',newRateLimit({\r" + 'windowMs:5*60*1000,\r' + 'max:100,\r' + "keyGenerator({headers,ip}:{headers:any,ip:any}){returnheaders['X-Forwarded-For']||ip}//vuln-code-snippetvuln-lineresetPasswordMortyChallenge\r" + '}))', + "app.use('/solve/challenges/server-side',verify.serverSideChallenges())", + "app.use('/support/logs',serveIndexMiddleware,serveIndex('logs',{icons:true,view:'details'}))", + "app.use('/support/logs',verify.accessControlChallenges())", + "app.use('/support/logs/:file',logFileServer())", + 'app.use((req:Request,res:Response,next:NextFunction)=>{\r' + "req.url=req.url.replace(/[/]+/g,'/')\r" + 'next()\r' + '})', + 'app.use((req:Request,res:Response,next:NextFunction)=>{\r' + "res.append('X-Recruiting',config.get('application.securityTxt.hiring'))\r" + 'next()\r' + '})', + "app.use(['/.well-known/security.txt','/security.txt'],securityTxt({\r" + "contact:config.get('application.securityTxt.contact'),\r" + "encryption:config.get('application.securityTxt.encryption'),\r" + "acknowledgements:config.get('application.securityTxt.acknowledgements'),\r" + "'Preferred-Languages':[...newSet(locales.map((locale:{key:string})=>locale.key.substr(0,2)))].join(','),\r" + "hiring:config.get('application.securityTxt.hiring'),\r" + 'expires:securityTxtExpiration.toUTCString()\r' + '}))', + 'app.use(angular())', + 'app.use(antiCheat.checkForPreSolveInteractions())', + "app.use(bodyParser.text({type:'*/*'}))", + 'app.use(bodyParser.urlencoded({extended:true}))', + 'app.use(compression())', + "app.use(cookieParser('kekse'))", + 'app.use(cors())', + 'app.use(errorhandler())', + "app.use(express.static(path.resolve('frontend/dist/frontend')))", + 'app.use(featurePolicy({\r' + 'features:{\r' + 'payment:["\'self\'"]\r' + '}\r' + '}))', + 'app.use(functionjsonParser(req:Request,res:Response,next:NextFunction){\r' + '//@ts-expect-errorFIXMEintentionallysavingoriginalrequestinthisproperty\r' + 'req.rawBody=req.body\r' + "if(req.headers['content-type']?.includes('application/json')){\r" + 'if(!req.body){\r' + 'req.body={}\r' + '}\r' + 'if(req.body!==Object(req.body)){//Expensiveworkaroundfor500errorsduringFrisbytestrun(see#640)\r' + 'req.body=JSON.parse(req.body)\r' + '}\r' + '}\r' + 'next()\r' + '})', + 'app.use(helmet.frameguard())', + 'app.use(helmet.noSniff())', + 'app.use(i18n.init)', + 'app.use(metrics.observeRequestMetricsMiddleware())', + "app.use(morgan('combined',{stream:accessLogStream}))", + "app.use(robots({UserAgent:'*',Disallow:'/ftp'}))", + 'app.use(verify.databaseRelatedChallenges())', + 'app.use(verify.errorHandlingChallenge())', + 'app.use(verify.jwtChallenges())', + 'basketItems.addBasketItem', + 'basketItems.quantityCheckBeforeBasketItemAddition', + 'basketItems.quantityCheckBeforeBasketItemUpdate', + 'body-parser:text', + 'body-parser:urlencoded', + 'bodyParser.text', + 'bodyParser.urlencoded', + 'captcha.verifyCaptcha', + 'cb', + 'chatbot.process', + 'chatbot.status', + 'checkKeys.checkKeys', + 'checkKeys.nftUnlocked', + 'client.Gauge', + 'collectDurationPromise', + 'colors.bold', + 'colors.cyan', + 'colors.green', + 'colors.yellow', + 'compression', + 'config.get', + 'console.error', + 'console.log', + 'continueCode.continueCode', + 'continueCode.continueCodeFindIt', + 'continueCode.continueCodeFixIt', + 'cookie-parser', + 'cors', + 'data/static/locales.json:map', + 'delivery.getDeliveryMethod', + 'delivery.getDeliveryMethods', + 'deluxe.deluxeMembershipStatus', + 'deluxe.upgradeToDeluxe', + 'description.indexOf', + 'description.substring', + 'errorhandler', + 'express', + 'express-ipfilter', + 'express-robots-txt', + 'express-security.txt', + 'express.static', + 'express:Response:append', + 'express:static', + 'false:delete', + 'false:disable', + 'false:enable', + 'false:get', + 'false:options', + 'false:patch', + 'false:post', + 'false:put', + 'false:route', + 'false:set', + 'false:use', + 'feature-policy', + 'file-stream-rotator:getStream', + 'finale-rest:initialize', + 'finale-rest:resource', + 'finale.initialize', + 'finale.resource', + 'fs.readFileSync', + 'helmet.frameguard', + 'helmet.noSniff', + 'helmet:frameguard', + 'helmet:noSniff', + 'http:Server', + 'http:close', + 'http:listen', + 'i18n.configure', + 'i18n:configure', + 'imageCaptcha.verifyCaptcha', + 'js-yaml:load', + 'lib/utils:utils:contains', + 'lib/utils:utils:version', + 'locales.map', + 'logger.info', + 'memory.addMemory', + 'memory.getMemories', + 'metrics.observeFileUploadMetricsMiddleware', + 'metrics.observeMetrics', + 'metrics.observeRequestMetricsMiddleware', + 'metrics.serveMetrics', + 'models/wallet:WalletModel:create', + 'morgan:morgan', + 'multer', + 'multer.diskStorage', + 'multer.memoryStorage', + 'multer:diskStorage', + 'multer:memoryStorage', + 'nftMint.nftMintListener', + 'nftMint.walletNFTVerify', + 'orderHistory.allOrders', + 'orderHistory.orderHistory', + 'orderHistory.toggleDeliveryStatus', + 'origEnd.apply', + 'path.relative', + 'path.resolve', + 'path:path:relative', + 'payment.delPaymentMethodById', + 'payment.getPaymentMethodById', + 'payment.getPaymentMethods', + 'process.exit', + 'recycles.blockRecycleItems', + 'recycles.getRecycleItem', + 'registerWebsocketEvents', + 'relativePath.replace', + 'relativePath.startsWith', + 'req.__', + 'req.originalUrl.replace', + 'reqPath.split', + 'require', + 'require("./models").sequelize', + 'require("./models/wallet").WalletModel', + 'res.__', + 'res.append', + 'res.status', + 'restoreProgress.restoreProgress', + 'restoreProgress.restoreProgressFindIt', + 'restoreProgress.restoreProgressFixIt', + 'routes/metrics.ts::program:observeMetrics', + 'security.appendUserId', + 'security.denyAll', + 'security.isAccounting', + 'security.isAuthorized', + 'security.sanitizeFilename', + 'security.updateAuthenticatedUsers', + 'securityTxtExpiration.getFullYear', + 'securityTxtExpiration.setFullYear', + 'securityTxtExpiration.toUTCString', + 'sequelize.sync', + 'serve-index', + 'server.close', + 'server.listen', + 'server.ts::program:captcha', + 'server.ts::program:cb', + 'server.ts::program:clearInterval', + 'server.ts::program:close', + 'server.ts::program:collectDurationPromise', + "server.ts::program:collectDurationPromise('cleanupFtpFolder', " + "require('./lib/startup/cleanupFtpFolder'))", + "server.ts::program:collectDurationPromise('customizeApplication', " + 'customizeApplication)', + "server.ts::program:collectDurationPromise('customizeEasterEgg', " + 'customizeEasterEgg)', + "server.ts::program:collectDurationPromise('restoreOverwrittenFilesWithOriginals', " + "require('./lib/startup/restoreOverwrittenFilesWithOriginals'))", + "server.ts::program:collectDurationPromise('validateConfig', " + "require('./lib/startup/validateConfig'))", + "server.ts::program:collectDurationPromise('validatePreconditions', " + "require('./lib/startup/validatePreconditions'))", + 'server.ts::program:datacreatorEnd', + 'server.ts::program:end', + 'server.ts::program:func', + 'server.ts::program:imageCaptcha', + 'server.ts::program:next', + 'server.ts::program:readyCallback', + "server.ts::program:req.headers['content-type']?.includes", + 'server.ts::program:require', + 'server.ts::program:restoreOverwrittenFilesWithOriginals', + 'server.ts::program:start', + 'startupGauge.set', + 'startupGauge.startTimer', + 'swagger-ui-express:setup', + 'swaggerUi.setup', + 'twoFactorAuth.disable', + 'twoFactorAuth.setup', + 'twoFactorAuth.status', + 'twoFactorAuth.verify', + 'uploadToDisk.single', + 'uploadToMemory.single', + 'utils.contains', + 'utils.version', + 'verify.accessControlChallenges', + 'verify.captchaBypassChallenge', + 'verify.databaseRelatedChallenges', + 'verify.emptyUserRegistration', + 'verify.errorHandlingChallenge', + 'verify.forgedFeedbackChallenge', + 'verify.jwtChallenges', + 'verify.passwordRepeatChallenge', + 'verify.registerAdminChallenge', + 'verify.serverSideChallenges', + 'videoHandler.getVideo', + 'videoHandler.promotionVideo', + 'vulnCodeFixes.checkCorrectFix', + 'vulnCodeFixes.serveCodeFixes', + 'vulnCodeSnippet.checkVulnLines', + 'vulnCodeSnippet.serveChallengesWithCodeSnippet', + 'vulnCodeSnippet.serveCodeSnippet', + 'wallet.addWalletBalance', + 'wallet.getWalletBalance', + 'web3Wallet.contractExploitListener', + 'yaml.load'], + 'server.ts::program:anonymous1:anonymous10:_anon_cdecl': ['continue', + 'instance'], + 'server.ts::program:anonymous1:anonymous11:_anon_cdecl': ['continue', + 'instance'], + 'server.ts::program:anonymous1:anonymous12:_anon_cdecl': ['continue', + 'instance'], + 'server.ts::program:anonymous1:anonymous13:_anon_cdecl': ['continue', + 'instance'], + 'server.ts::program:anonymous1:anonymous2:_anon_cdecl': ['key'], + 'server.ts::program:anonymous1:anonymous4:_anon_cdecl': ['key'], + 'server.ts::program:anonymous1:anonymous6:_anon_cdecl': ['continue', + 'instance'], + 'server.ts::program:anonymous1:anonymous7:_anon_cdecl': ['continue', + 'instance'], + 'server.ts::program:anonymous1:anonymous8:_anon_cdecl': ['continue', + 'instance'], + 'server.ts::program:anonymous1:anonymous9:_anon_cdecl': ['continue', + 'instance'], + 'server.ts::program:anonymous1:keyGenerator:_anon_cdecl': ['headers', 'ip']} + methods = js_usages_1.methods_to_endpoints(methods) + assert methods == { + 'file_names': {'routes/dataErasure.ts': {'resolved_methods': {"router.get('/',async(req:Request,res:Response,next:NextFunction):Promise=>{\rconstloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\rif(!loggedInUser){\rnext(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\rreturn\r}\rconstemail=loggedInUser.data.email\r\rtry{\rconstanswer=awaitSecurityAnswerModel.findOne({\rinclude:[{\rmodel:UserModel,\rwhere:{email}\r}]\r})\rif(answer==null){\rthrownewError('Noanswerfound!')\r}\rconstquestion=awaitSecurityQuestionModel.findByPk(answer.SecurityQuestionId)\rif(question==null){\rthrownewError('Noquestionfound!')\r}\r\rres.render('dataErasureForm',{userEmail:email,securityQuestion:question.question})\r}catch(error){\rnext(error)\r}\r})": {'endpoints': ['/', + '/Blockedillegalactivityby', + '/Noanswerfound!', + '/Noquestionfound!', + '/dataErasureForm']}, + "router.post('/',async(req:Request,Record,DataErasureRequestParams>,res:Response,next:NextFunction):Promise=>{\rconstloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\rif(!loggedInUser){\rnext(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\rreturn\r}\r\rtry{\rawaitPrivacyRequestModel.create({\rUserId:loggedInUser.data.id,\rdeletionRequested:true\r})\r\rres.clearCookie('token')\rif(req.body.layout){\rconstfilePath:string=path.resolve(req.body.layout).toLowerCase()\rconstisForbiddenFile:boolean=(filePath.includes('ftp')||filePath.includes('ctf.key')||filePath.includes('encryptionkeys'))\rif(!isForbiddenFile){\rres.render('dataErasureResult',{\r...req.body\r},(error,html)=>{\rif(!html||error){\rnext(newError(error.message))\r}else{\r...": {'endpoints': ['/', + '/Blockedillegalactivityby', + '/token', + '/ftp', + '/ctf.key', + '/encryptionkeys', + '/dataErasureResult']}}}, + 'server.ts': {'resolved_methods': {"app.delete('/api/Addresss/:id',security.appendUserId(),address.delAddressById())": {'endpoints': ['/api/Addresss/:id']}, + "app.delete('/api/Cards/:id',security.appendUserId(),payment.delPaymentMethodById())": {'endpoints': ['/api/Cards/:id']}, + "app.delete('/api/Products/:id',security.denyAll())": {'endpoints': ['/api/Products/:id']}, + "app.delete('/api/Quantitys/:id',security.denyAll())": {'endpoints': ['/api/Quantitys/:id']}, + "app.delete('/api/Recycles/:id',security.denyAll())": {'endpoints': ['/api/Recycles/:id']}, + "app.enable('trustproxy')": {'endpoints': ['/trustproxy']}, + "app.get('/api/Addresss',security.appendUserId(),address.getAddress())": {'endpoints': ['/api/Addresss']}, + "app.get('/api/Addresss/:id',security.appendUserId(),address.getAddressById())": {'endpoints': ['/api/Addresss/:id']}, + "app.get('/api/Cards',security.appendUserId(),payment.getPaymentMethods())": {'endpoints': ['/api/Cards']}, + "app.get('/api/Cards/:id',security.appendUserId(),payment.getPaymentMethodById())": {'endpoints': ['/api/Cards/:id']}, + "app.get('/api/Complaints',security.isAuthorized())": {'endpoints': ['/api/Complaints']}, + "app.get('/api/Deliverys',delivery.getDeliveryMethods())": {'endpoints': ['/api/Deliverys']}, + "app.get('/api/Deliverys/:id',delivery.getDeliveryMethod())": {'endpoints': ['/api/Deliverys/:id']}, + "app.get('/api/PrivacyRequests',security.denyAll())": {'endpoints': ['/api/PrivacyRequests']}, + "app.get('/api/Recycles',recycles.blockRecycleItems())": {'endpoints': ['/api/Recycles']}, + "app.get('/api/Recycles/:id',recycles.getRecycleItem())": {'endpoints': ['/api/Recycles/:id']}, + "app.get('/api/SecurityAnswers',security.denyAll())": {'endpoints': ['/api/SecurityAnswers']}, + "app.get('/api/Users',security.isAuthorized())": {'endpoints': ['/api/Users']}, + "app.get('/metrics',metrics.serveMetrics())": {'endpoints': ['/metrics']}, + "app.get('/profile',security.updateAuthenticatedUsers(),userProfile())": {'endpoints': ['/profile']}, + "app.get('/promotion',videoHandler.promotionVideo())": {'endpoints': ['/promotion']}, + "app.get('/redirect',redirect())": {'endpoints': ['/redirect']}, + "app.get('/rest/2fa/status',security.isAuthorized(),twoFactorAuth.status())": {'endpoints': ['/rest/2fa/status']}, + "app.get('/rest/admin/application-configuration',appConfiguration())": {'endpoints': ['/rest/admin/application-configuration']}, + "app.get('/rest/admin/application-version',appVersion())": {'endpoints': ['/rest/admin/application-version']}, + "app.get('/rest/basket/:id',basket())": {'endpoints': ['/rest/basket/:id']}, + "app.get('/rest/captcha',captcha())": {'endpoints': ['/rest/captcha']}, + "app.get('/rest/chatbot/status',chatbot.status())": {'endpoints': ['/rest/chatbot/status']}, + "app.get('/rest/continue-code',continueCode.continueCode())": {'endpoints': ['/rest/continue-code']}, + "app.get('/rest/continue-code-findIt',continueCode.continueCodeFindIt())": {'endpoints': ['/rest/continue-code-findIt']}, + "app.get('/rest/continue-code-fixIt',continueCode.continueCodeFixIt())": {'endpoints': ['/rest/continue-code-fixIt']}, + "app.get('/rest/country-mapping',countryMapping())": {'endpoints': ['/rest/country-mapping']}, + "app.get('/rest/deluxe-membership',deluxe.deluxeMembershipStatus())": {'endpoints': ['/rest/deluxe-membership']}, + "app.get('/rest/image-captcha',imageCaptcha())": {'endpoints': ['/rest/image-captcha']}, + "app.get('/rest/languages',languageList())": {'endpoints': ['/rest/languages']}, + "app.get('/rest/memories',memory.getMemories())": {'endpoints': ['/rest/memories']}, + "app.get('/rest/order-history',orderHistory.orderHistory())": {'endpoints': ['/rest/order-history']}, + "app.get('/rest/order-history/orders',security.isAccounting(),orderHistory.allOrders())": {'endpoints': ['/rest/order-history/orders']}, + "app.get('/rest/products/:id/reviews',showProductReviews())": {'endpoints': ['/rest/products/:id/reviews']}, + "app.get('/rest/products/search',search())": {'endpoints': ['/rest/products/search']}, + "app.get('/rest/repeat-notification',repeatNotification())": {'endpoints': ['/rest/repeat-notification']}, + "app.get('/rest/saveLoginIp',saveLoginIp())": {'endpoints': ['/rest/saveLoginIp']}, + "app.get('/rest/track-order/:id',trackOrder())": {'endpoints': ['/rest/track-order/:id']}, + "app.get('/rest/user/authentication-details',authenticatedUsers())": {'endpoints': ['/rest/user/authentication-details']}, + "app.get('/rest/user/change-password',changePassword())": {'endpoints': ['/rest/user/change-password']}, + "app.get('/rest/user/security-question',securityQuestion())": {'endpoints': ['/rest/user/security-question']}, + "app.get('/rest/user/whoami',security.updateAuthenticatedUsers(),currentUser())": {'endpoints': ['/rest/user/whoami']}, + "app.get('/rest/wallet/balance',security.appendUserId(),wallet.getWalletBalance())": {'endpoints': ['/rest/wallet/balance']}, + "app.get('/rest/web3/nftMintListen',nftMint.nftMintListener())": {'endpoints': ['/rest/web3/nftMintListen']}, + "app.get('/rest/web3/nftUnlocked',checkKeys.nftUnlocked())": {'endpoints': ['/rest/web3/nftUnlocked']}, + "app.get('/snippets',vulnCodeSnippet.serveChallengesWithCodeSnippet())": {'endpoints': ['/snippets']}, + "app.get('/snippets/:challenge',vulnCodeSnippet.serveCodeSnippet())": {'endpoints': ['/snippets/:challenge']}, + "app.get('/snippets/fixes/:key',vulnCodeFixes.serveCodeFixes())": {'endpoints': ['/snippets/fixes/:key']}, + "app.get('/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg',easterEgg())": {'endpoints': ['/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg']}, + "app.get('/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us',premiumReward())": {'endpoints': ['/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us']}, + "app.get('/video',videoHandler.getVideo())": {'endpoints': ['/video']}, + "app.get('/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility',privacyPolicyProof())": {'endpoints': ['/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility']}, + "app.get(['/.well-known/security.txt','/security.txt'],verify.accessControlChallenges())": {'endpoints': ['/.well-known/security.txt', + '/security.txt']}, + "app.patch('/rest/products/reviews',security.isAuthorized(),updateProductReviews())": {'endpoints': ['/rest/products/reviews']}, + "app.post('/api/Addresss',security.appendUserId())": {'endpoints': ['/api/Addresss']}, + "app.post('/api/BasketItems',security.appendUserId(),basketItems.quantityCheckBeforeBasketItemAddition(),basketItems.addBasketItem())": {'endpoints': ['/api/BasketItems']}, + "app.post('/api/Cards',security.appendUserId())": {'endpoints': ['/api/Cards']}, + "app.post('/api/Challenges',security.denyAll())": {'endpoints': ['/api/Challenges']}, + "app.post('/api/Complaints',security.isAuthorized())": {'endpoints': ['/api/Complaints']}, + "app.post('/api/Feedbacks',captcha.verifyCaptcha())": {'endpoints': ['/api/Feedbacks']}, + "app.post('/api/Feedbacks',verify.captchaBypassChallenge())": {'endpoints': ['/api/Feedbacks']}, + "app.post('/api/Feedbacks',verify.forgedFeedbackChallenge())": {'endpoints': ['/api/Feedbacks']}, + "app.post('/api/PrivacyRequests',security.isAuthorized())": {'endpoints': ['/api/PrivacyRequests']}, + "app.post('/api/Products',security.isAuthorized())": {'endpoints': ['/api/Products']}, + "app.post('/api/Quantitys',security.denyAll())": {'endpoints': ['/api/Quantitys']}, + "app.post('/api/Recycles',security.isAuthorized())": {'endpoints': ['/api/Recycles']}, + "app.post('/api/SecurityQuestions',security.denyAll())": {'endpoints': ['/api/SecurityQuestions']}, + "app.post('/api/Users',(req:Request,res:Response,next:NextFunction)=>{\rif(req.body.email!==undefined&&req.body.password!==undefined&&req.body.passwordRepeat!==undefined){\rif(req.body.email.length!==0&&req.body.password.length!==0){\rreq.body.email=req.body.email.trim()\rreq.body.password=req.body.password.trim()\rreq.body.passwordRepeat=req.body.passwordRepeat.trim()\r}else{\rres.status(400).send(res.__('Invalidemail/passwordcannotbeempty'))\r}\r}\rnext()\r})": {'endpoints': ['/api/Users', + '/Invalidemail/passwordcannotbeempty']}, + "app.post('/api/Users',verify.emptyUserRegistration())": {'endpoints': ['/api/Users']}, + "app.post('/api/Users',verify.passwordRepeatChallenge())": {'endpoints': ['/api/Users']}, + "app.post('/api/Users',verify.registerAdminChallenge())": {'endpoints': ['/api/Users']}, + "app.post('/b2b/v2/orders',b2bOrder())": {'endpoints': ['/b2b/v2/orders']}, + "app.post('/file-upload',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),handleZipFileUpload,checkUploadSize,checkFileType,handleXmlUpload)": {'endpoints': ['/file-upload', + '/file']}, + "app.post('/profile',updateUserProfile())": {'endpoints': ['/profile']}, + "app.post('/profile/image/file',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),profileImageFileUpload())": {'endpoints': ['/profile/image/file', + '/file']}, + "app.post('/profile/image/url',uploadToMemory.single('file'),profileImageUrlUpload())": {'endpoints': ['/profile/image/url', + '/file']}, + "app.post('/rest/2fa/disable',\rnewRateLimit({windowMs:5*60*1000,max:100}),\rsecurity.isAuthorized(),\rtwoFactorAuth.disable()\r)": {'endpoints': ['/rest/2fa/disable']}, + "app.post('/rest/2fa/setup',\rnewRateLimit({windowMs:5*60*1000,max:100}),\rsecurity.isAuthorized(),\rtwoFactorAuth.setup()\r)": {'endpoints': ['/rest/2fa/setup']}, + "app.post('/rest/2fa/verify',\rnewRateLimit({windowMs:5*60*1000,max:100}),\rtwoFactorAuth.verify()\r)": {'endpoints': ['/rest/2fa/verify']}, + "app.post('/rest/basket/:id/checkout',order())": {'endpoints': ['/rest/basket/:id/checkout']}, + "app.post('/rest/chatbot/respond',chatbot.process())": {'endpoints': ['/rest/chatbot/respond']}, + "app.post('/rest/deluxe-membership',security.appendUserId(),deluxe.upgradeToDeluxe())": {'endpoints': ['/rest/deluxe-membership']}, + "app.post('/rest/memories',uploadToDisk.single('image'),ensureFileIsPassed,security.appendUserId(),metrics.observeFileUploadMetricsMiddleware(),memory.addMemory())": {'endpoints': ['/rest/memories', + '/image']}, + "app.post('/rest/products/reviews',security.isAuthorized(),likeProductReviews())": {'endpoints': ['/rest/products/reviews']}, + "app.post('/rest/user/data-export',security.appendUserId(),dataExport())": {'endpoints': ['/rest/user/data-export']}, + "app.post('/rest/user/data-export',security.appendUserId(),imageCaptcha.verifyCaptcha())": {'endpoints': ['/rest/user/data-export']}, + "app.post('/rest/user/login',login())": {'endpoints': ['/rest/user/login']}, + "app.post('/rest/user/reset-password',resetPassword())": {'endpoints': ['/rest/user/reset-password']}, + "app.post('/rest/web3/submitKey',checkKeys.checkKeys())": {'endpoints': ['/rest/web3/submitKey']}, + "app.post('/rest/web3/walletExploitAddress',web3Wallet.contractExploitListener())": {'endpoints': ['/rest/web3/walletExploitAddress']}, + "app.post('/rest/web3/walletNFTVerify',nftMint.walletNFTVerify())": {'endpoints': ['/rest/web3/walletNFTVerify']}, + "app.post('/snippets/fixes',vulnCodeFixes.checkCorrectFix())": {'endpoints': ['/snippets/fixes']}, + "app.post('/snippets/verdict',vulnCodeSnippet.checkVulnLines())": {'endpoints': ['/snippets/verdict']}, + "app.put('/api/Addresss/:id',security.appendUserId())": {'endpoints': ['/api/Addresss/:id']}, + "app.put('/api/BasketItems/:id',security.appendUserId(),basketItems.quantityCheckBeforeBasketItemUpdate())": {'endpoints': ['/api/BasketItems/:id']}, + "app.put('/api/Cards/:id',security.denyAll())": {'endpoints': ['/api/Cards/:id']}, + "app.put('/api/Feedbacks/:id',security.denyAll())": {'endpoints': ['/api/Feedbacks/:id']}, + "app.put('/api/Recycles/:id',security.denyAll())": {'endpoints': ['/api/Recycles/:id']}, + "app.put('/rest/basket/:id/coupon/:coupon',coupon())": {'endpoints': ['/rest/basket/:id/coupon/:coupon']}, + "app.put('/rest/continue-code-findIt/apply/:continueCode',restoreProgress.restoreProgressFindIt())": {'endpoints': ['/rest/continue-code-findIt/apply/:continueCode']}, + "app.put('/rest/continue-code-fixIt/apply/:continueCode',restoreProgress.restoreProgressFixIt())": {'endpoints': ['/rest/continue-code-fixIt/apply/:continueCode']}, + "app.put('/rest/continue-code/apply/:continueCode',restoreProgress.restoreProgress())": {'endpoints': ['/rest/continue-code/apply/:continueCode']}, + "app.put('/rest/order-history/:id/delivery-status',security.isAccounting(),orderHistory.toggleDeliveryStatus())": {'endpoints': ['/rest/order-history/:id/delivery-status']}, + "app.put('/rest/products/:id/reviews',createProductReviews())": {'endpoints': ['/rest/products/:id/reviews']}, + "app.put('/rest/wallet/balance',security.appendUserId(),wallet.addWalletBalance())": {'endpoints': ['/rest/wallet/balance']}, + "app.route('/api/Users/:id')": {'endpoints': ['/api/Users/:id']}, + "app.set('viewengine','hbs')": {'endpoints': ['/viewengine', + '/hbs']}, + "app.use('/api-docs',swaggerUi.serve,swaggerUi.setup(swaggerDocument))": {'endpoints': ['/api-docs']}, + "app.use('/api/BasketItems',security.isAuthorized())": {'endpoints': ['/api/BasketItems']}, + "app.use('/api/BasketItems/:id',security.isAuthorized())": {'endpoints': ['/api/BasketItems/:id']}, + "app.use('/api/Challenges/:id',security.denyAll())": {'endpoints': ['/api/Challenges/:id']}, + "app.use('/api/Complaints/:id',security.denyAll())": {'endpoints': ['/api/Complaints/:id']}, + "app.use('/api/Feedbacks/:id',security.isAuthorized())": {'endpoints': ['/api/Feedbacks/:id']}, + "app.use('/api/PrivacyRequests',security.isAuthorized())": {'endpoints': ['/api/PrivacyRequests']}, + "app.use('/api/PrivacyRequests/:id',security.denyAll())": {'endpoints': ['/api/PrivacyRequests/:id']}, + "app.use('/api/PrivacyRequests/:id',security.isAuthorized())": {'endpoints': ['/api/PrivacyRequests/:id']}, + "app.use('/api/Quantitys/:id',security.isAccounting(),ipfilter(['123.456.789'],{mode:'allow'}))": {'endpoints': ['/api/Quantitys/:id', + '/123.456.789']}, + "app.use('/api/SecurityAnswers/:id',security.denyAll())": {'endpoints': ['/api/SecurityAnswers/:id']}, + "app.use('/api/SecurityQuestions/:id',security.denyAll())": {'endpoints': ['/api/SecurityQuestions/:id']}, + "app.use('/assets/i18n',verify.accessControlChallenges())": {'endpoints': ['/assets/i18n']}, + "app.use('/assets/public/images/padding',verify.accessControlChallenges())": {'endpoints': ['/assets/public/images/padding']}, + "app.use('/assets/public/images/products',verify.accessControlChallenges())": {'endpoints': ['/assets/public/images/products']}, + "app.use('/assets/public/images/uploads',verify.accessControlChallenges())": {'endpoints': ['/assets/public/images/uploads']}, + "app.use('/b2b/v2',security.isAuthorized())": {'endpoints': ['/b2b/v2']}, + "app.use('/dataerasure',dataErasure)": {'endpoints': ['/dataerasure']}, + "app.use('/encryptionkeys',serveIndexMiddleware,serveIndex('encryptionkeys',{icons:true,view:'details'}))": {'endpoints': ['/encryptionkeys', + '/encryptionkeys', + '/details']}, + "app.use('/encryptionkeys/:file',keyServer())": {'endpoints': ['/encryptionkeys/:file']}, + "app.use('/ftp',serveIndexMiddleware,serveIndex('ftp',{icons:true}))": {'endpoints': ['/ftp', + '/ftp']}, + "app.use('/ftp(?!/quarantine)/:file',fileServer())": {'endpoints': ['/{regex_param_1}/:file']}, + "app.use('/ftp/quarantine/:file',quarantineServer())": {'endpoints': ['/ftp/quarantine/:file']}, + "app.use('/rest/basket',security.isAuthorized(),security.appendUserId())": {'endpoints': ['/rest/basket']}, + "app.use('/rest/basket/:id',security.isAuthorized())": {'endpoints': ['/rest/basket/:id']}, + "app.use('/rest/basket/:id/order',security.isAuthorized())": {'endpoints': ['/rest/basket/:id/order']}, + "app.use('/rest/user/authentication-details',security.isAuthorized())": {'endpoints': ['/rest/user/authentication-details']}, + "app.use('/rest/user/reset-password',newRateLimit({\rwindowMs:5*60*1000,\rmax:100,\rkeyGenerator({headers,ip}:{headers:any,ip:any}){returnheaders['X-Forwarded-For']||ip}//vuln-code-snippetvuln-lineresetPasswordMortyChallenge\r}))": {'endpoints': ['/rest/user/reset-password']}, + "app.use('/solve/challenges/server-side',verify.serverSideChallenges())": {'endpoints': ['/solve/challenges/server-side']}, + "app.use('/support/logs',serveIndexMiddleware,serveIndex('logs',{icons:true,view:'details'}))": {'endpoints': ['/support/logs', + '/logs', + '/details']}, + "app.use('/support/logs',verify.accessControlChallenges())": {'endpoints': ['/support/logs']}, + "app.use('/support/logs/:file',logFileServer())": {'endpoints': ['/support/logs/:file']}, + "app.use((req:Request,res:Response,next:NextFunction)=>{\rreq.url=req.url.replace(/[/]+/g,'/')\rnext()\r})": {'endpoints': ['/']}, + "app.use((req:Request,res:Response,next:NextFunction)=>{\rres.append('X-Recruiting',config.get('application.securityTxt.hiring'))\rnext()\r})": {'endpoints': ['/application.securityTxt.hiring']}, + "app.use(['/.well-known/security.txt','/security.txt'],securityTxt({\rcontact:config.get('application.securityTxt.contact'),\rencryption:config.get('application.securityTxt.encryption'),\racknowledgements:config.get('application.securityTxt.acknowledgements'),\r'Preferred-Languages':[...newSet(locales.map((locale:{key:string})=>locale.key.substr(0,2)))].join(','),\rhiring:config.get('application.securityTxt.hiring'),\rexpires:securityTxtExpiration.toUTCString()\r}))": {'endpoints': ['/.well-known/security.txt', + '/security.txt', + '/application.securityTxt.contact', + '/application.securityTxt.encryption', + '/application.securityTxt.acknowledgements', + '/Preferred-Languages', + '/application.securityTxt.hiring']}, + "app.use(cookieParser('kekse'))": {'endpoints': ['/kekse']}, + "app.use(express.static(path.resolve('frontend/dist/frontend')))": {'endpoints': ['/frontend/dist/frontend']}, + "app.use(morgan('combined',{stream:accessLogStream}))": {'endpoints': ['/combined']}, + "app.use(robots({UserAgent:'*',Disallow:'/ftp'}))": {'endpoints': ['/ftp']}}}}} + + js_usages_1.target_line_nums = js_usages_1._identify_target_line_nums(methods) + js_usages_1.file_endpoint_map = js_usages_1.create_file_to_method_dict(methods) + file_endpoint_map = sort_result(js_usages_1.file_endpoint_map) + assert file_endpoint_map == {'/': ['routes/dataErasure.ts', 'server.ts'], + '/.well-known/security.txt': ['server.ts'], + '/123.456.789': ['server.ts'], + '/Blockedillegalactivityby': ['routes/dataErasure.ts'], + '/Invalidemail/passwordcannotbeempty': ['server.ts'], + '/Noanswerfound!': ['routes/dataErasure.ts'], + '/Noquestionfound!': ['routes/dataErasure.ts'], + '/Preferred-Languages': ['server.ts'], + '/api-docs': ['server.ts'], + '/api/Addresss': ['server.ts'], + '/api/Addresss/:id': ['server.ts'], + '/api/BasketItems': ['server.ts'], + '/api/BasketItems/:id': ['server.ts'], + '/api/Cards': ['server.ts'], + '/api/Cards/:id': ['server.ts'], + '/api/Challenges': ['server.ts'], + '/api/Challenges/:id': ['server.ts'], + '/api/Complaints': ['server.ts'], + '/api/Complaints/:id': ['server.ts'], + '/api/Deliverys': ['server.ts'], + '/api/Deliverys/:id': ['server.ts'], + '/api/Feedbacks': ['server.ts'], + '/api/Feedbacks/:id': ['server.ts'], + '/api/PrivacyRequests': ['server.ts'], + '/api/PrivacyRequests/:id': ['server.ts'], + '/api/Products': ['server.ts'], + '/api/Products/:id': ['server.ts'], + '/api/Quantitys': ['server.ts'], + '/api/Quantitys/:id': ['server.ts'], + '/api/Recycles': ['server.ts'], + '/api/Recycles/:id': ['server.ts'], + '/api/SecurityAnswers': ['server.ts'], + '/api/SecurityAnswers/:id': ['server.ts'], + '/api/SecurityQuestions': ['server.ts'], + '/api/SecurityQuestions/:id': ['server.ts'], + '/api/Users': ['server.ts'], + '/api/Users/:id': ['server.ts'], + '/application.securityTxt.acknowledgements': ['server.ts'], + '/application.securityTxt.contact': ['server.ts'], + '/application.securityTxt.encryption': ['server.ts'], + '/application.securityTxt.hiring': ['server.ts'], + '/assets/i18n': ['server.ts'], + '/assets/public/images/padding': ['server.ts'], + '/assets/public/images/products': ['server.ts'], + '/assets/public/images/uploads': ['server.ts'], + '/b2b/v2': ['server.ts'], + '/b2b/v2/orders': ['server.ts'], + '/combined': ['server.ts'], + '/ctf.key': ['routes/dataErasure.ts'], + '/dataErasureForm': ['routes/dataErasure.ts'], + '/dataErasureResult': ['routes/dataErasure.ts'], + '/dataerasure': ['server.ts'], + '/details': ['server.ts'], + '/encryptionkeys': ['routes/dataErasure.ts', 'server.ts'], + '/encryptionkeys/:file': ['server.ts'], + '/file': ['server.ts'], + '/file-upload': ['server.ts'], + '/frontend/dist/frontend': ['server.ts'], + '/ftp': ['routes/dataErasure.ts', 'server.ts'], + '/ftp/quarantine/:file': ['server.ts'], + '/hbs': ['server.ts'], + '/image': ['server.ts'], + '/kekse': ['server.ts'], + '/logs': ['server.ts'], + '/metrics': ['server.ts'], + '/profile': ['server.ts'], + '/profile/image/file': ['server.ts'], + '/profile/image/url': ['server.ts'], + '/promotion': ['server.ts'], + '/redirect': ['server.ts'], + '/rest/2fa/disable': ['server.ts'], + '/rest/2fa/setup': ['server.ts'], + '/rest/2fa/status': ['server.ts'], + '/rest/2fa/verify': ['server.ts'], + '/rest/admin/application-configuration': ['server.ts'], + '/rest/admin/application-version': ['server.ts'], + '/rest/basket': ['server.ts'], + '/rest/basket/:id': ['server.ts'], + '/rest/basket/:id/checkout': ['server.ts'], + '/rest/basket/:id/coupon/:coupon': ['server.ts'], + '/rest/basket/:id/order': ['server.ts'], + '/rest/captcha': ['server.ts'], + '/rest/chatbot/respond': ['server.ts'], + '/rest/chatbot/status': ['server.ts'], + '/rest/continue-code': ['server.ts'], + '/rest/continue-code-findIt': ['server.ts'], + '/rest/continue-code-findIt/apply/:continueCode': ['server.ts'], + '/rest/continue-code-fixIt': ['server.ts'], + '/rest/continue-code-fixIt/apply/:continueCode': ['server.ts'], + '/rest/continue-code/apply/:continueCode': ['server.ts'], + '/rest/country-mapping': ['server.ts'], + '/rest/deluxe-membership': ['server.ts'], + '/rest/image-captcha': ['server.ts'], + '/rest/languages': ['server.ts'], + '/rest/memories': ['server.ts'], + '/rest/order-history': ['server.ts'], + '/rest/order-history/:id/delivery-status': ['server.ts'], + '/rest/order-history/orders': ['server.ts'], + '/rest/products/:id/reviews': ['server.ts'], + '/rest/products/reviews': ['server.ts'], + '/rest/products/search': ['server.ts'], + '/rest/repeat-notification': ['server.ts'], + '/rest/saveLoginIp': ['server.ts'], + '/rest/track-order/:id': ['server.ts'], + '/rest/user/authentication-details': ['server.ts'], + '/rest/user/change-password': ['server.ts'], + '/rest/user/data-export': ['server.ts'], + '/rest/user/login': ['server.ts'], + '/rest/user/reset-password': ['server.ts'], + '/rest/user/security-question': ['server.ts'], + '/rest/user/whoami': ['server.ts'], + '/rest/wallet/balance': ['server.ts'], + '/rest/web3/nftMintListen': ['server.ts'], + '/rest/web3/nftUnlocked': ['server.ts'], + '/rest/web3/submitKey': ['server.ts'], + '/rest/web3/walletExploitAddress': ['server.ts'], + '/rest/web3/walletNFTVerify': ['server.ts'], + '/security.txt': ['server.ts'], + '/snippets': ['server.ts'], + '/snippets/:challenge': ['server.ts'], + '/snippets/fixes': ['server.ts'], + '/snippets/fixes/:key': ['server.ts'], + '/snippets/verdict': ['server.ts'], + '/solve/challenges/server-side': ['server.ts'], + '/support/logs': ['server.ts'], + '/support/logs/:file': ['server.ts'], + '/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg': ['server.ts'], + '/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us': ['server.ts'], + '/token': ['routes/dataErasure.ts'], + '/trustproxy': ['server.ts'], + '/video': ['server.ts'], + '/viewengine': ['server.ts'], + '/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility': ['server.ts'], + '/{regex_param_1}/:file': ['server.ts']} + assert js_usages_1.target_line_nums == {'routes/dataErasure.ts': {'()': [80]}, + 'server.ts': {'()': [694], 'server.ts::program:readyCallback': [702]}} + + methods = js_usages_1._process_calls(methods) + assert methods == { + 'file_names': {'routes/dataErasure.ts': {'resolved_methods': {"router.get('/',async(req:Request,res:Response,next:NextFunction):Promise=>{\rconstloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\rif(!loggedInUser){\rnext(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\rreturn\r}\rconstemail=loggedInUser.data.email\r\rtry{\rconstanswer=awaitSecurityAnswerModel.findOne({\rinclude:[{\rmodel:UserModel,\rwhere:{email}\r}]\r})\rif(answer==null){\rthrownewError('Noanswerfound!')\r}\rconstquestion=awaitSecurityQuestionModel.findByPk(answer.SecurityQuestionId)\rif(question==null){\rthrownewError('Noquestionfound!')\r}\r\rres.render('dataErasureForm',{userEmail:email,securityQuestion:question.question})\r}catch(error){\rnext(error)\r}\r})": {'calls': [{'callName': 'get', + 'columnNumber': 0, + 'isExternal': None, + 'lineNumber': 18, + 'paramTypes': ['__ecma.String', + 'LAMBDA'], + 'resolvedMethod': "router.get('/',async(req:Request,res:Response,next:NextFunction):Promise=>{\r" + 'constloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\r' + 'if(!loggedInUser){\r' + "next(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\r" + 'return\r' + '}\r' + 'constemail=loggedInUser.data.email\r' + '\r' + 'try{\r' + 'constanswer=awaitSecurityAnswerModel.findOne({\r' + 'include:[{\r' + 'model:UserModel,\r' + 'where:{email}\r' + '}]\r' + '})\r' + 'if(answer==null){\r' + "thrownewError('Noanswerfound!')\r" + '}\r' + 'constquestion=awaitSecurityQuestionModel.findByPk(answer.SecurityQuestionId)\r' + 'if(question==null){\r' + "thrownewError('Noquestionfound!')\r" + '}\r' + '\r' + "res.render('dataErasureForm',{userEmail:email,securityQuestion:question.question})\r" + '}catch(error){\r' + 'next(error)\r' + '}\r' + '})', + 'returnType': 'ANY'}], + 'endpoints': ['/', + '/Blockedillegalactivityby', + '/Noanswerfound!', + '/Noquestionfound!', + '/dataErasureForm'], + 'line_nos': [18]}, + "router.post('/',async(req:Request,Record,DataErasureRequestParams>,res:Response,next:NextFunction):Promise=>{\rconstloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\rif(!loggedInUser){\rnext(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\rreturn\r}\r\rtry{\rawaitPrivacyRequestModel.create({\rUserId:loggedInUser.data.id,\rdeletionRequested:true\r})\r\rres.clearCookie('token')\rif(req.body.layout){\rconstfilePath:string=path.resolve(req.body.layout).toLowerCase()\rconstisForbiddenFile:boolean=(filePath.includes('ftp')||filePath.includes('ctf.key')||filePath.includes('encryptionkeys'))\rif(!isForbiddenFile){\rres.render('dataErasureResult',{\r...req.body\r},(error,html)=>{\rif(!html||error){\rnext(newError(error.message))\r}else{\r...": {'calls': [{'callName': 'post', + 'columnNumber': 0, + 'isExternal': None, + 'lineNumber': 54, + 'paramTypes': ['__ecma.String', + 'LAMBDA'], + 'resolvedMethod': "router.post('/',async(req:Request,Record,DataErasureRequestParams>,res:Response,next:NextFunction):Promise=>{\r" + 'constloggedInUser=insecurity.authenticatedUsers.get(req.cookies.token)\r' + 'if(!loggedInUser){\r' + "next(newError('Blockedillegalactivityby'+req.socket.remoteAddress))\r" + 'return\r' + '}\r' + '\r' + 'try{\r' + 'awaitPrivacyRequestModel.create({\r' + 'UserId:loggedInUser.data.id,\r' + 'deletionRequested:true\r' + '})\r' + '\r' + "res.clearCookie('token')\r" + 'if(req.body.layout){\r' + 'constfilePath:string=path.resolve(req.body.layout).toLowerCase()\r' + "constisForbiddenFile:boolean=(filePath.includes('ftp')||filePath.includes('ctf.key')||filePath.includes('encryptionkeys'))\r" + 'if(!isForbiddenFile){\r' + "res.render('dataErasureResult',{\r" + '...req.body\r' + '},(error,html)=>{\r' + 'if(!html||error){\r' + 'next(newError(error.message))\r' + '}else{\r' + '...', + 'returnType': 'ANY'}], + 'endpoints': ['/', + '/Blockedillegalactivityby', + '/token', + '/ftp', + '/ctf.key', + '/encryptionkeys', + '/dataErasureResult'], + 'line_nos': [54]}}}, + 'server.ts': {'resolved_methods': {"app.delete('/api/Addresss/:id',security.appendUserId(),address.delAddressById())": {'calls': [{'callName': 'delete', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 415, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.delete('/api/Addresss/:id',security.appendUserId(),address.delAddressById())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Addresss/:id'], + 'line_nos': [415]}, + "app.delete('/api/Cards/:id',security.appendUserId(),payment.delPaymentMethodById())": {'calls': [{'callName': 'delete', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 405, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.delete('/api/Cards/:id',security.appendUserId(),payment.delPaymentMethodById())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Cards/:id'], + 'line_nos': [405]}, + "app.delete('/api/Products/:id',security.denyAll())": {'calls': [{'callName': 'delete', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 340, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.delete('/api/Products/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Products/:id'], + 'line_nos': [340]}, + "app.delete('/api/Quantitys/:id',security.denyAll())": {'calls': [{'callName': 'delete', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 393, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.delete('/api/Quantitys/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Quantitys/:id'], + 'line_nos': [393]}, + "app.delete('/api/Recycles/:id',security.denyAll())": {'calls': [{'callName': 'delete', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 354, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.delete('/api/Recycles/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Recycles/:id'], + 'line_nos': [354]}, + "app.enable('trustproxy')": {'calls': [{'callName': 'enable', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 312, + 'paramTypes': ['__ecma.String'], + 'resolvedMethod': "app.enable('trustproxy')", + 'returnType': 'ANY'}], + 'endpoints': ['/trustproxy'], + 'line_nos': [312]}, + "app.get('/api/Addresss',security.appendUserId(),address.getAddress())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 413, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.get('/api/Addresss',security.appendUserId(),address.getAddress())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Addresss'], + 'line_nos': [413]}, + "app.get('/api/Addresss/:id',security.appendUserId(),address.getAddressById())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 416, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.get('/api/Addresss/:id',security.appendUserId(),address.getAddressById())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Addresss/:id'], + 'line_nos': [416]}, + "app.get('/api/Cards',security.appendUserId(),payment.getPaymentMethods())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 403, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.get('/api/Cards',security.appendUserId(),payment.getPaymentMethods())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Cards'], + 'line_nos': [403]}, + "app.get('/api/Cards/:id',security.appendUserId(),payment.getPaymentMethodById())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 406, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.get('/api/Cards/:id',security.appendUserId(),payment.getPaymentMethodById())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Cards/:id'], + 'line_nos': [406]}, + "app.get('/api/Complaints',security.isAuthorized())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 345, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.get('/api/Complaints',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Complaints'], + 'line_nos': [345]}, + "app.get('/api/Deliverys',delivery.getDeliveryMethods())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 417, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/api/Deliverys',delivery.getDeliveryMethods())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Deliverys'], + 'line_nos': [417]}, + "app.get('/api/Deliverys/:id',delivery.getDeliveryMethod())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 418, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/api/Deliverys/:id',delivery.getDeliveryMethod())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Deliverys/:id'], + 'line_nos': [418]}, + "app.get('/api/PrivacyRequests',security.denyAll())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 409, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.get('/api/PrivacyRequests',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/PrivacyRequests'], + 'line_nos': [409]}, + "app.get('/api/Recycles',recycles.blockRecycleItems())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 349, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/api/Recycles',recycles.blockRecycleItems())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Recycles'], + 'line_nos': [349]}, + "app.get('/api/Recycles/:id',recycles.getRecycleItem())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 352, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/api/Recycles/:id',recycles.getRecycleItem())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Recycles/:id'], + 'line_nos': [352]}, + "app.get('/api/SecurityAnswers',security.denyAll())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 359, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.get('/api/SecurityAnswers',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/SecurityAnswers'], + 'line_nos': [359]}, + "app.get('/api/Users',security.isAuthorized())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 332, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.get('/api/Users',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Users'], + 'line_nos': [332]}, + "app.get('/metrics',metrics.serveMetrics())": {'calls': [{'callName': 'get', + 'columnNumber': 0, + 'isExternal': True, + 'lineNumber': 678, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/metrics',metrics.serveMetrics())", + 'returnType': 'ANY'}], + 'endpoints': ['/metrics'], + 'line_nos': [678]}, + "app.get('/profile',security.updateAuthenticatedUsers(),userProfile())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 620, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.get('/profile',security.updateAuthenticatedUsers(),userProfile())", + 'returnType': 'ANY'}], + 'endpoints': ['/profile'], + 'line_nos': [620]}, + "app.get('/promotion',videoHandler.promotionVideo())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 616, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/promotion',videoHandler.promotionVideo())", + 'returnType': 'ANY'}], + 'endpoints': ['/promotion'], + 'line_nos': [616]}, + "app.get('/redirect',redirect())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 613, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/redirect',redirect())", + 'returnType': 'ANY'}], + 'endpoints': ['/redirect'], + 'line_nos': [613]}, + "app.get('/rest/2fa/status',security.isAuthorized(),twoFactorAuth.status())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 427, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:', + 'routes/2fa.ts::program:status'], + 'resolvedMethod': "app.get('/rest/2fa/status',security.isAuthorized(),twoFactorAuth.status())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/rest/2fa/status'], + 'line_nos': [427]}, + "app.get('/rest/admin/application-configuration',appConfiguration())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 561, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/admin/application-configuration',appConfiguration())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/admin/application-configuration'], + 'line_nos': [561]}, + "app.get('/rest/admin/application-version',appVersion())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 560, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/admin/application-version',appVersion())", + 'returnType': 'ANY'}, + {'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 569, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/admin/application-version',appVersion())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/admin/application-version'], + 'line_nos': [560, + 569]}, + "app.get('/rest/basket/:id',basket())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 557, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/basket/:id',basket())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/basket/:id'], + 'line_nos': [557]}, + "app.get('/rest/captcha',captcha())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 570, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/captcha',captcha())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/captcha'], + 'line_nos': [570]}, + "app.get('/rest/chatbot/status',chatbot.status())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 586, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/chatbot/status',chatbot.status())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/chatbot/status'], + 'line_nos': [586]}, + "app.get('/rest/continue-code',continueCode.continueCode())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 563, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/continue-code',continueCode.continueCode())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/continue-code'], + 'line_nos': [563]}, + "app.get('/rest/continue-code-findIt',continueCode.continueCodeFindIt())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 564, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/continue-code-findIt',continueCode.continueCodeFindIt())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/continue-code-findIt'], + 'line_nos': [564]}, + "app.get('/rest/continue-code-fixIt',continueCode.continueCodeFixIt())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 565, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/continue-code-fixIt',continueCode.continueCodeFixIt())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/continue-code-fixIt'], + 'line_nos': [565]}, + "app.get('/rest/country-mapping',countryMapping())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 573, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/country-mapping',countryMapping())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/country-mapping'], + 'line_nos': [573]}, + "app.get('/rest/deluxe-membership',deluxe.deluxeMembershipStatus())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 583, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/deluxe-membership',deluxe.deluxeMembershipStatus())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/deluxe-membership'], + 'line_nos': [583]}, + "app.get('/rest/image-captcha',imageCaptcha())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 571, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/image-captcha',imageCaptcha())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/image-captcha'], + 'line_nos': [571]}, + "app.get('/rest/languages',languageList())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 577, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/languages',languageList())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/languages'], + 'line_nos': [577]}, + "app.get('/rest/memories',memory.getMemories())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 585, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/memories',memory.getMemories())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/memories'], + 'line_nos': [585]}, + "app.get('/rest/order-history',orderHistory.orderHistory())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 578, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/order-history',orderHistory.orderHistory())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/order-history'], + 'line_nos': [578]}, + "app.get('/rest/order-history/orders',security.isAccounting(),orderHistory.allOrders())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 579, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.get('/rest/order-history/orders',security.isAccounting(),orderHistory.allOrders())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/order-history/orders'], + 'line_nos': [579]}, + "app.get('/rest/products/:id/reviews',showProductReviews())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 589, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/products/:id/reviews',showProductReviews())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/products/:id/reviews'], + 'line_nos': [589]}, + "app.get('/rest/products/search',search())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 556, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/products/search',search())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/products/search'], + 'line_nos': [556]}, + "app.get('/rest/repeat-notification',repeatNotification())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 562, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/repeat-notification',repeatNotification())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/repeat-notification'], + 'line_nos': [562]}, + "app.get('/rest/saveLoginIp',saveLoginIp())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 574, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/saveLoginIp',saveLoginIp())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/saveLoginIp'], + 'line_nos': [574]}, + "app.get('/rest/track-order/:id',trackOrder())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 572, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/track-order/:id',trackOrder())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/track-order/:id'], + 'line_nos': [572]}, + "app.get('/rest/user/authentication-details',authenticatedUsers())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 555, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/user/authentication-details',authenticatedUsers())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/user/authentication-details'], + 'line_nos': [555]}, + "app.get('/rest/user/change-password',changePassword())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 551, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/user/change-password',changePassword())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/user/change-password'], + 'line_nos': [551]}, + "app.get('/rest/user/security-question',securityQuestion())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 553, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/user/security-question',securityQuestion())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/user/security-question'], + 'line_nos': [553]}, + "app.get('/rest/user/whoami',security.updateAuthenticatedUsers(),currentUser())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 554, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.get('/rest/user/whoami',security.updateAuthenticatedUsers(),currentUser())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/user/whoami'], + 'line_nos': [554]}, + "app.get('/rest/wallet/balance',security.appendUserId(),wallet.getWalletBalance())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 581, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.get('/rest/wallet/balance',security.appendUserId(),wallet.getWalletBalance())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/wallet/balance'], + 'line_nos': [581]}, + "app.get('/rest/web3/nftMintListen',nftMint.nftMintListener())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 597, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/web3/nftMintListen',nftMint.nftMintListener())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/web3/nftMintListen'], + 'line_nos': [597]}, + "app.get('/rest/web3/nftUnlocked',checkKeys.nftUnlocked())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 596, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/rest/web3/nftUnlocked',checkKeys.nftUnlocked())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/web3/nftUnlocked'], + 'line_nos': [596]}, + "app.get('/snippets',vulnCodeSnippet.serveChallengesWithCodeSnippet())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 624, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/snippets',vulnCodeSnippet.serveChallengesWithCodeSnippet())", + 'returnType': 'ANY'}], + 'endpoints': ['/snippets'], + 'line_nos': [624]}, + "app.get('/snippets/:challenge',vulnCodeSnippet.serveCodeSnippet())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 625, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/snippets/:challenge',vulnCodeSnippet.serveCodeSnippet())", + 'returnType': 'ANY'}], + 'endpoints': ['/snippets/:challenge'], + 'line_nos': [625]}, + "app.get('/snippets/fixes/:key',vulnCodeFixes.serveCodeFixes())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 627, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/snippets/fixes/:key',vulnCodeFixes.serveCodeFixes())", + 'returnType': 'ANY'}], + 'endpoints': ['/snippets/fixes/:key'], + 'line_nos': [627]}, + "app.get('/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg',easterEgg())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 605, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg',easterEgg())", + 'returnType': 'ANY'}], + 'endpoints': ['/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg'], + 'line_nos': [605]}, + "app.get('/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us',premiumReward())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 606, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us',premiumReward())", + 'returnType': 'ANY'}], + 'endpoints': ['/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us'], + 'line_nos': [606]}, + "app.get('/video',videoHandler.getVideo())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 617, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/video',videoHandler.getVideo())", + 'returnType': 'ANY'}], + 'endpoints': ['/video'], + 'line_nos': [617]}, + "app.get('/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility',privacyPolicyProof())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 607, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.get('/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility',privacyPolicyProof())", + 'returnType': 'ANY'}], + 'endpoints': ['/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility'], + 'line_nos': [607]}, + "app.get(['/.well-known/security.txt','/security.txt'],verify.accessControlChallenges())": {'calls': [{'callName': 'get', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 196, + 'paramTypes': ['ANY', + 'ANY'], + 'resolvedMethod': "app.get(['/.well-known/security.txt','/security.txt'],verify.accessControlChallenges())", + 'returnType': 'ANY'}], + 'endpoints': ['/.well-known/security.txt', + '/security.txt'], + 'line_nos': [196]}, + "app.patch('/rest/products/reviews',security.isAuthorized(),updateProductReviews())": {'calls': [{'callName': 'patch', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 591, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:', + 'ANY'], + 'resolvedMethod': "app.patch('/rest/products/reviews',security.isAuthorized(),updateProductReviews())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/rest/products/reviews'], + 'line_nos': [591]}, + "app.post('/api/Addresss',security.appendUserId())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 412, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/api/Addresss',security.appendUserId())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Addresss'], + 'line_nos': [412]}, + "app.post('/api/BasketItems',security.appendUserId(),basketItems.quantityCheckBeforeBasketItemAddition(),basketItems.addBasketItem())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 391, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.post('/api/BasketItems',security.appendUserId(),basketItems.quantityCheckBeforeBasketItemAddition(),basketItems.addBasketItem())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/BasketItems'], + 'line_nos': [391]}, + "app.post('/api/Cards',security.appendUserId())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 402, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/api/Cards',security.appendUserId())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Cards'], + 'line_nos': [402]}, + "app.post('/api/Challenges',security.denyAll())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 342, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.post('/api/Challenges',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Challenges'], + 'line_nos': [342]}, + "app.post('/api/Complaints',security.isAuthorized())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 346, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.post('/api/Complaints',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Complaints'], + 'line_nos': [346]}, + "app.post('/api/Feedbacks',captcha.verifyCaptcha())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 368, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/api/Feedbacks',captcha.verifyCaptcha())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Feedbacks'], + 'line_nos': [368]}, + "app.post('/api/Feedbacks',verify.captchaBypassChallenge())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 370, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/api/Feedbacks',verify.captchaBypassChallenge())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Feedbacks'], + 'line_nos': [370]}, + "app.post('/api/Feedbacks',verify.forgedFeedbackChallenge())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 366, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/api/Feedbacks',verify.forgedFeedbackChallenge())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Feedbacks'], + 'line_nos': [366]}, + "app.post('/api/PrivacyRequests',security.isAuthorized())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 408, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.post('/api/PrivacyRequests',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/PrivacyRequests'], + 'line_nos': [408]}, + "app.post('/api/Products',security.isAuthorized())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 338, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.post('/api/Products',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Products'], + 'line_nos': [338]}, + "app.post('/api/Quantitys',security.denyAll())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 394, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.post('/api/Quantitys',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Quantitys'], + 'line_nos': [394]}, + "app.post('/api/Recycles',security.isAuthorized())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 350, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.post('/api/Recycles',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Recycles'], + 'line_nos': [350]}, + "app.post('/api/SecurityQuestions',security.denyAll())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 356, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.post('/api/SecurityQuestions',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/SecurityQuestions'], + 'line_nos': [356]}, + "app.post('/api/Users',(req:Request,res:Response,next:NextFunction)=>{\rif(req.body.email!==undefined&&req.body.password!==undefined&&req.body.passwordRepeat!==undefined){\rif(req.body.email.length!==0&&req.body.password.length!==0){\rreq.body.email=req.body.email.trim()\rreq.body.password=req.body.password.trim()\rreq.body.passwordRepeat=req.body.passwordRepeat.trim()\r}else{\rres.status(400).send(res.__('Invalidemail/passwordcannotbeempty'))\r}\r}\rnext()\r})": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 372, + 'paramTypes': ['__ecma.String', + 'LAMBDA'], + 'resolvedMethod': "app.post('/api/Users',(req:Request,res:Response,next:NextFunction)=>{\r" + 'if(req.body.email!==undefined&&req.body.password!==undefined&&req.body.passwordRepeat!==undefined){\r' + 'if(req.body.email.length!==0&&req.body.password.length!==0){\r' + 'req.body.email=req.body.email.trim()\r' + 'req.body.password=req.body.password.trim()\r' + 'req.body.passwordRepeat=req.body.passwordRepeat.trim()\r' + '}else{\r' + "res.status(400).send(res.__('Invalidemail/passwordcannotbeempty'))\r" + '}\r' + '}\r' + 'next()\r' + '})', + 'returnType': 'ANY'}], + 'endpoints': ['/api/Users', + '/Invalidemail/passwordcannotbeempty'], + 'line_nos': [372]}, + "app.post('/api/Users',verify.emptyUserRegistration())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 386, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/api/Users',verify.emptyUserRegistration())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Users'], + 'line_nos': [386]}, + "app.post('/api/Users',verify.passwordRepeatChallenge())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 385, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/api/Users',verify.passwordRepeatChallenge())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Users'], + 'line_nos': [385]}, + "app.post('/api/Users',verify.registerAdminChallenge())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 384, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/api/Users',verify.registerAdminChallenge())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Users'], + 'line_nos': [384]}, + "app.post('/b2b/v2/orders',b2bOrder())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 602, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/b2b/v2/orders',b2bOrder())", + 'returnType': 'ANY'}], + 'endpoints': ['/b2b/v2/orders'], + 'line_nos': [602]}, + "app.post('/file-upload',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),handleZipFileUpload,checkUploadSize,checkFileType,handleXmlUpload)": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 281, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'position': 8, + 'resolvedMethod': "app.post('/file-upload',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),handleZipFileUpload,checkUploadSize,checkFileType,handleXmlUpload)", + 'returnType': 'ANY'}, + {'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 281, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.post('/file-upload',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),handleZipFileUpload,checkUploadSize,checkFileType,handleXmlUpload)", + 'returnType': 'ANY'}, + {'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 281, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'position': 7, + 'resolvedMethod': "app.post('/file-upload',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),handleZipFileUpload,checkUploadSize,checkFileType,handleXmlUpload)", + 'returnType': 'ANY'}, + {'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 281, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'position': 3, + 'resolvedMethod': "app.post('/file-upload',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),handleZipFileUpload,checkUploadSize,checkFileType,handleXmlUpload)", + 'returnType': 'ANY'}, + {'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 281, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'position': 5, + 'resolvedMethod': "app.post('/file-upload',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),handleZipFileUpload,checkUploadSize,checkFileType,handleXmlUpload)", + 'returnType': 'ANY'}, + {'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 281, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'position': 6, + 'resolvedMethod': "app.post('/file-upload',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),handleZipFileUpload,checkUploadSize,checkFileType,handleXmlUpload)", + 'returnType': 'ANY'}], + 'endpoints': ['/file-upload', + '/file'], + 'line_nos': [281, + 281, + 281, + 281, + 281, + 281]}, + "app.post('/profile',updateUserProfile())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 621, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/profile',updateUserProfile())", + 'returnType': 'ANY'}], + 'endpoints': ['/profile'], + 'line_nos': [621]}, + "app.post('/profile/image/file',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),profileImageFileUpload())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 282, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.post('/profile/image/file',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),profileImageFileUpload())", + 'returnType': 'ANY'}, + {'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 282, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'position': 3, + 'resolvedMethod': "app.post('/profile/image/file',uploadToMemory.single('file'),ensureFileIsPassed,metrics.observeFileUploadMetricsMiddleware(),profileImageFileUpload())", + 'returnType': 'ANY'}], + 'endpoints': ['/profile/image/file', + '/file'], + 'line_nos': [282, + 282]}, + "app.post('/profile/image/url',uploadToMemory.single('file'),profileImageUrlUpload())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 283, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.post('/profile/image/url',uploadToMemory.single('file'),profileImageUrlUpload())", + 'returnType': 'ANY'}], + 'endpoints': ['/profile/image/url', + '/file'], + 'line_nos': [283]}, + "app.post('/rest/2fa/disable',\rnewRateLimit({windowMs:5*60*1000,max:100}),\rsecurity.isAuthorized(),\rtwoFactorAuth.disable()\r)": {'calls': [{'callName': 'RateLimit', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 435, + 'paramTypes': ['ANY'], + 'resolvedMethod': "app.post('/rest/2fa/disable',\r" + 'newRateLimit({windowMs:5*60*1000,max:100}),\r' + 'security.isAuthorized(),\r' + 'twoFactorAuth.disable()\r' + ')', + 'returnType': 'ANY'}], + 'endpoints': ['/rest/2fa/disable'], + 'line_nos': [435]}, + "app.post('/rest/2fa/setup',\rnewRateLimit({windowMs:5*60*1000,max:100}),\rsecurity.isAuthorized(),\rtwoFactorAuth.setup()\r)": {'calls': [{'callName': 'RateLimit', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 429, + 'paramTypes': ['ANY'], + 'resolvedMethod': "app.post('/rest/2fa/setup',\r" + 'newRateLimit({windowMs:5*60*1000,max:100}),\r' + 'security.isAuthorized(),\r' + 'twoFactorAuth.setup()\r' + ')', + 'returnType': 'ANY'}], + 'endpoints': ['/rest/2fa/setup'], + 'line_nos': [429]}, + "app.post('/rest/2fa/verify',\rnewRateLimit({windowMs:5*60*1000,max:100}),\rtwoFactorAuth.verify()\r)": {'calls': [{'callName': 'RateLimit', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 422, + 'paramTypes': ['ANY'], + 'resolvedMethod': "app.post('/rest/2fa/verify',\r" + 'newRateLimit({windowMs:5*60*1000,max:100}),\r' + 'twoFactorAuth.verify()\r' + ')', + 'returnType': 'ANY'}], + 'endpoints': ['/rest/2fa/verify'], + 'line_nos': [422]}, + "app.post('/rest/basket/:id/checkout',order())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 558, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/rest/basket/:id/checkout',order())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/basket/:id/checkout'], + 'line_nos': [558]}, + "app.post('/rest/chatbot/respond',chatbot.process())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 587, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/rest/chatbot/respond',chatbot.process())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/chatbot/respond'], + 'line_nos': [587]}, + "app.post('/rest/deluxe-membership',security.appendUserId(),deluxe.upgradeToDeluxe())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 584, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.post('/rest/deluxe-membership',security.appendUserId(),deluxe.upgradeToDeluxe())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/deluxe-membership'], + 'line_nos': [584]}, + "app.post('/rest/memories',uploadToDisk.single('image'),ensureFileIsPassed,security.appendUserId(),metrics.observeFileUploadMetricsMiddleware(),memory.addMemory())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 284, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.post('/rest/memories',uploadToDisk.single('image'),ensureFileIsPassed,security.appendUserId(),metrics.observeFileUploadMetricsMiddleware(),memory.addMemory())", + 'returnType': 'ANY'}, + {'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 284, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY', + 'ANY', + 'ANY', + 'ANY'], + 'position': 3, + 'resolvedMethod': "app.post('/rest/memories',uploadToDisk.single('image'),ensureFileIsPassed,security.appendUserId(),metrics.observeFileUploadMetricsMiddleware(),memory.addMemory())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/memories', + '/image'], + 'line_nos': [284, + 284]}, + "app.post('/rest/products/reviews',security.isAuthorized(),likeProductReviews())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 592, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:', + 'ANY'], + 'resolvedMethod': "app.post('/rest/products/reviews',security.isAuthorized(),likeProductReviews())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/rest/products/reviews'], + 'line_nos': [592]}, + "app.post('/rest/user/data-export',security.appendUserId(),dataExport())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 576, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.post('/rest/user/data-export',security.appendUserId(),dataExport())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/user/data-export'], + 'line_nos': [576]}, + "app.post('/rest/user/data-export',security.appendUserId(),imageCaptcha.verifyCaptcha())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 575, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.post('/rest/user/data-export',security.appendUserId(),imageCaptcha.verifyCaptcha())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/user/data-export'], + 'line_nos': [575]}, + "app.post('/rest/user/login',login())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 550, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/rest/user/login',login())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/user/login'], + 'line_nos': [550]}, + "app.post('/rest/user/reset-password',resetPassword())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 552, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/rest/user/reset-password',resetPassword())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/user/reset-password'], + 'line_nos': [552]}, + "app.post('/rest/web3/submitKey',checkKeys.checkKeys())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 595, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/rest/web3/submitKey',checkKeys.checkKeys())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/web3/submitKey'], + 'line_nos': [595]}, + "app.post('/rest/web3/walletExploitAddress',web3Wallet.contractExploitListener())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 599, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/rest/web3/walletExploitAddress',web3Wallet.contractExploitListener())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/web3/walletExploitAddress'], + 'line_nos': [599]}, + "app.post('/rest/web3/walletNFTVerify',nftMint.walletNFTVerify())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 598, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/rest/web3/walletNFTVerify',nftMint.walletNFTVerify())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/web3/walletNFTVerify'], + 'line_nos': [598]}, + "app.post('/snippets/fixes',vulnCodeFixes.checkCorrectFix())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 628, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/snippets/fixes',vulnCodeFixes.checkCorrectFix())", + 'returnType': 'ANY'}], + 'endpoints': ['/snippets/fixes'], + 'line_nos': [628]}, + "app.post('/snippets/verdict',vulnCodeSnippet.checkVulnLines())": {'calls': [{'callName': 'post', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 626, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.post('/snippets/verdict',vulnCodeSnippet.checkVulnLines())", + 'returnType': 'ANY'}], + 'endpoints': ['/snippets/verdict'], + 'line_nos': [626]}, + "app.put('/api/Addresss/:id',security.appendUserId())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 414, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.put('/api/Addresss/:id',security.appendUserId())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Addresss/:id'], + 'line_nos': [414]}, + "app.put('/api/BasketItems/:id',security.appendUserId(),basketItems.quantityCheckBeforeBasketItemUpdate())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 390, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.put('/api/BasketItems/:id',security.appendUserId(),basketItems.quantityCheckBeforeBasketItemUpdate())", + 'returnType': 'ANY'}], + 'endpoints': ['/api/BasketItems/:id'], + 'line_nos': [390]}, + "app.put('/api/Cards/:id',security.denyAll())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 404, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.put('/api/Cards/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Cards/:id'], + 'line_nos': [404]}, + "app.put('/api/Feedbacks/:id',security.denyAll())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 397, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.put('/api/Feedbacks/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Feedbacks/:id'], + 'line_nos': [397]}, + "app.put('/api/Recycles/:id',security.denyAll())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 353, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.put('/api/Recycles/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Recycles/:id'], + 'line_nos': [353]}, + "app.put('/rest/basket/:id/coupon/:coupon',coupon())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 559, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.put('/rest/basket/:id/coupon/:coupon',coupon())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/basket/:id/coupon/:coupon'], + 'line_nos': [559]}, + "app.put('/rest/continue-code-findIt/apply/:continueCode',restoreProgress.restoreProgressFindIt())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 566, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.put('/rest/continue-code-findIt/apply/:continueCode',restoreProgress.restoreProgressFindIt())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/continue-code-findIt/apply/:continueCode'], + 'line_nos': [566]}, + "app.put('/rest/continue-code-fixIt/apply/:continueCode',restoreProgress.restoreProgressFixIt())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 567, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.put('/rest/continue-code-fixIt/apply/:continueCode',restoreProgress.restoreProgressFixIt())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/continue-code-fixIt/apply/:continueCode'], + 'line_nos': [567]}, + "app.put('/rest/continue-code/apply/:continueCode',restoreProgress.restoreProgress())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 568, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.put('/rest/continue-code/apply/:continueCode',restoreProgress.restoreProgress())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/continue-code/apply/:continueCode'], + 'line_nos': [568]}, + "app.put('/rest/order-history/:id/delivery-status',security.isAccounting(),orderHistory.toggleDeliveryStatus())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 580, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.put('/rest/order-history/:id/delivery-status',security.isAccounting(),orderHistory.toggleDeliveryStatus())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/order-history/:id/delivery-status'], + 'line_nos': [580]}, + "app.put('/rest/products/:id/reviews',createProductReviews())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 590, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.put('/rest/products/:id/reviews',createProductReviews())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/products/:id/reviews'], + 'line_nos': [590]}, + "app.put('/rest/wallet/balance',security.appendUserId(),wallet.addWalletBalance())": {'calls': [{'callName': 'put', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 582, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.put('/rest/wallet/balance',security.appendUserId(),wallet.addWalletBalance())", + 'returnType': 'ANY'}], + 'endpoints': ['/rest/wallet/balance'], + 'line_nos': [582]}, + "app.route('/api/Users/:id')": {'calls': [{'callName': 'route', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 333, + 'paramTypes': ['__ecma.String'], + 'resolvedMethod': "app.route('/api/Users/:id')", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Users/:id'], + 'line_nos': [333]}, + "app.set('viewengine','hbs')": {'calls': [{'callName': 'set', + 'columnNumber': 0, + 'isExternal': True, + 'lineNumber': 149, + 'paramTypes': ['__ecma.String', + '__ecma.String'], + 'resolvedMethod': "app.set('viewengine','hbs')", + 'returnType': 'ANY'}], + 'endpoints': ['/viewengine', + '/hbs'], + 'line_nos': [149]}, + "app.use('/api-docs',swaggerUi.serve,swaggerUi.setup(swaggerDocument))": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 263, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.use('/api-docs',swaggerUi.serve,swaggerUi.setup(swaggerDocument))", + 'returnType': 'ANY'}], + 'endpoints': ['/api-docs'], + 'line_nos': [263]}, + "app.use('/api/BasketItems',security.isAuthorized())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 327, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/BasketItems',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/BasketItems'], + 'line_nos': [327]}, + "app.use('/api/BasketItems/:id',security.isAuthorized())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 328, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/BasketItems/:id',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/BasketItems/:id'], + 'line_nos': [328]}, + "app.use('/api/Challenges/:id',security.denyAll())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 343, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/Challenges/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Challenges/:id'], + 'line_nos': [343]}, + "app.use('/api/Complaints/:id',security.denyAll())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 347, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/Complaints/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Complaints/:id'], + 'line_nos': [347]}, + "app.use('/api/Feedbacks/:id',security.isAuthorized())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 330, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/Feedbacks/:id',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/Feedbacks/:id'], + 'line_nos': [330]}, + "app.use('/api/PrivacyRequests',security.isAuthorized())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 399, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/PrivacyRequests',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/PrivacyRequests'], + 'line_nos': [399]}, + "app.use('/api/PrivacyRequests/:id',security.denyAll())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 410, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/PrivacyRequests/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/PrivacyRequests/:id'], + 'line_nos': [410]}, + "app.use('/api/PrivacyRequests/:id',security.isAuthorized())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 400, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/PrivacyRequests/:id',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/PrivacyRequests/:id'], + 'line_nos': [400]}, + "app.use('/api/Quantitys/:id',security.isAccounting(),ipfilter(['123.456.789'],{mode:'allow'}))": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 395, + 'paramTypes': ['__ecma.String', + 'ANY', + 'ANY'], + 'resolvedMethod': "app.use('/api/Quantitys/:id',security.isAccounting(),ipfilter(['123.456.789'],{mode:'allow'}))", + 'returnType': 'ANY'}], + 'endpoints': ['/api/Quantitys/:id', + '/123.456.789'], + 'line_nos': [395]}, + "app.use('/api/SecurityAnswers/:id',security.denyAll())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 360, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/SecurityAnswers/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/SecurityAnswers/:id'], + 'line_nos': [360]}, + "app.use('/api/SecurityQuestions/:id',security.denyAll())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 357, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/api/SecurityQuestions/:id',security.denyAll())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/api/SecurityQuestions/:id'], + 'line_nos': [357]}, + "app.use('/assets/i18n',verify.accessControlChallenges())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 216, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/assets/i18n',verify.accessControlChallenges())", + 'returnType': 'ANY'}], + 'endpoints': ['/assets/i18n'], + 'line_nos': [216]}, + "app.use('/assets/public/images/padding',verify.accessControlChallenges())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 213, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/assets/public/images/padding',verify.accessControlChallenges())", + 'returnType': 'ANY'}], + 'endpoints': ['/assets/public/images/padding'], + 'line_nos': [213]}, + "app.use('/assets/public/images/products',verify.accessControlChallenges())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 214, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/assets/public/images/products',verify.accessControlChallenges())", + 'returnType': 'ANY'}], + 'endpoints': ['/assets/public/images/products'], + 'line_nos': [214]}, + "app.use('/assets/public/images/uploads',verify.accessControlChallenges())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 215, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/assets/public/images/uploads',verify.accessControlChallenges())", + 'returnType': 'ANY'}], + 'endpoints': ['/assets/public/images/uploads'], + 'line_nos': [215]}, + "app.use('/b2b/v2',security.isAuthorized())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 388, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/b2b/v2',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/b2b/v2'], + 'line_nos': [388]}, + "app.use('/dataerasure',dataErasure)": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 610, + 'paramTypes': ['__ecma.String', + 'routes/dataErasure:dataErasure'], + 'position': 2, + 'resolvedMethod': "app.use('/dataerasure',dataErasure)", + 'returnType': 'ANY'}, + {'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 610, + 'paramTypes': ['__ecma.String', + 'routes/dataErasure:dataErasure'], + 'resolvedMethod': "app.use('/dataerasure',dataErasure)", + 'returnType': 'ANY'}], + 'endpoints': ['/dataerasure'], + 'line_nos': [610, + 610]}, + "app.use('/encryptionkeys',serveIndexMiddleware,serveIndex('encryptionkeys',{icons:true,view:'details'}))": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 254, + 'paramTypes': ['__ecma.String', + '(req: ' + 'Request>, ' + 'res: ' + 'Response>, ' + 'next: ' + 'NextFunction) ' + '=> ' + 'void', + 'ANY'], + 'resolvedMethod': "app.use('/encryptionkeys',serveIndexMiddleware,serveIndex('encryptionkeys',{icons:true,view:'details'}))", + 'returnType': 'ANY'}], + 'endpoints': ['/encryptionkeys', + '/encryptionkeys', + '/details'], + 'line_nos': [254]}, + "app.use('/encryptionkeys/:file',keyServer())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 255, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/encryptionkeys/:file',keyServer())", + 'returnType': 'ANY'}], + 'endpoints': ['/encryptionkeys/:file'], + 'line_nos': [255]}, + "app.use('/ftp',serveIndexMiddleware,serveIndex('ftp',{icons:true}))": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 249, + 'paramTypes': ['__ecma.String', + '(req: ' + 'Request>, ' + 'res: ' + 'Response>, ' + 'next: ' + 'NextFunction) ' + '=> ' + 'void', + 'ANY'], + 'resolvedMethod': "app.use('/ftp',serveIndexMiddleware,serveIndex('ftp',{icons:true}))", + 'returnType': 'ANY'}], + 'endpoints': ['/ftp', + '/ftp'], + 'line_nos': [249]}, + "app.use('/ftp(?!/quarantine)/:file',fileServer())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 250, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/ftp(?!/quarantine)/:file',fileServer())", + 'returnType': 'ANY'}], + 'endpoints': ['/{regex_param_1}/:file'], + 'line_nos': [250]}, + "app.use('/ftp/quarantine/:file',quarantineServer())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 251, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/ftp/quarantine/:file',quarantineServer())", + 'returnType': 'ANY'}], + 'endpoints': ['/ftp/quarantine/:file'], + 'line_nos': [251]}, + "app.use('/rest/basket',security.isAuthorized(),security.appendUserId())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 325, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:', + 'ANY'], + 'resolvedMethod': "app.use('/rest/basket',security.isAuthorized(),security.appendUserId())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/rest/basket'], + 'line_nos': [325]}, + "app.use('/rest/basket/:id',security.isAuthorized())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 363, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/rest/basket/:id',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/rest/basket/:id'], + 'line_nos': [363]}, + "app.use('/rest/basket/:id/order',security.isAuthorized())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 364, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/rest/basket/:id/order',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/rest/basket/:id/order'], + 'line_nos': [364]}, + "app.use('/rest/user/authentication-details',security.isAuthorized())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 362, + 'paramTypes': ['__ecma.String', + 'express-jwt:expressJwt:'], + 'resolvedMethod': "app.use('/rest/user/authentication-details',security.isAuthorized())", + 'returnType': 'express-jwt:expressJwt:'}], + 'endpoints': ['/rest/user/authentication-details'], + 'line_nos': [362]}, + "app.use('/rest/user/reset-password',newRateLimit({\rwindowMs:5*60*1000,\rmax:100,\rkeyGenerator({headers,ip}:{headers:any,ip:any}){returnheaders['X-Forwarded-For']||ip}//vuln-code-snippetvuln-lineresetPasswordMortyChallenge\r}))": {'calls': [{'callName': 'RateLimit', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 313, + 'paramTypes': ['ANY'], + 'resolvedMethod': "app.use('/rest/user/reset-password',newRateLimit({\r" + 'windowMs:5*60*1000,\r' + 'max:100,\r' + "keyGenerator({headers,ip}:{headers:any,ip:any}){returnheaders['X-Forwarded-For']||ip}//vuln-code-snippetvuln-lineresetPasswordMortyChallenge\r" + '}))', + 'returnType': 'ANY'}], + 'endpoints': ['/rest/user/reset-password'], + 'line_nos': [313]}, + "app.use('/solve/challenges/server-side',verify.serverSideChallenges())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 219, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/solve/challenges/server-side',verify.serverSideChallenges())", + 'returnType': 'ANY'}], + 'endpoints': ['/solve/challenges/server-side'], + 'line_nos': [219]}, + "app.use('/support/logs',serveIndexMiddleware,serveIndex('logs',{icons:true,view:'details'}))": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 258, + 'paramTypes': ['__ecma.String', + '(req: ' + 'Request>, ' + 'res: ' + 'Response>, ' + 'next: ' + 'NextFunction) ' + '=> ' + 'void', + 'ANY'], + 'resolvedMethod': "app.use('/support/logs',serveIndexMiddleware,serveIndex('logs',{icons:true,view:'details'}))", + 'returnType': 'ANY'}], + 'endpoints': ['/support/logs', + '/logs', + '/details'], + 'line_nos': [258]}, + "app.use('/support/logs',verify.accessControlChallenges())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 259, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/support/logs',verify.accessControlChallenges())", + 'returnType': 'ANY'}], + 'endpoints': ['/support/logs'], + 'line_nos': [259]}, + "app.use('/support/logs/:file',logFileServer())": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 260, + 'paramTypes': ['__ecma.String', + 'ANY'], + 'resolvedMethod': "app.use('/support/logs/:file',logFileServer())", + 'returnType': 'ANY'}], + 'endpoints': ['/support/logs/:file'], + 'line_nos': [260]}, + "app.use((req:Request,res:Response,next:NextFunction)=>{\rreq.url=req.url.replace(/[/]+/g,'/')\rnext()\r})": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 185, + 'paramTypes': ['LAMBDA'], + 'resolvedMethod': 'app.use((req:Request,res:Response,next:NextFunction)=>{\r' + "req.url=req.url.replace(/[/]+/g,'/')\r" + 'next()\r' + '})', + 'returnType': 'ANY'}], + 'endpoints': ['/'], + 'line_nos': [185]}, + "app.use((req:Request,res:Response,next:NextFunction)=>{\rres.append('X-Recruiting',config.get('application.securityTxt.hiring'))\rnext()\r})": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 179, + 'paramTypes': ['LAMBDA'], + 'resolvedMethod': 'app.use((req:Request,res:Response,next:NextFunction)=>{\r' + "res.append('X-Recruiting',config.get('application.securityTxt.hiring'))\r" + 'next()\r' + '})', + 'returnType': 'ANY'}], + 'endpoints': ['/application.securityTxt.hiring'], + 'line_nos': [179]}, + "app.use(['/.well-known/security.txt','/security.txt'],securityTxt({\rcontact:config.get('application.securityTxt.contact'),\rencryption:config.get('application.securityTxt.encryption'),\racknowledgements:config.get('application.securityTxt.acknowledgements'),\r'Preferred-Languages':[...newSet(locales.map((locale:{key:string})=>locale.key.substr(0,2)))].join(','),\rhiring:config.get('application.securityTxt.hiring'),\rexpires:securityTxtExpiration.toUTCString()\r}))": {'calls': [{'callName': 'Set', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 197, + 'paramTypes': ['ANY'], + 'resolvedMethod': "app.use(['/.well-known/security.txt','/security.txt'],securityTxt({\r" + "contact:config.get('application.securityTxt.contact'),\r" + "encryption:config.get('application.securityTxt.encryption'),\r" + "acknowledgements:config.get('application.securityTxt.acknowledgements'),\r" + "'Preferred-Languages':[...newSet(locales.map((locale:{key:string})=>locale.key.substr(0,2)))].join(','),\r" + "hiring:config.get('application.securityTxt.hiring'),\r" + 'expires:securityTxtExpiration.toUTCString()\r' + '}))', + 'returnType': 'ANY'}], + 'endpoints': ['/.well-known/security.txt', + '/security.txt', + '/application.securityTxt.contact', + '/application.securityTxt.encryption', + '/application.securityTxt.acknowledgements', + '/Preferred-Languages', + '/application.securityTxt.hiring'], + 'line_nos': [197]}, + "app.use(cookieParser('kekse'))": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 266, + 'paramTypes': ['ANY'], + 'resolvedMethod': "app.use(cookieParser('kekse'))", + 'returnType': 'ANY'}], + 'endpoints': ['/kekse'], + 'line_nos': [266]}, + "app.use(express.static(path.resolve('frontend/dist/frontend')))": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 265, + 'paramTypes': ['ANY'], + 'resolvedMethod': "app.use(express.static(path.resolve('frontend/dist/frontend')))", + 'returnType': 'ANY'}], + 'endpoints': ['/frontend/dist/frontend'], + 'line_nos': [265]}, + "app.use(morgan('combined',{stream:accessLogStream}))": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 308, + 'paramTypes': ['ANY'], + 'resolvedMethod': "app.use(morgan('combined',{stream:accessLogStream}))", + 'returnType': 'ANY'}], + 'endpoints': ['/combined'], + 'line_nos': [308]}, + "app.use(robots({UserAgent:'*',Disallow:'/ftp'}))": {'calls': [{'callName': 'use', + 'columnNumber': 2, + 'isExternal': True, + 'lineNumber': 207, + 'paramTypes': ['ANY'], + 'resolvedMethod': "app.use(robots({UserAgent:'*',Disallow:'/ftp'}))", + 'returnType': 'ANY'}], + 'endpoints': ['/ftp'], + 'line_nos': [207]}}}}} + + endpoints = js_usages_1.populate_endpoints(methods) + endpoints = sort_result(endpoints) + assert endpoints == {'/': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18, 54], + 'server.ts': [185]}}}, + '/.well-known/security.txt': {'get': {'parameters': [{'in': 'header', + 'name': 'ANY'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [196, + 197]}}}, + '/123.456.789': {'x-atom-usages': {'call': {'server.ts': [395]}}}, + '/Blockedillegalactivityby': {'get': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18, + 54]}}}, + '/Invalidemail/passwordcannotbeempty': {'post': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [372]}}}, + '/Noanswerfound!': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18]}}}, + '/Noquestionfound!': {'get': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18]}}}, + '/Preferred-Languages': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [197]}}}, + '/api-docs': {'x-atom-usages': {'call': {'server.ts': [263]}}}, + '/api/Addresss': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [412, 413]}}}, + '/api/Addresss/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [414, + 415, + 416]}}}, + '/api/BasketItems': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [327, 391]}}}, + '/api/BasketItems/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [328, + 390]}}}, + '/api/Cards': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [402, 403]}}}, + '/api/Cards/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [404, 405, 406]}}}, + '/api/Challenges': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [342]}}}, + '/api/Challenges/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [343]}}}, + '/api/Complaints': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [345, 346]}}}, + '/api/Complaints/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [347]}}}, + '/api/Deliverys': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [417]}}}, + '/api/Deliverys/{id}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [418]}}}, + '/api/Feedbacks': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [366, 368, 370]}}}, + '/api/Feedbacks/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [330, 397]}}}, + '/api/PrivacyRequests': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [399, + 408, + 409]}}}, + '/api/PrivacyRequests/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [400, + 410]}}}, + '/api/Products': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [338]}}}, + '/api/Products/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [340]}}}, + '/api/Quantitys': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [394]}}}, + '/api/Quantitys/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [393, 395]}}}, + '/api/Recycles': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [349, 350]}}}, + '/api/Recycles/{id}': {'delete': {'parameters': [], 'responses': {}}, + 'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [352, + 353, + 354]}}}, + '/api/SecurityAnswers': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [359]}}}, + '/api/SecurityAnswers/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [360]}}}, + '/api/SecurityQuestions': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [356]}}}, + '/api/SecurityQuestions/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [357]}}}, + '/api/Users': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [332, + 372, + 384, + 385, + 386]}}}, + '/api/Users/{id}': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [333]}}}, + '/application.securityTxt.acknowledgements': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [197]}}}, + '/application.securityTxt.contact': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [197]}}}, + '/application.securityTxt.encryption': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [197]}}}, + '/application.securityTxt.hiring': {'get': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [179, + 197]}}}, + '/assets/i18n': {'x-atom-usages': {'call': {'server.ts': [216]}}}, + '/assets/public/images/padding': {'x-atom-usages': {'call': {'server.ts': [213]}}}, + '/assets/public/images/products': {'x-atom-usages': {'call': {'server.ts': [214]}}}, + '/assets/public/images/uploads': {'x-atom-usages': {'call': {'server.ts': [215]}}}, + '/b2b/v2': {'x-atom-usages': {'call': {'server.ts': [388]}}}, + '/b2b/v2/orders': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [602]}}}, + '/combined': {'x-atom-usages': {'call': {'server.ts': [308]}}}, + '/ctf.key': {'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54]}}}, + '/dataErasureForm': {'get': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [18]}}}, + '/dataErasureResult': {'post': {'parameters': [{'in': 'header', + 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54]}}}, + '/dataerasure': {'x-atom-usages': {'call': {'server.ts': [610]}}}, + '/details': {'x-atom-usages': {'call': {'server.ts': [254, 258]}}}, + '/encryptionkeys': {'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54], + 'server.ts': [254]}}}, + '/encryptionkeys/{file}': {'parameters': [{'in': 'path', + 'name': 'file', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [255]}}}, + '/file': {'post': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [281, 282, 283]}}}, + '/file-upload': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [281]}}}, + '/frontend/dist/frontend': {'x-atom-usages': {'call': {'server.ts': [265]}}}, + '/ftp': {'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54], + 'server.ts': [207, 249]}}}, + '/ftp/quarantine/{file}': {'parameters': [{'in': 'path', + 'name': 'file', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [251]}}}, + '/hbs': {'x-atom-usages': {'call': {'server.ts': [149]}}}, + '/image': {'post': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [284]}}}, + '/kekse': {'x-atom-usages': {'call': {'server.ts': [266]}}}, + '/logs': {'x-atom-usages': {'call': {'server.ts': [258]}}}, + '/metrics': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [678]}}}, + '/profile': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [620, 621]}}}, + '/profile/image/file': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [282]}}}, + '/profile/image/url': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [283]}}}, + '/promotion': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [616]}}}, + '/redirect': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [613]}}}, + '/rest/2fa/disable': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [435]}}}, + '/rest/2fa/setup': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [429]}}}, + '/rest/2fa/status': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}, + {'in': 'header', + 'name': 'routes/2fa.ts::program:status'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [427]}}}, + '/rest/2fa/verify': {'post': {'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [422]}}}, + '/rest/admin/application-configuration': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [561]}}}, + '/rest/admin/application-version': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [560, + 569]}}}, + '/rest/basket': {'x-atom-usages': {'call': {'server.ts': [325]}}}, + '/rest/basket/{id}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [363, 557]}}}, + '/rest/basket/{id}/checkout': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'post': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [558]}}}, + '/rest/basket/{id}/coupon/{coupon}': {'parameters': [{'in': 'path', + 'name': 'coupon', + 'required': True}, + {'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [559]}}}, + '/rest/basket/{id}/order': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [364]}}}, + '/rest/captcha': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [570]}}}, + '/rest/chatbot/respond': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [587]}}}, + '/rest/chatbot/status': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [586]}}}, + '/rest/continue-code': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [563]}}}, + '/rest/continue-code-findIt': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [564]}}}, + '/rest/continue-code-findIt/apply/{continueCode}': {'parameters': [{'in': 'path', + 'name': 'continueCode', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [566]}}}, + '/rest/continue-code-fixIt': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [565]}}}, + '/rest/continue-code-fixIt/apply/{continueCode}': {'parameters': [{'in': 'path', + 'name': 'continueCode', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [567]}}}, + '/rest/continue-code/apply/{continueCode}': {'parameters': [{'in': 'path', + 'name': 'continueCode', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [568]}}}, + '/rest/country-mapping': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [573]}}}, + '/rest/deluxe-membership': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [583, + 584]}}}, + '/rest/image-captcha': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [571]}}}, + '/rest/languages': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [577]}}}, + '/rest/memories': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [284, 585]}}}, + '/rest/order-history': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [578]}}}, + '/rest/order-history/orders': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [579]}}}, + '/rest/order-history/{id}/delivery-status': {'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [580]}}}, + '/rest/products/reviews': {'patch': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}, + {'in': 'header', + 'name': 'express-jwt:expressJwt:'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [591, + 592]}}}, + '/rest/products/search': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [556]}}}, + '/rest/products/{id}/reviews': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'put': {'parameters': [], 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [589, + 590]}}}, + '/rest/repeat-notification': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [562]}}}, + '/rest/saveLoginIp': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [574]}}}, + '/rest/track-order/{id}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'id', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [572]}}}, + '/rest/user/authentication-details': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [362, + 555]}}}, + '/rest/user/change-password': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [551]}}}, + '/rest/user/data-export': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [575, + 576]}}}, + '/rest/user/login': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [550]}}}, + '/rest/user/reset-password': {'head': {'responses': {}}, + 'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [313, + 552]}}}, + '/rest/user/security-question': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [553]}}}, + '/rest/user/whoami': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [554]}}}, + '/rest/wallet/balance': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'put': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [581, 582]}}}, + '/rest/web3/nftMintListen': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [597]}}}, + '/rest/web3/nftUnlocked': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [596]}}}, + '/rest/web3/submitKey': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [595]}}}, + '/rest/web3/walletExploitAddress': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [599]}}}, + '/rest/web3/walletNFTVerify': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [598]}}}, + '/security.txt': {'get': {'parameters': [{'in': 'header', 'name': 'ANY'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [196, 197]}}}, + '/snippets': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [624]}}}, + '/snippets/fixes': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [628]}}}, + '/snippets/fixes/{key}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'key', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [627]}}}, + '/snippets/verdict': {'post': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [626]}}}, + '/snippets/{challenge}': {'get': {'parameters': [], 'responses': {}}, + 'parameters': [{'in': 'path', + 'name': 'challenge', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [625]}}}, + '/solve/challenges/server-side': {'x-atom-usages': {'call': {'server.ts': [219]}}}, + '/support/logs': {'x-atom-usages': {'call': {'server.ts': [258, 259]}}}, + '/support/logs/{file}': {'parameters': [{'in': 'path', + 'name': 'file', + 'required': True}], + 'x-atom-usages': {'call': {'server.ts': [260]}}}, + '/the/devs/are/so/funny/they/hid/an/easter/egg/within/the/easter/egg': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [605]}}}, + '/this/page/is/hidden/behind/an/incredibly/high/paywall/that/could/only/be/unlocked/by/sending/1btc/to/us': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [606]}}}, + '/token': {'post': {'parameters': [{'in': 'header', 'name': 'LAMBDA'}, + {'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'routes/dataErasure.ts': [54]}}}, + '/trustproxy': {'x-atom-usages': {'call': {'server.ts': [312]}}}, + '/video': {'get': {'parameters': [{'in': 'header', 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [617]}}}, + '/viewengine': {'x-atom-usages': {'call': {'server.ts': [149]}}}, + '/we/may/also/instruct/you/to/refuse/all/reasonably/necessary/responsibility': {'get': {'parameters': [{'in': 'header', + 'name': '__ecma.String'}], + 'responses': {}}, + 'x-atom-usages': {'call': {'server.ts': [607]}}}, + '/{regex_param_1}/{file}': {'parameters': [{'in': 'path', + 'name': 'file', + 'required': True}, + {'in': 'path', + 'name': 'regex_param_1', + 'required': True, + 'schema': {'pattern': 'ftp(?!/quarantine)', + 'type': 'string'}}], + 'x-atom-usages': {'call': {'server.ts': [250]}}}}