typo squashing

This commit is contained in:
silversword411 2022-09-07 10:40:36 -04:00
parent d25bfeafa5
commit 597c67bb1f
No known key found for this signature in database
GPG Key ID: 6F4BD176F56B50CA
2 changed files with 403 additions and 22 deletions

383
.vscode/settings.json vendored
View File

@ -1,7 +1,11 @@
{ {
"cSpell.words": [ "cSpell.words": [
"abcdf", "abcdf",
"accountchange",
"accountcreate",
"accountid", "accountid",
"accountremove",
"acmd",
"acmepath", "acmepath",
"actiontype", "actiontype",
"adddevicegroup", "adddevicegroup",
@ -16,17 +20,30 @@
"addusertousergroup", "addusertousergroup",
"adminaccount", "adminaccount",
"adminname", "adminname",
"agentaliasdns",
"agentaliasport",
"agentallowedip", "agentallowedip",
"agentapp",
"agentblockedip", "agentblockedip",
"agentconfig", "agentconfig",
"agentconsole", "agentconsole",
"agentcoredump",
"agentcoredumpusers",
"agentcustomization", "agentcustomization",
"agentdownload", "agentdownload",
"agenterrorlogs", "agenterrorlogs",
"agentid",
"agentidletimeout", "agentidletimeout",
"agentinfo",
"agentinvite",
"agentinvitecodes",
"agentkey", "agentkey",
"Agentless", "Agentless",
"agentnoproxy", "agentnoproxy",
"agentport",
"agentportbind",
"agentporttls",
"agenttransfer",
"agenttype", "agenttype",
"agentupdateblocksize", "agentupdateblocksize",
"agentupdatetest", "agentupdatetest",
@ -34,57 +51,97 @@
"aliasport", "aliasport",
"allevents", "allevents",
"allowaccountreset", "allowaccountreset",
"allowframing",
"allowfullscreen", "allowfullscreen",
"allowhighqualitydesktop",
"allowsavingdevicecredentials",
"allusers",
"alreadyinstalled", "alreadyinstalled",
"amtacmactivation", "amtacmactivation",
"amtevents",
"amthost",
"amtmanager", "amtmanager",
"amtoff", "amtoff",
"amton", "amton",
"amtonly", "amtonly",
"amtpass",
"amtreset", "amtreset",
"amtscanner", "amtscanner",
"amtscanoptions",
"anewaccountcaptcha",
"apassword",
"apasswordhint",
"apikey", "apikey",
"apos",
"appmetrics", "appmetrics",
"apprelays",
"ashx", "ashx",
"assistantconfig",
"assistantcustomization",
"assistantnoproxy",
"atag", "atag",
"authcookie", "authcookie",
"authenticode", "authenticode",
"authfail",
"authlog", "authlog",
"authlogfile", "authlogfile",
"Authn", "Authn",
"authorizationurl",
"authstr",
"authstrategies",
"autofido", "autofido",
"awsrds", "awsrds",
"backgroundcolor",
"backgroundonly", "backgroundonly",
"backupcode", "backupcode",
"backuppath", "backuppath",
"badargs",
"badtlscert",
"bancommonpasswords",
"batchupload",
"bitmask", "bitmask",
"Bounser",
"callbackurl", "callbackurl",
"captchaargs",
"ccmp", "ccmp",
"Centralv", "Centralv",
"certbot", "certbot",
"certfiles", "certfiles",
"certhash",
"certkeyhash",
"certpfx", "certpfx",
"certpfxpass", "certpfxpass",
"certurl", "certurl",
"cfile", "cfile",
"changedevice", "changedevice",
"changenode", "changenode",
"changepassword",
"chatnotify", "chatnotify",
"checkemail",
"checkmail",
"chnl",
"CIRA", "CIRA",
"ciraconn",
"ciralocalfqdn", "ciralocalfqdn",
"ckey", "ckey",
"clearpower", "clearpower",
"clientid", "clientid",
"clientsecret", "clientsecret",
"clipboardget",
"clipboardset",
"cmdoptions",
"cmds", "cmds",
"cnonce",
"companyname", "companyname",
"configfile", "configfile",
"configfiles", "configfiles",
"configkey", "configkey",
"connectionstring", "connectionstring",
"Consts",
"cookieipcheck", "cookieipcheck",
"cookiesamesite", "cookiesamesite",
"coolofftime", "coolofftime",
"coredump",
"coredumps", "coredumps",
"createaccount", "createaccount",
"createmesh", "createmesh",
@ -92,8 +149,14 @@
"crowdsec", "crowdsec",
"crypted", "crypted",
"cscli", "cscli",
"curloptionshttp",
"curloptionshttps",
"cuser", "cuser",
"cuserid",
"customui",
"datafile",
"datapath", "datapath",
"datas",
"datastr", "datastr",
"dbconfig", "dbconfig",
"dbdeleteconfigfiles", "dbdeleteconfigfiles",
@ -107,67 +170,119 @@
"dbpulldatafiles", "dbpulldatafiles",
"dbpushconfigfiles", "dbpushconfigfiles",
"dbshowconfigfile", "dbshowconfigfile",
"debuglevel",
"defaultuserwebstate", "defaultuserwebstate",
"deldump",
"deleteaccount",
"deletedefaultdomain", "deletedefaultdomain",
"deletedomain", "deletedomain",
"deletemesh", "deletemesh",
"deleteuser", "deleteuser",
"deleteusergroup", "deleteusergroup",
"deluser",
"deluserpath",
"DESKLIMITEDINPUT",
"desktopmultiplex",
"desktopnotify", "desktopnotify",
"desktopprivacybar", "desktopprivacybar",
"desktopprompt", "desktopprompt",
"desktoprelays",
"desktopviewonly", "desktopviewonly",
"devbox", "devbox",
"devicefile",
"deviceid", "deviceid",
"deviceinfo", "deviceinfo",
"deviceinfocount", "deviceinfocount",
"devicemessage", "devicemessage",
"deviceopenurl", "deviceopenurl",
"devicepower", "devicepower",
"devicepowerevents",
"devicesearchbarserverandclientname",
"deviceshare",
"devicesharing", "devicesharing",
"devicetoast", "devicetoast",
"devid", "devid",
"Digesthash",
"disablerequestedauthncontext",
"displayname", "displayname",
"dlccore",
"dlcore",
"dldump",
"dnscount",
"dnssuffix", "dnssuffix",
"domaindefaults", "domaindefaults",
"domainid", "domainid",
"domainname",
"domainurl",
"domainx",
"dont", "dont",
"dontlognull", "dontlognull",
"downloadfile",
"dumpcores", "dumpcores",
"dumpfile",
"editdevice", "editdevice",
"editdevicegroup", "editdevicegroup",
"editgroup", "editgroup",
"editmesh", "editmesh",
"edituser", "edituser",
"emailaddress",
"emailcheck",
"emaildomain",
"emailexists", "emailexists",
"emailok",
"emailvalidation",
"emailvalidationrequired",
"emailverified", "emailverified",
"entityid", "entityid",
"entrypoints", "entrypoints",
"errdesc",
"errlogpath", "errlogpath",
"esversion", "esversion",
"etype", "etype",
"eventlogger", "eventlogger",
"exactport", "exactport",
"exactports", "exactports",
"exphbs",
"extractall", "extractall",
"extrakey",
"extralinks", "extralinks",
"extrascriptsrc",
"factorauth",
"factorwarning",
"fadev",
"fahold",
"fasent",
"fastcert", "fastcert",
"fchallenge",
"fileaccess", "fileaccess",
"filedata",
"filefullpath",
"filenotify", "filenotify",
"fileprompt", "fileprompt",
"filesize",
"filespath", "filespath",
"filestats",
"fileurl",
"filteredusers", "filteredusers",
"filterid", "filterid",
"firebaserelay", "firebaserelay",
"firstname", "firstname",
"forceduserwebstate", "forceduserwebstate",
"foregroundcolor",
"forwardclient",
"forwardfor", "forwardfor",
"forwardwrite",
"forwardwsocket",
"fpath",
"Freemonitoring", "Freemonitoring",
"frontends", "frontends",
"ftarget",
"fullpath",
"fullrights", "fullrights",
"fullscreen", "fullscreen",
"gatewaymac", "gatewaymac",
"generateinvitelink", "generateinvitelink",
"geourl",
"getnetworkinfo", "getnetworkinfo",
"getsysinfo", "getsysinfo",
"getwspass", "getwspass",
@ -175,49 +290,85 @@
"gotodevicename", "gotodevicename",
"gotonode", "gotonode",
"groupid", "groupid",
"guestdevicesharing",
"guestname", "guestname",
"GUESTSHARING",
"hashhex",
"Hashi", "Hashi",
"hashpass", "hashpass",
"hashpasssplit", "hashpasssplit",
"hashpassword", "hashpassword",
"Hashs",
"healthcheck", "healthcheck",
"Hilaire", "Hilaire",
"hkey",
"httpheaders", "httpheaders",
"httplog", "httplog",
"httpport",
"hwchallenge",
"hwotp",
"hwstate",
"hwtoken",
"Ider",
"idexists", "idexists",
"idhex", "idhex",
"idpurl", "idpurl",
"idsplit",
"iframe", "iframe",
"ignoreagenthashcheck", "ignoreagenthashcheck",
"iishash",
"imagebase",
"imagefile",
"indexagenterrorlog", "indexagenterrorlog",
"indexmcrec", "indexmcrec",
"installflags",
"installsize",
"installtext", "installtext",
"intelamt", "intelamt",
"interactiveonly", "interactiveonly",
"interuser", "interuser",
"invitecodes", "invitecodes",
"ipaddr",
"ipblockeduserredirect",
"ipcheck",
"ipex",
"ipkvm", "ipkvm",
"iplayer", "iplayer",
"ipranges", "ipranges",
"isaml",
"Jitsi", "Jitsi",
"jumpcloud", "jumpcloud",
"keyfile", "keyfile",
"keygrip",
"keyid",
"lanonly", "lanonly",
"LAPI", "LAPI",
"lastaddr", "lastaddr",
"lastconnect", "lastconnect",
"lastname", "lastname",
"ldapauth", "ldapauth",
"ldapobj",
"ldapoptions", "ldapoptions",
"ldapsaveusertofile",
"ldapsyncwithusergroups",
"ldapuserbinarykey", "ldapuserbinarykey",
"ldapuseremail", "ldapuseremail",
"ldapusergroups",
"ldapuserimage",
"ldapuserkey",
"ldapusername", "ldapusername",
"ldapuserphonenumber",
"ldapuserrealname",
"ldapuserrequiredgroupmembership",
"ldapusers", "ldapusers",
"leok", "leok",
"letsencrypt", "letsencrypt",
"lightgray",
"limiteddesktop", "limiteddesktop",
"limitedevents", "limitedevents",
"LIMITEVENTS",
"Linaro", "Linaro",
"linuxpath",
"listdevicegroups", "listdevicegroups",
"listdevices", "listdevices",
"listdomains", "listdomains",
@ -228,56 +379,93 @@
"listusersessions", "listusersessions",
"listusersofdevicegroup", "listusersofdevicegroup",
"loadconfigfromdb", "loadconfigfromdb",
"localdiscovery",
"localfile", "localfile",
"localpath", "localpath",
"localrelay",
"localsessionrecording",
"localurl", "localurl",
"lockagentdownload", "lockagentdownload",
"locksettings", "locksettings",
"logfile",
"logincodeb",
"logindomain", "logindomain",
"loginfooter", "loginfooter",
"loginkey", "loginkey",
"loginkeyfile", "loginkeyfile",
"loginlogo",
"loginmode",
"loginpass", "loginpass",
"loginpicture",
"loginscreen",
"logintoken", "logintoken",
"logintokengen", "logintokengen",
"logintokenkey", "logintokenkey",
"logintokens", "logintokens",
"loginuser", "loginuser",
"logoback", "logoback",
"logoutcontrols",
"logouturl", "logouturl",
"macrouter",
"magenturl",
"mailserver", "mailserver",
"mailtokengen", "mailtokengen",
"maintenancemode", "maintenancemode",
"mainwelcome",
"MANAGECOMPUTERS",
"managedevices", "managedevices",
"manageusers", "manageusers",
"markcoredump",
"maxfidokeys", "maxfidokeys",
"maxlen", "maxlen",
"maxuseraccounts",
"mcpath", "mcpath",
"mcrdesktop", "mcrdesktop",
"mcrec", "mcrec",
"mcrfiles", "mcrfiles",
"mcrouter",
"Mebx", "Mebx",
"meshaction",
"meshadmin", "meshadmin",
"meshagent", "meshagent",
"meshagents", "meshagents",
"meshauth", "meshauth",
"meshcentral", "meshcentral",
"meshcentralhost", "meshcentralhost",
"meshchange",
"meshcmd", "meshcmd",
"meshcommander", "meshcommander",
"meshcookie",
"meshcore", "meshcore",
"meshctrl", "meshctrl",
"meshdesktopmultiplex",
"meshdevicefile",
"mesherrorlogpath",
"mesherrors", "mesherrors",
"meshfilename",
"meshid", "meshid",
"meshidhex",
"meshidname", "meshidname",
"meshinstall",
"meshmail", "meshmail",
"meshmessenger",
"meshmessengerid",
"meshmessengerpicture",
"meshmessengertitle",
"meshname", "meshname",
"meshosxagent",
"meshquota", "meshquota",
"meshrelay", "meshrelay",
"MESHRIGHT",
"meshrights", "meshrights",
"meshscanner", "meshscanner",
"meshserver",
"meshsettings",
"meshsettingslines",
"meshtype", "meshtype",
"meshuser",
"Messagebox", "Messagebox",
"messageid",
"Messenging", "Messenging",
"minfo", "minfo",
"minifyall", "minifyall",
@ -287,17 +475,25 @@
"mongorestore", "mongorestore",
"moutput", "moutput",
"movetodevicegroup", "movetodevicegroup",
"mpkg",
"mpsaliasport", "mpsaliasport",
"mpscert", "mpscert",
"mpsdebug", "mpsdebug",
"mpspass",
"mpsport", "mpsport",
"mpsserver", "mpsserver",
"mpsservers", "mpsservers",
"MPSSSL", "MPSSSL",
"mpstlsoffload",
"mqttbroker", "mqttbroker",
"MSCHA", "MSCHA",
"msgid",
"mstsc", "mstsc",
"mstscrelay",
"mtype",
"multiplexor",
"multiresponse", "multiresponse",
"multivalued",
"myaccountname", "myaccountname",
"mycompany", "mycompany",
"mydomain", "mydomain",
@ -309,13 +505,19 @@
"netif", "netif",
"newaccountemaildomains", "newaccountemaildomains",
"newaccountname", "newaccountname",
"newaccountrealms",
"newaccounts", "newaccounts",
"newaccountscaptcha",
"newaccountspass", "newaccountspass",
"newaccountsrights", "newaccountsrights",
"newaccountsusergroups",
"newgroupname", "newgroupname",
"newobj", "newobj",
"newpass",
"newpassword", "newpassword",
"NGNIX", "NGNIX",
"nightmode",
"noact",
"noagentupdate", "noagentupdate",
"noamt", "noamt",
"noauth", "noauth",
@ -324,47 +526,91 @@
"nodecount", "nodecount",
"nodeid", "nodeid",
"nodeids", "nodeids",
"nodeidsplit",
"nodeinfo", "nodeinfo",
"nodekey",
"nodepath", "nodepath",
"NODESKTOP",
"nodewindows", "nodewindows",
"nofiles", "nofiles",
"nofirewall", "nofirewall",
"nolog",
"nologout",
"NOMESHCMD",
"nominify", "nominify",
"nonalpha", "nonalpha",
"NONEWDEVICES",
"nonewgroups", "nonewgroups",
"noproxy",
"noredirect",
"nosniff",
"noterminal", "noterminal",
"notools", "notools",
"nouser",
"nousers", "nousers",
"novnc", "novnc",
"npmjs", "npmjs",
"npmpath", "npmpath",
"npmproxy", "npmproxy",
"npmtag", "npmtag",
"objid",
"ODELAY", "ODELAY",
"offloader", "offloader",
"offloaders", "offloaders",
"oidc", "oidc",
"oldpassword",
"oldpasswordban",
"oldpasswords",
"oneclickrecovery",
"onlyselecteddevicegroups",
"onlyselectedusers",
"openidconnect",
"openstreetmap",
"openurl", "openurl",
"orphanagentuser", "orphanagentuser",
"osdesc", "osdesc",
"osinfo", "osinfo",
"otpdev",
"otpekey",
"otpemail",
"otphkeys", "otphkeys",
"otpkeys", "otpkeys",
"otplib",
"otppush",
"otpsecret", "otpsecret",
"otpsms",
"parentpath", "parentpath",
"passchange",
"passhint",
"passlogin",
"passrequirementstr",
"passtype",
"passwordrequirements", "passwordrequirements",
"passwordrequirementsstr",
"pastlogin",
"pathx",
"peinfo",
"phonenumber",
"PKCK", "PKCK",
"plivo", "plivo",
"pluginadmin",
"plusplus", "plusplus",
"portbind",
"postflight",
"poweraction", "poweraction",
"powerevents", "powerevents",
"Proto", "Proto",
"publicid", "publicid",
"pushlogin",
"pushrelay",
"pushrelayserver",
"qport",
"randompass", "randompass",
"Raritan", "Raritan",
"rauth", "rauth",
"rawdata", "rawdata",
"rcookie", "rcookie",
"rdpport",
"realname", "realname",
"recordencryptionrecode", "recordencryptionrecode",
"recordpath", "recordpath",
@ -373,11 +619,21 @@
"redirections", "redirections",
"redirport", "redirport",
"redirserver", "redirserver",
"refreshtoken",
"relayaliasport",
"relaydns", "relaydns",
"relayid",
"relayport", "relayport",
"relayserver",
"relaysession",
"remembertoken",
"remoteaddr",
"remoteaddrport",
"REMOTECOMMAND",
"remotecontrol", "remotecontrol",
"remotefile", "remotefile",
"remotepath", "remotepath",
"REMOTEVIEWONLY",
"removeallusersfromusergroup", "removeallusersfromusergroup",
"removedevicegroup", "removedevicegroup",
"removedomain", "removedomain",
@ -392,11 +648,20 @@
"removeuserfromusergroup", "removeuserfromusergroup",
"removeusergroup", "removeusergroup",
"resetaccount", "resetaccount",
"RESETOFF",
"resetpass", "resetpass",
"responseid", "responseid",
"restoreserver",
"rightsstr", "rightsstr",
"rname", "rname",
"rnamel", "rnamel",
"rootcert",
"rootredirect",
"rpassword",
"rpasswordhint",
"rport",
"rtpass",
"rtuser",
"runasuser", "runasuser",
"runasuseronly", "runasuseronly",
"runcommand", "runcommand",
@ -404,23 +669,43 @@
"runmode", "runmode",
"runonservererror", "runonservererror",
"runonserverupdated", "runonserverupdated",
"ruserid",
"sameorigin",
"selfupdate", "selfupdate",
"selfurl",
"senderid", "senderid",
"sendgrid", "sendgrid",
"sendinviteemail", "sendinviteemail",
"serialtunnel",
"SERVERBACKUP",
"serverfeatures",
"serverfiles", "serverfiles",
"serverhttps",
"serverid", "serverid",
"serveridhex",
"serverinfo", "serverinfo",
"serverkey", "serverkey",
"servername", "servername",
"servernoproxy",
"serverpath",
"serverpic",
"serverport",
"SERVERRESTORE",
"servertlshash",
"serverupdate", "serverupdate",
"servicename", "servicename",
"servicepath", "servicepath",
"sessioncode",
"sessionkey", "sessionkey",
"sessionrecording", "sessionrecording",
"sessionsamesite",
"sessiontime", "sessiontime",
"setbad",
"SETNOTES",
"settodomain", "settodomain",
"sftpconnect",
"shareid", "shareid",
"showagents",
"showall", "showall",
"showallmeshes", "showallmeshes",
"showevents", "showevents",
@ -428,20 +713,31 @@
"showitem", "showitem",
"showmeshes", "showmeshes",
"shownodes", "shownodes",
"showpasswordlogin",
"showpower", "showpower",
"showsmbios", "showsmbios",
"showusergroups", "showusergroups",
"showusers", "showusers",
"showversion",
"siteadmin", "siteadmin",
"SITERIGHT",
"sitestyle", "sitestyle",
"smsserver", "smsserver",
"specificupdate", "specificupdate",
"splitip", "splitip",
"splitpath",
"spliturl",
"srights", "srights",
"sshconnect",
"sshfilesrelay",
"sshport",
"sshrelay",
"sshterminalrelay",
"ssid", "ssid",
"sspi", "sspi",
"startack", "startack",
"statsevents", "statsevents",
"stricttransportsecurity",
"Strs", "Strs",
"subdir", "subdir",
"swarmallowedip", "swarmallowedip",
@ -451,86 +747,171 @@
"syslogauth", "syslogauth",
"syslogjson", "syslogjson",
"syslogtcp", "syslogtcp",
"tcpport",
"telnyx", "telnyx",
"temail",
"tenantid", "tenantid",
"terminalnotify", "terminalnotify",
"terminalprompt", "terminalprompt",
"termsize", "termsize",
"timedoc",
"titleid",
"titlepicture", "titlepicture",
"tkip", "tkip",
"tlscertcheck", "tlscertcheck",
"tlshash",
"tlsock",
"tlsoffload", "tlsoffload",
"tlsoptions",
"tlsrootcert", "tlsrootcert",
"tlsstrict", "tlsstrict",
"tmpdl",
"tokenemail",
"tokenlogin",
"tokenpassword",
"tokenpush",
"tokenrequired", "tokenrequired",
"tokensms",
"tokenurl",
"tokenuserid",
"tokenusername",
"totalsize",
"tpass",
"tpassword",
"tpush",
"traefik", "traefik",
"translateall", "translateall",
"translationpath", "translationpath",
"trustedcert", "trustedcert",
"trustedproxy", "trustedproxy",
"tsms",
"TTLS", "TTLS",
"tunnelws", "tunnelws",
"tunnelwsstate", "tunnelwsstate",
"tuser",
"tuserid",
"tusername",
"twofactor",
"twofactorcookiedurationdays",
"twofactortimeout",
"tzoffset", "tzoffset",
"uaparser",
"ucookie",
"ugroup", "ugroup",
"ugroups", "ugroups",
"ugrp", "ugrp",
"ugrpid", "ugrpid",
"uicustomevent", "uicustomevent",
"unadmin", "unadmin",
"unknownuserrootredirect",
"unsealkey", "unsealkey",
"updatefiles",
"uploadack", "uploadack",
"uploaderror", "uploaderror",
"uploadfile",
"uploadfilebatch",
"uploadmeshcorefile",
"uploadstart", "uploadstart",
"urlpath",
"urlswitching",
"useid", "useid",
"userallowedip", "userallowedip",
"userblockedip", "userblockedip",
"userbroadcast", "userbroadcast",
"userconsentflags", "userconsentflags",
"usercount", "usercount",
"userex",
"userfiles",
"usergroupchange",
"usergroups", "usergroups",
"userid", "userid",
"userids", "userids",
"userimage",
"userinfourl",
"usernameisemail", "usernameisemail",
"userquota", "userquota",
"userrequiredhttpheader",
"Usersessionidletimeout", "Usersessionidletimeout",
"usersid",
"usersplit",
"vaultdeleteconfigfiles", "vaultdeleteconfigfiles",
"vaultpullconfigfiles", "vaultpullconfigfiles",
"vaultpushconfigfiles", "vaultpushconfigfiles",
"verifyemail", "verifyemail",
"Viewmode", "Viewmode",
"viewonly", "viewonly",
"WAKEDEVICE",
"wakedevices", "wakedevices",
"Walkthru", "Walkthru",
"wanonly", "wanonly",
"Webauthn",
"webcerthash",
"webdefault",
"webemailspath", "webemailspath",
"webider",
"webpublicpath", "webpublicpath",
"webpush", "webpush",
"webrelay",
"webrelaydata",
"webrelayserver", "webrelayserver",
"webrequest",
"webrtc", "webrtc",
"webrtconfig", "webrtconfig",
"webserver", "webserver",
"websockets", "websockets",
"WEBSSL", "WEBSSL",
"webstate",
"webviewspath", "webviewspath",
"WELCOMEMSG",
"welcomepicture", "welcomepicture",
"welcomepicturefullscreen",
"welcometext", "welcometext",
"wgetoptionshttp",
"wgetoptionshttps",
"wildleek",
"winassistant",
"winpath",
"winrouter",
"winservice", "winservice",
"wsagents",
"wscompression", "wscompression",
"wsrelays",
"wssessioncount", "wssessioncount",
"wssessions", "wssessions",
"xarg",
"xbytes",
"xcmd",
"xdomain",
"xdomains", "xdomains",
"xenv", "xenv",
"xevents",
"xfile",
"xfilelen",
"xfilepath",
"xflags",
"xforwardedhost",
"xinstall", "xinstall",
"xjslint", "xjslint",
"xmeshes", "xmeshes",
"xpad", "xpad",
"xpassword",
"xrelay",
"xrestart", "xrestart",
"xstate",
"xtls",
"xtransport",
"xuninstall", "xuninstall",
"xuserid",
"xusername",
"xxdata",
"xxprocess", "xxprocess",
"xxurl", "xxurl",
"xxuser",
"xxxprocess", "xxxprocess",
"Ylian", "Ylian",
"yubikey" "yubikey",
"yubikeyotp",
"zdata",
"zipfile"
] ]
} }

View File

@ -199,7 +199,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
obj.wsPeerSessions3 = {}; // ServerId --> UserId --> [ SessionId ] obj.wsPeerSessions3 = {}; // ServerId --> UserId --> [ SessionId ]
obj.sessionsCount = {}; // Merged session counters, used when doing server peering. UserId --> SessionCount obj.sessionsCount = {}; // Merged session counters, used when doing server peering. UserId --> SessionCount
obj.wsrelays = {}; // Id -> Relay obj.wsrelays = {}; // Id -> Relay
obj.desktoprelays = {}; // Id -> Desktop Multiplexor Relay obj.desktoprelays = {}; // Id -> Desktop Multiplexer Relay
obj.wsPeerRelays = {}; // Id -> { ServerId, Time } obj.wsPeerRelays = {}; // Id -> { ServerId, Time }
var tlsSessionStore = {}; // Store TLS session information for quick resume. var tlsSessionStore = {}; // Store TLS session information for quick resume.
var tlsSessionStoreCount = 0; // Number of cached TLS session information in store. var tlsSessionStoreCount = 0; // Number of cached TLS session information in store.
@ -239,7 +239,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
for (i in docs) { var u = obj.users[docs[i]._id] = docs[i]; domainUserCount[u.domain]++; } for (i in docs) { var u = obj.users[docs[i]._id] = docs[i]; domainUserCount[u.domain]++; }
for (i in parent.config.domains) { for (i in parent.config.domains) {
if ((parent.config.domains[i].share == null) && (domainUserCount[i] == 0)) { if ((parent.config.domains[i].share == null) && (domainUserCount[i] == 0)) {
// If newaccounts is set to no new accounts, but no accounts exists, temporarly allow account creation. // If newaccounts is set to no new accounts, but no accounts exists, temporarily allow account creation.
//if ((parent.config.domains[i].newaccounts === 0) || (parent.config.domains[i].newaccounts === false)) { parent.config.domains[i].newaccounts = 2; } //if ((parent.config.domains[i].newaccounts === 0) || (parent.config.domains[i].newaccounts === false)) { parent.config.domains[i].newaccounts = 2; }
console.log('Server ' + ((i == '') ? '' : (i + ' ')) + 'has no users, next new account will be site administrator.'); console.log('Server ' + ((i == '') ? '' : (i + ' ')) + 'has no users, next new account will be site administrator.');
} }
@ -431,7 +431,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
if (!user) { fn(new Error('cannot find user')); return; } if (!user) { fn(new Error('cannot find user')); return; }
if ((user.siteadmin) && (user.siteadmin != 0xFFFFFFFF) && (user.siteadmin & 32) != 0) { fn('locked'); return; } if ((user.siteadmin) && (user.siteadmin != 0xFFFFFFFF) && (user.siteadmin & 32) != 0) { fn('locked'); return; }
// Succesful login token authentication // Successful login token authentication
var loginOptions = { tokenName: loginToken.name, tokenUser: loginToken.tokenUser }; var loginOptions = { tokenName: loginToken.name, tokenUser: loginToken.tokenUser };
if (loginToken.expire != 0) { loginOptions.expire = loginToken.expire; } if (loginToken.expire != 0) { loginOptions.expire = loginToken.expire; }
return fn(null, user._id, null, loginOptions); return fn(null, user._id, null, loginOptions);
@ -519,9 +519,9 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
// Get the email address for this LDAP user // Get the email address for this LDAP user
var email = null; var email = null;
if (domain.ldapuseremail) { email = xxuser[domain.ldapuseremail]; } else if (xxuser['mail']) { email = xxuser['mail']; } // Use given feild name or default if (domain.ldapuseremail) { email = xxuser[domain.ldapuseremail]; } else if (xxuser['mail']) { email = xxuser['mail']; } // Use given field name or default
if (Array.isArray(email)) { email = email[0]; } // Mail may be multivalued in LDAP in which case, answer is an array. Use the 1st value. if (Array.isArray(email)) { email = email[0]; } // Mail may be multivalued in LDAP in which case, answer is an array. Use the 1st value.
if (email) { email = email.toLowerCase(); } // it seems some code elsewhere also lowercase the emailaddress, so let's be consistant. if (email) { email = email.toLowerCase(); } // it seems some code elsewhere also lowercase the emailaddress, so let's be consistent.
// Get the real name for this LDAP user // Get the real name for this LDAP user
var realname = null; var realname = null;
@ -846,7 +846,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
function checkUserOneTimePasswordSkip(domain, user, req, loginOptions) { function checkUserOneTimePasswordSkip(domain, user, req, loginOptions) {
if (parent.config.settings.no2factorauth == true) return null; if (parent.config.settings.no2factorauth == true) return null;
// If this login occured using a login token, no 2FA needed. // If this login occurred using a login token, no 2FA needed.
if ((loginOptions != null) && (typeof loginOptions.tokenName === 'string')) { return { twoFactorType: 'tokenlogin' }; } if ((loginOptions != null) && (typeof loginOptions.tokenName === 'string')) { return { twoFactorType: 'tokenlogin' }; }
// Check if we can skip 2nd factor auth because of the source IP address // Check if we can skip 2nd factor auth because of the source IP address
@ -859,7 +859,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
const cookies = req.headers.cookie.split('; '); const cookies = req.headers.cookie.split('; ');
for (var i in cookies) { for (var i in cookies) {
if (cookies[i].startsWith('twofactor=')) { if (cookies[i].startsWith('twofactor=')) {
var twoFactorCookie = obj.parent.decodeCookie(decodeURIComponent(cookies[i].substring(10)), obj.parent.loginCookieEncryptionKey, (30 * 24 * 60)); // If the cookies does not have an expire feild, assume 30 day timeout. var twoFactorCookie = obj.parent.decodeCookie(decodeURIComponent(cookies[i].substring(10)), obj.parent.loginCookieEncryptionKey, (30 * 24 * 60)); // If the cookies does not have an expire field, assume 30 day timeout.
if ((twoFactorCookie != null) && ((twoFactorCookie.ip == null) || checkCookieIp(twoFactorCookie.ip, req.clientIp)) && (twoFactorCookie.userid == user._id)) { return { twoFactorType: 'cookie' }; } if ((twoFactorCookie != null) && ((twoFactorCookie.ip == null) || checkCookieIp(twoFactorCookie.ip, req.clientIp)) && (twoFactorCookie.userid == user._id)) { return { twoFactorType: 'cookie' }; }
} }
} }
@ -870,7 +870,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
// Return true if this user has 2-step auth active // Return true if this user has 2-step auth active
function checkUserOneTimePasswordRequired(domain, user, req, loginOptions) { function checkUserOneTimePasswordRequired(domain, user, req, loginOptions) {
// If this login occured using a login token, no 2FA needed. // If this login occurred using a login token, no 2FA needed.
if ((loginOptions != null) && (typeof loginOptions.tokenName === 'string')) { return false; } if ((loginOptions != null) && (typeof loginOptions.tokenName === 'string')) { return false; }
// Check if we can skip 2nd factor auth because of the source IP address // Check if we can skip 2nd factor auth because of the source IP address
@ -883,7 +883,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
const cookies = req.headers.cookie.split('; '); const cookies = req.headers.cookie.split('; ');
for (var i in cookies) { for (var i in cookies) {
if (cookies[i].startsWith('twofactor=')) { if (cookies[i].startsWith('twofactor=')) {
var twoFactorCookie = obj.parent.decodeCookie(decodeURIComponent(cookies[i].substring(10)), obj.parent.loginCookieEncryptionKey, (30 * 24 * 60)); // If the cookies does not have an expire feild, assume 30 day timeout. var twoFactorCookie = obj.parent.decodeCookie(decodeURIComponent(cookies[i].substring(10)), obj.parent.loginCookieEncryptionKey, (30 * 24 * 60)); // If the cookies does not have an expire field, assume 30 day timeout.
if ((twoFactorCookie != null) && ((twoFactorCookie.ip == null) || checkCookieIp(twoFactorCookie.ip, req.clientIp)) && (twoFactorCookie.userid == user._id)) { return false; } if ((twoFactorCookie != null) && ((twoFactorCookie.ip == null) || checkCookieIp(twoFactorCookie.ip, req.clientIp)) && (twoFactorCookie.userid == user._id)) { return false; }
} }
} }
@ -910,7 +910,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
// Check 2FA login cookie // Check 2FA login cookie
if ((token != null) && (token.startsWith('cookie='))) { if ((token != null) && (token.startsWith('cookie='))) {
var twoFactorCookie = obj.parent.decodeCookie(decodeURIComponent(token.substring(7)), obj.parent.loginCookieEncryptionKey, (30 * 24 * 60)); // If the cookies does not have an expire feild, assume 30 day timeout. var twoFactorCookie = obj.parent.decodeCookie(decodeURIComponent(token.substring(7)), obj.parent.loginCookieEncryptionKey, (30 * 24 * 60)); // If the cookies does not have an expire field, assume 30 day timeout.
if ((twoFactorCookie != null) && ((twoFactorCookie.ip == null) || checkCookieIp(twoFactorCookie.ip, req.clientIp)) && (twoFactorCookie.userid == user._id)) { func(true, { twoFactorType: 'cookie' }); return; } if ((twoFactorCookie != null) && ((twoFactorCookie.ip == null) || checkCookieIp(twoFactorCookie.ip, req.clientIp)) && (twoFactorCookie.userid == user._id)) { func(true, { twoFactorType: 'cookie' }); return; }
} }
@ -1863,7 +1863,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
// Check is email already exists // Check is email already exists
obj.db.GetUserWithVerifiedEmail(domain.id, email, function (err, docs) { obj.db.GetUserWithVerifiedEmail(domain.id, email, function (err, docs) {
if ((err != null) || ((docs.length > 0) && (docs.find(function (u) { return (u._id === req.session.cuserid); }) < 0))) { if ((err != null) || ((docs.length > 0) && (docs.find(function (u) { return (u._id === req.session.cuserid); }) < 0))) {
// Email already exitst // Email already exists
req.session.messageid = 102; // Existing account with this email address. req.session.messageid = 102; // Existing account with this email address.
} else { } else {
// Update the user and notify of user email address change // Update the user and notify of user email address change
@ -2515,8 +2515,8 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
}); });
} }
// Called when a strategy login occured // Called when a strategy login occurred
// This is called after a succesful Oauth to Twitter, Google, GitHub... // This is called after a successful Oauth to Twitter, Google, GitHub...
function handleStrategyLogin(req, res) { function handleStrategyLogin(req, res) {
const domain = checkUserIpAddress(req, res); const domain = checkUserIpAddress(req, res);
const authStrategy = req.user.strategy const authStrategy = req.user.strategy
@ -2817,7 +2817,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
setSessionRandom(req); setSessionRandom(req);
} else if (req.query.login && (obj.parent.loginCookieEncryptionKey != null)) { } else if (req.query.login && (obj.parent.loginCookieEncryptionKey != null)) {
var loginCookie = obj.parent.decodeCookie(req.query.login, obj.parent.loginCookieEncryptionKey, 60); // 60 minute timeout var loginCookie = obj.parent.decodeCookie(req.query.login, obj.parent.loginCookieEncryptionKey, 60); // 60 minute timeout
//if ((loginCookie != null) && (loginCookie.ip != null) && !checkCookieIp(loginCookie.ip, req.clientIp)) { loginCookie = null; } // If the cookie if binded to an IP address, check here. //if ((loginCookie != null) && (loginCookie.ip != null) && !checkCookieIp(loginCookie.ip, req.clientIp)) { loginCookie = null; } // If the cookie is bound to an IP address, check here.
if ((loginCookie != null) && (loginCookie.a == 3) && (loginCookie.u != null) && (loginCookie.u.split('/')[1] == domain.id)) { if ((loginCookie != null) && (loginCookie.a == 3) && (loginCookie.u != null) && (loginCookie.u.split('/')[1] == domain.id)) {
// If a login cookie was provided, setup the session here. // If a login cookie was provided, setup the session here.
parent.debug('web', 'handleRootRequestEx: cookie auth ok.'); parent.debug('web', 'handleRootRequestEx: cookie auth ok.');
@ -3942,7 +3942,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
if ((err != null) || (docs == null) || (docs.length != 1)) { res.sendStatus(404); return; } if ((err != null) || (docs == null) || (docs.length != 1)) { res.sendStatus(404); return; }
const doc = docs[0]; const doc = docs[0];
// If this is a recurrent share, check if we are at the currect time to make use of it // If this is a recurrent share, check if we are at the correct time to make use of it
if (typeof doc.recurring == 'number') { if (typeof doc.recurring == 'number') {
const now = Date.now(); const now = Date.now();
if (now >= doc.startTime) { // We don't want to move the validity window before the start time if (now >= doc.startTime) { // We don't want to move the validity window before the start time
@ -4567,7 +4567,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
tlsock.setEncoding('binary'); tlsock.setEncoding('binary');
tlsock.on('error', function (err) { parent.debug('webrelay', "CIRA TLS Connection Error", err); }); tlsock.on('error', function (err) { parent.debug('webrelay', "CIRA TLS Connection Error", err); });
// Decrypted tunnel from TLS communcation to be forwarded to websocket // Decrypted tunnel from TLS communication to be forwarded to websocket
tlsock.on('data', function (data) { tlsock.on('data', function (data) {
// AMT/TLS ---> WS // AMT/TLS ---> WS
if (ws.interceptor) { data = ws.interceptor.processAmtData(data); } // Run data thru interceptor if (ws.interceptor) { data = ws.interceptor.processAmtData(data); } // Run data thru interceptor
@ -4615,7 +4615,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
ws.forwardclient.onData = function (ciraconn, data) { ws.forwardclient.onData = function (ciraconn, data) {
//parent.debug('webrelaydata', 'Relay CIRA data to WS', data.length); //parent.debug('webrelaydata', 'Relay CIRA data to WS', data.length);
// Run data thru interceptorp // Run data thru interceptor
if (ws.interceptor) { data = ws.interceptor.processAmtData(data); } if (ws.interceptor) { data = ws.interceptor.processAmtData(data); }
//console.log('AMT --> WS', Buffer.from(data, 'binary').toString('hex')); //console.log('AMT --> WS', Buffer.from(data, 'binary').toString('hex'));
@ -4633,7 +4633,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
ws.forwardclient.onSendOk = function (ciraconn) { }; ws.forwardclient.onSendOk = function (ciraconn) { };
} }
// When data is received from the web socket, forward the data into the associated CIRA cahnnel. // When data is received from the web socket, forward the data into the associated CIRA channel.
// If the CIRA connection is pending, the CIRA channel has built-in buffering, so we are ok sending anyway. // If the CIRA connection is pending, the CIRA channel has built-in buffering, so we are ok sending anyway.
ws.on('message', function (data) { ws.on('message', function (data) {
//parent.debug('webrelaydata', 'Relay WS data to CIRA', data.length); //parent.debug('webrelaydata', 'Relay WS data to CIRA', data.length);
@ -6703,7 +6703,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
const urlCookie = obj.parent.decodeCookie(req.query.c, parent.loginCookieEncryptionKey, 32); // Allow cookies up to 32 minutes old. The web page will renew this cookie every 30 minutes. const urlCookie = obj.parent.decodeCookie(req.query.c, parent.loginCookieEncryptionKey, 32); // Allow cookies up to 32 minutes old. The web page will renew this cookie every 30 minutes.
if (urlCookie == null) { res.sendStatus(404); return; } if (urlCookie == null) { res.sendStatus(404); return; }
// Decode the incomign cookie // Decode the incoming cookie
if ((urlCookie.ruserid != null) && (urlCookie.x != null)) { if ((urlCookie.ruserid != null) && (urlCookie.x != null)) {
if (parent.webserver.destroyedSessions[urlCookie.ruserid + '/' + urlCookie.x] != null) { res.sendStatus(404); return; } if (parent.webserver.destroyedSessions[urlCookie.ruserid + '/' + urlCookie.x] != null) { res.sendStatus(404); return; }
@ -6853,7 +6853,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
// Indicates to ExpressJS that the override public folder should be used to serve static files. // Indicates to ExpressJS that the override public folder should be used to serve static files.
if (parent.config.domains[i].webpublicpath != null) { if (parent.config.domains[i].webpublicpath != null) {
// Use domain public pathe // Use domain public path
obj.app.use(url, obj.express.static(parent.config.domains[i].webpublicpath)); obj.app.use(url, obj.express.static(parent.config.domains[i].webpublicpath));
} else if (obj.parent.webPublicOverridePath != null) { } else if (obj.parent.webPublicOverridePath != null) {
// Use override path // Use override path
@ -7154,7 +7154,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates, doneF
// The web relay session is valid, use it // The web relay session is valid, use it
relaySession.handleRequest(req, res); relaySession.handleRequest(req, res);
} else { } else {
// No web relay ession with this relay identifier, close the HTTP request. // No web relay session with this relay identifier, close the HTTP request.
res.sendStatus(404); res.sendStatus(404);
} }
} else { } else {