Merge branch 'master' of github.com:AliasIO/wappalyzer

main
Elbert Alias 4 years ago
commit d6c65fa0ca

@ -0,0 +1,137 @@
const fs = require('fs')
const path = require('path')
const { convertFile } = require('convert-svg-to-png')
const appPaths = () => {
const fileDir = path.dirname(require.main.filename).split('/')
// Remove current bin directory
fileDir.pop()
const appDir = fileDir.join('/')
return {
basePath: fileDir,
appPath: appDir,
iconPath: appDir + '/src/drivers/webextension/images/icons',
convertPath: appDir + '/src/drivers/webextension/images/icons/converted',
}
}
/**
* Copy files from source to destination.
* @param source
* @param destination
*/
function copyFiles(source, destination) {
// File destination will be created or overwritten by default.
fs.copyFileSync(source, destination)
// console.log(`${source} -> ${destination}`)
}
/**
* Get extension of image file.
* @returns {string}
*/
function getFileExtension(filePath) {
return path.extname(filePath)
}
/**
* Get base name of image file.
* @returns {string}
*/
function getFileName(filePath) {
return path.basename(filePath, getFileExtension(filePath))
}
function getConvertFileName(filePath) {
const name = getFileName(filePath)
return `${appPaths().convertPath}/${name}.png`
}
/**
* Check if converted image exists
* @returns {boolean}
*/
function checkFileExists(imagePath) {
const fileExists = fs.existsSync(imagePath)
return fileExists
}
function checkIfFile(filePath) {
return fs.statSync(filePath).isFile()
}
function diffFiles(fileOne, fileTwo) {
const f1 = fs.readFileSync(fileOne)
const f2 = fs.readFileSync(fileTwo)
return f1.equals(f2)
}
function dateModified(file) {
return fs.statSync(file).mtime
}
function dateDiff(file) {
const now = new Date().getTime()
const then = dateModified(file).getTime()
return Math.round(Math.abs((then - now) / 86400000))
}
// Main script
fs.readdirSync(appPaths().iconPath).forEach((fileName) => {
const image = {
id: fileName,
path: `${appPaths().iconPath}/${fileName}`,
convertPath: `${appPaths().convertPath}/${fileName}`,
async convertAndCopy() {
await convertFile(this.path, {
height: 32,
width: 32,
outputFilePath: this.convertPath,
}).then((outputFile) => {
console.log(`SVG Converted: ${outputFile}`)
})
},
processFile() {
// Setup variables.
const ext = getFileExtension(this.path)
// If SVG, run checks.
if (ext === '.svg') {
// Check if converted file exists.
const convertFilePath = getConvertFileName(this.path)
if (checkFileExists(convertFilePath)) {
// If file has changed in past 7 days.
if (dateDiff(this.path) > 8) {
console.log(`File exists, skipping: ${this.id}`)
return null
}
}
// Convert and copy file.
this.convertAndCopy()
} else {
// If PNG or other, just copy the file as-is.
// eslint-disable-next-line no-lonely-if
if (checkIfFile(this.path)) {
copyFiles(this.path, this.convertPath)
} else {
console.info('Not a file, skipping...')
}
}
},
}
image.processFile()
})
/**
cd ; cp *.svg converted ; cd converted ; convert-svg-to-png *.svg --width 32 --height 32 ; rm *.svg
(async() => {
const inputFilePath = '/path/to/my-image.svg';
const outputFilePath = await convertFile(inputFilePath);
console.log(outputFilePath);
//=> "/path/to/my-image.png"
})();
*/

@ -20,7 +20,7 @@
"lint": "eslint src/**/*.{js,json}",
"lint:fix": "eslint --fix src/**/*.{js,json}",
"validate": "yarn run lint && jsonlint -qV ./schema.json ./src/technologies.json && node ./bin/validate.js",
"convert": "cd ./src/drivers/webextension/images/icons ; cp *.svg converted ; cd converted ; convert-svg-to-png *.svg --width 32 --height 32 ; rm *.svg",
"convert": "node ./bin/convert.js",
"prettify": "jsonlint -si --trim-trailing-commas --enforce-double-quotes ./src/technologies.json",
"build": "yarn run link && yarn run validate && yarn run prettify && yarn run convert && node ./bin/build.js",
"build:safari": "xcrun safari-web-extension-converter --swift --project-location build --force src/drivers/webextension"

@ -36,7 +36,7 @@
"categoryName13": { "message": "Outil de suivi de problèmes" },
"categoryName14": { "message": "Lecteur de vidéos" },
"categoryName15": { "message": "Système de commentaires" },
"categoryName16": { "message": "Security" },
"categoryName16": { "message": "Sécurité" },
"categoryName17": { "message": "Script de police" },
"categoryName18": { "message": "Framework web" },
"categoryName19": { "message": "Divers" },
@ -79,17 +79,17 @@
"categoryName56": { "message": "Crypto-mineur" },
"categoryName57": { "message": "Générateur de site statique" },
"categoryName58": { "message": "User Onboarding" },
"categoryName59": { "message": "JavaScript Libraries" },
"categoryName60": { "message": "Containers" },
"categoryName59": { "message": "Librairies JavaScript" },
"categoryName60": { "message": "Contenus" },
"categoryName61": { "message": "SaaS" },
"categoryName62": { "message": "PaaS" },
"categoryName63": { "message": "IaaS" },
"categoryName64": { "message": "Reverse Proxy" },
"categoryName65": { "message": "Load Balancer" },
"categoryName66": { "message": "UI Frameworks" },
"categoryName66": { "message": "Frameworks UI" },
"categoryName67": { "message": "Cookie compliance" },
"categoryName68": { "message": "Accessibility" },
"categoryName69": { "message": "Social logins" },
"categoryName68": { "message": "Accessibilité" },
"categoryName69": { "message": "Connexion avec les réseaux sociaux" },
"categoryName70": { "message": "SSL/TLS certificate authorities" },
"categoryName71": { "message": "Affiliate programs" },
"categoryName72": { "message": "Appointment scheduling" },

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

@ -0,0 +1,4 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.9531 32C7.13196 32 0 24.8471 0 16C0 7.15294 7.13196 0 15.9531 0H27.9648C30.217 0 32 1.78824 32 4.04706V16C32 24.8471 24.868 32 15.9531 32Z" fill="#45A4EC"/>
<path d="M20.9882 9.41177H12.9882C10.7294 9.41177 8.94116 11.2 8.94116 13.4588V20.3294C8.94116 20.8 9.31763 21.1765 9.78822 21.1765H20.8941C23.1529 21.1765 24.9412 19.3882 24.9412 17.1294V13.4588C24.9412 11.2 23.1529 9.41177 20.9882 9.41177ZM18.0706 17.9765H12.2353C11.7647 17.9765 11.4823 17.6 11.4823 17.2235C11.4823 16.8471 11.8588 16.4706 12.2353 16.4706H18.0706C18.5412 16.4706 18.8235 16.8471 18.8235 17.2235C18.8235 17.6 18.5412 17.9765 18.0706 17.9765ZM21.647 14.2118H12.2353C11.7647 14.2118 11.4823 13.8353 11.4823 13.4588C11.4823 12.9882 11.8588 12.7059 12.2353 12.7059H21.647C22.1176 12.7059 22.4 13.0824 22.4 13.4588C22.4 13.8353 22.0235 14.2118 21.647 14.2118Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 963 B

@ -0,0 +1,5 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.5886 31.0857C11.4663 31.0857 7.51296 29.4482 4.59811 26.5333C1.68326 23.6185 0.0457143 19.6651 0.0457143 15.5429H0C0.012101 11.4164 1.6598 7.46316 4.58192 4.54961C7.50403 1.63607 11.4621 -1.77433e-05 15.5886 1.4432e-10H27.2823C28.3161 0.00242113 29.3068 0.414803 30.0369 1.14668C30.7671 1.87856 31.1771 2.87018 31.1771 3.904V15.4971C31.1832 17.546 30.7841 19.5757 30.0028 21.4698C29.2216 23.3638 28.0735 25.0846 26.6248 26.5334C25.1761 27.9821 23.4552 29.1301 21.5612 29.9114C19.6672 30.6927 17.6374 31.0917 15.5886 31.0857Z" fill="#FFA800"/>
<path d="M15.5703 22.9394C16.5751 22.9394 17.3897 22.1248 17.3897 21.12C17.3897 20.1152 16.5751 19.3006 15.5703 19.3006C14.5654 19.3006 13.7509 20.1152 13.7509 21.12C13.7509 22.1248 14.5654 22.9394 15.5703 22.9394Z" fill="white"/>
<path d="M15.5428 8.13713C13.5931 8.15643 11.7301 8.94576 10.3599 10.333C8.98976 11.7203 8.22363 13.593 8.22855 15.5428C8.22512 16.6431 8.46997 17.73 8.94487 18.7226C9.41977 19.7151 10.1125 20.5877 10.9714 21.2754C10.9714 21.2206 10.9714 21.1748 10.9714 21.12C10.9747 20.4575 11.122 19.8037 11.403 19.2039C11.684 18.604 12.092 18.0723 12.5988 17.6457C12.1445 17.0379 11.8948 16.3016 11.8857 15.5428C11.8834 14.9654 12.018 14.3956 12.2782 13.8801C12.5385 13.3646 12.9172 12.9181 13.3833 12.5771C13.8493 12.2361 14.3895 12.0103 14.9596 11.9182C15.5297 11.8261 16.1135 11.8703 16.6632 12.0472C17.2129 12.2241 17.7129 12.5287 18.1223 12.936C18.5316 13.3433 18.8387 13.8418 19.0184 14.3906C19.1981 14.9394 19.2453 15.523 19.156 16.0935C19.0668 16.6641 18.8438 17.2054 18.5051 17.6731C19.0051 18.0985 19.4076 18.6265 19.6852 19.2212C19.9629 19.816 20.1092 20.4636 20.1143 21.12C20.1143 21.1748 20.1143 21.2206 20.1143 21.2754C21.3441 20.3417 22.2469 19.0427 22.6933 17.5644C23.1397 16.0862 23.1068 14.5047 22.5994 13.0463C22.092 11.5879 21.136 10.3275 19.8684 9.44566C18.6008 8.56382 17.0867 8.10578 15.5428 8.13713Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 B

@ -0,0 +1,5 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.04071 30.813L10.5619 25.4995C12.3718 25.9883 14.254 26.2386 16.1741 26.2386C19.5506 26.2386 22.8113 25.4595 25.7625 23.9857L28.3591 28.8904C24.6111 30.7621 20.4613 31.7537 16.1741 31.7537C13.7389 31.7537 11.345 31.4353 9.04071 30.813Z" fill="#FF7070"/>
<path d="M3.55554 28.6732L6.24358 23.8152C7.61485 24.5309 9.05995 25.0957 10.5592 25.499L9.04372 30.814C7.13549 30.3008 5.29729 29.5822 3.55554 28.6732Z" fill="#1E1F4D"/>
<path d="M16.2874 0C22.1712 0 26.9405 4.63289 26.9405 10.3462C26.9405 16.0602 22.1712 20.6931 16.2874 20.6931C10.4042 20.6931 5.63428 16.0602 5.63428 10.3462C5.63428 4.63289 10.4042 0 16.2874 0ZM16.2874 15.3372C19.125 15.3372 21.4259 13.1037 21.4259 10.3462C21.4259 7.59138 19.125 5.35585 16.2874 5.35585C13.4497 5.35585 11.1488 7.59138 11.1488 10.3462C11.1488 13.1037 13.4497 15.3372 16.2874 15.3372Z" fill="#1E1F4D"/>
</svg>

After

Width:  |  Height:  |  Size: 959 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

@ -0,0 +1,5 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.1846 0C14.7692 0 10.1744 3.85641 9.18974 9.18974C9.84615 9.10769 10.5026 9.02564 11.159 9.02564C10.5026 9.02564 9.84615 9.10769 9.18974 9.18974C3.85641 10.1744 0 14.7692 0 20.1846V31.2615H11.159C16.4923 31.2615 21.0872 27.4872 22.0718 22.2359H20.1846C20.0205 22.2359 19.7744 22.2359 19.6103 22.2359C19.7744 22.2359 20.0205 22.2359 20.1846 22.2359H31.3436V11.159C31.2615 5.00513 26.3385 0 20.1846 0ZM9.02564 11.159C9.02564 11.8974 9.10769 12.6359 9.27179 13.3744C9.10769 12.6359 9.02564 11.8974 9.02564 11.159Z" fill="#135EEB"/>
<path d="M20.1846 22.3179C14.0308 22.3179 9.02564 17.3949 9.02564 11.241C9.02564 10.5846 9.10769 9.9282 9.18974 9.27179C3.85641 10.1744 0 14.7692 0 20.1846V31.2615H11.159C16.4923 31.2615 21.0872 27.4872 22.0718 22.2359H20.1846V22.3179Z" fill="#15C2FF"/>
<path d="M20.1846 0C14.7692 0 10.1743 3.85641 9.18973 9.18974C9.84614 9.10769 10.5025 9.02564 11.159 9.02564C17.3128 9.02564 22.3179 13.9487 22.3179 20.1026C22.3179 20.841 22.2359 21.4974 22.1538 22.2359H31.3436V11.159C31.2615 5.00513 26.3384 0 20.1846 0Z" fill="#2C82FF"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

@ -3714,10 +3714,17 @@
"cats": [
10
],
"description": "ClickTale is a SaaS solution enabling organizations to gain visual in-page analytics.",
"icon": "ClickTale.png",
"js": {
"ClickTale": "",
"ClickTaleEvent": "",
"ClickTaleGlobal": "",
"clickTaleStartEventSignal": ""
},
"scripts": "\\.clicktale\\.net",
"saas": true,
"pricing": ["mid", "recurring"],
"website": "http://www.clicktale.com"
},
"Clickbank": {
@ -4193,6 +4200,22 @@
"scripts": "conversionlab\\.trackset\\.com/track/tsend\\.js",
"website": "http://www.trackset.it/conversionlab"
},
"Convert": {
"cats": [
74
],
"description": "Convert Experiences is an enterprise A/B testing and personalization solution for conversion optimization and data-driven decisions in high-traffic websites.",
"icon": "Convert.png",
"js": {
"convert_temp": "\\;confidence:33",
"convertData": "\\;confidence:33",
"convert": "\\;confidence:34"
},
"scripts": "\\.convertexperiments\\.com/js",
"saas": true,
"pricing": ["high", "recurring"],
"website": "https://www.convert.com"
},
"ConvertFlow": {
"cats": [
10,
@ -5839,7 +5862,8 @@
"Fastly-Debug-Digest": "",
"Vary": "Fastly-SSL",
"X-Fastly-Request-ID": "",
"x-via-fastly:": ""
"x-via-fastly:": "",
"x-fastly-origin": ""
},
"icon": "Fastly.svg",
"website": "https://www.fastly.com"
@ -6308,17 +6332,32 @@
52
],
"description": "Freshchat is a cloud-hosted live messaging and engagement application.",
"icon": "freshchat.png",
"icon": "Freshchat.svg",
"scripts": "wchat\\.freshchat\\.com/js/widget\\.js",
"saas": true,
"pricing": ["low", "recurring"],
"website": "https://www.freshworks.com/live-chat-software/"
},
"Freshmarketer": {
"Freshworks CRM": {
"cats": [
10
53,
32,
74
],
"icon": "freshmarketer.png",
"scripts": "cdn\\.freshmarketer\\.com",
"website": "https://www.freshworks.com/marketing-automation/conversion-rate-optimization/"
"description": "Freshworks CRM is a cloud-based customer relationship management (CRM) solution. Key features include one-click phone, sales lead tracking, sales management, event tracking and more.",
"icon": "Freshworks CRM.svg",
"js": {
"zarget": "",
"zargetAPI": "",
"ZargetForm": ""
},
"scripts": [
"cdn\\.freshmarketer\\.com",
"cdn\\.zarget\\.com"
],
"saas": true,
"pricing": ["mid", "recurring"],
"website": "https://www.freshworks.com/crm"
},
"Froala Editor": {
"cats": [
@ -7552,6 +7591,20 @@
"icon": "Hiawatha.png",
"website": "http://hiawatha-webserver.org"
},
"HiConversion": {
"cats": [
74
],
"description": "HiConversion is a SaaS solution that caters to ecommerce brands seeking actionable insights through their adaptive customer experience optimization.",
"icon": "HiConversion.png",
"js": {
"__hic.version": "([\\d.]+)\\;version:\\1"
},
"scripts": "deploy\\.hiconversion\\.com",
"saas": true,
"pricing": ["poa", "recurring"],
"website": "https://www.hiconversion.com"
},
"Highcharts": {
"cats": [
25
@ -11631,6 +11684,32 @@
"scripts": "^https?:\\/\\/static\\.olark\\.com\\/jsclient\\/loader1\\.js",
"website": "https://www.olark.com/"
},
"Ometria": {
"cats": [
32
],
"description": "Ometria is a customer insight and marketing automation platform.",
"icon": "Ometria.svg",
"dom": {
"form[action*='api.ometria.com']": {
"attributes": {
"action": "api\\.ometria\\.com"
}
}
},
"js": {
"ometria": "",
"AddOmetriaBasket": "",
"AddOmetriaIdentify": ""
},
"cookies": {
"ometria": ""
},
"scripts": "cdn\\.ometria\\.com",
"saas": true,
"pricing": ["poa"],
"website": "https://ometria.com"
},
"Omise": {
"cats": [
41
@ -11647,6 +11726,26 @@
"scripts": "cdn\\.omise\\.co",
"website": "https://www.omise.co"
},
"Omniconvert": {
"cats": [
74
],
"description": "Omniconvert is an award-winning conversion rate optimization (CRO) software that can be used for A/B testing, online surveys, traffic segmentation.",
"icon": "Omniconvert.png",
"dom": {
"link[href*='app.omniconvert.com']": {
"attributes": {
"href": ""
}
}
},
"js": {
"_omni": ""
},
"scripts": "cdn\\.omniconvert\\.com",
"pricing": ["mid", "recurring"],
"website": "https://www.omniconvert.com"
},
"Omnisend": {
"cats": [
32,
@ -12254,21 +12353,25 @@
"url": "\\.php(?:$|\\?)",
"website": "http://php.net"
},
"PHP-Fusion": {
"PHPFusion": {
"cats": [
1
],
"cpe": "cpe:/a:php-fusion:php-fusion",
"cpe": "cpe:/a:phpfusion:phpfusion",
"headers": {
"X-Powered-By": "PHP-Fusion (.+)$\\;version:\\1"
"X-Powered-By": "PHPFusion (.+)$\\;version:\\1",
"X-PHPFusion": "(.+)$\\;version:\\1"
},
"html": "Powered by <a href=\"[^>]+php-fusion",
"icon": "PHP-Fusion.png",
"html": [
"Powered by <a href=\"[^>]+phpfusion",
"Powered by <a href=\"[^>]+php-fusion"
],
"icon": "PHPFusion.png",
"implies": [
"PHP",
"MySQL"
],
"website": "https://www.php-fusion.co.uk"
"website": "https://phpfusion.com"
},
"PHP-Nuke": {
"cats": [
@ -15430,6 +15533,21 @@
"scripts": "siteglide\\.js",
"website": "https://www.siteglide.com"
},
"SiteSpect": {
"cats": [
74
],
"description": "SiteSpect is the A/B testing and optimization solution.",
"icon": "SiteSpect.png",
"js": {
"SS": "\\;confidence:50",
"ss_dom_var": "\\;confidence:50"
},
"scripts": "/__ssobj/core\\.js",
"saas": true,
"pricing": ["poa"],
"website": "https://www.sitespect.com"
},
"Sivuviidakko": {
"cats": [
1
@ -16769,15 +16887,18 @@
],
"website": "https://www.tessituranetwork.com"
},
"Textalk": {
"Abicart": {
"cats": [
6
],
"icon": "textalk.png",
"description": "Abicart is an ecommerce platform developed by the Swedish company Abicart AB.",
"icon": "abicart.png",
"meta": {
"generator": "Textalk Webshop"
"generator": ["Abicart", "Textalk Webshop"]
},
"website": "https://www.textalk.se"
"saas": true,
"pricing": ["mid", "recurring"],
"website": "https://abicart.com/"
},
"Texthelp": {
"cats": [
@ -16919,6 +17040,21 @@
},
"website": "http://tiddlywiki.com"
},
"Tidio": {
"cats": [
32,
5
],
"description": "Tidio is a customer communication product. It provides multi-channel support so users can communicate with customers on the go. Live chat, messenger, or email are all supported.",
"icon": "Tidio.svg",
"js": {
"tidioChatApi": ""
},
"scripts": "code\\.tidio\\.co",
"saas": true,
"pricing": ["low", "freemium", "recurring"],
"website": "https://www.tidio.com"
},
"Tiki Wiki CMS Groupware": {
"cats": [
1,
@ -17199,11 +17335,33 @@
],
"description": "Twitter is a 'microblogging' system that allows you to send and receive short posts called tweets.",
"icon": "Twitter.svg",
"scripts": "//platform\\.twitter\\.com/widgets\\.js",
"website": "http://twitter.com"
},
"Twitter Ads": {
"cats": [
36
],
"description": "Twitter Ads is an advertising platform for Twitter 'microblogging' system.",
"icon": "Twitter.svg",
"js": {
"twttr": ""
},
"scripts": "//platform\\.twitter\\.com/widgets\\.js",
"website": "http://twitter.com"
"saas": true,
"pricing": ["payg"],
"scripts": "static\\.ads-twitter\\.com/uwt\\.js",
"website": "https://ads.twitter.com"
},
"Twitter Analytics": {
"cats": [
10
],
"description": "Twitter Analytics is a built-in data-tracking platform that shows you insights specific to your Twitter account and activity.",
"icon": "Twitter.svg",
"scripts": "analytics\\.twitter\\.com",
"saas": true,
"pricing": ["freemium"],
"website": "https://analytics.twitter.com"
},
"Twitter Emoji (Twemoji)": {
"cats": [
@ -17450,6 +17608,27 @@
"scripts": "\\.usablenet\\.com/pt/",
"website": "https://usablenet.com/"
},
"Uscreen": {
"cats": [
1
],
"description": "Uscreen is a CMS to monetize VOD and live content. They provide site hosting, video hosting, and a payment gateway for selling video based content.",
"dom": {
".powered-by-uscreen": {
"text": ""
}
},
"js": {
"analyticsHost": "stats\\.uscreen\\.io"
},
"icon": "Uscreen.png",
"website": "https://uscreen.tv/",
"pricing": [
"mid",
"recurring"
],
"saas": true
},
"UserLike": {
"cats": [
52
@ -20596,7 +20775,7 @@
"description": "Tailwind is a utility-first CSS framework.",
"html": [
"<link[^>]+?href=\"[^\"]+tailwindcss[@|/][a-z]+/tailwind(?:.min)?.css",
"<link[^>]+?href=\"[^\"]+tailwindcss[@|/]([0-9.]+)(?:/[a-z]+)?/[tailwind|base|components|utilities](?:.min)?.css\\;version:\\1"
"<link[^>]+?href=\"[^\"]+tailwindcss[@|/](?:\\^)?([\\d.]+)(?:/[a-z]+)?/(?:tailwind|base|components|utilities)(?:\\.min)?\\.css\\;version:\\1"
],
"icon": "tailwindcss.svg",
"website": "https://tailwindcss.com/"