File "SslLabsData.js"
Full path: /home/satkhirabarta/public_html/wp-content/plugins/really-simple-ssl/settings/src/Dashboard/SslLabs/SslLabsData.js
File
size: 6.79 B (6.79 KB bytes)
MIME-type: text/x-java
Charset: utf-8
Download Open Edit Advanced Editor &nnbsp; Back
import {create} from 'zustand';
import * as rsssl_api from "../../utils/api";
const useSslLabs = create(( set, get ) => ({
debug:false, //set to true for localhost testing, with wordpress.org as domain
sslScanStatus: false,
sslData: false,
endpointData: [],
dataLoaded:false,
clearCache:false,
requestActive:false,
intervalId:false,
setIntervalId: (intervalId) => set({ intervalId }),
setRequestActive: (requestActive) => set({ requestActive }),
setSslScanStatus: (sslScanStatus) => set({ sslScanStatus }),
setClearCache: (clearCache) => set({ clearCache }),
setSslData: (sslData) => set({ sslData }),
setEndpointData: (endpointData) => set({ endpointData }),
isLocalHost: () => {
let debug = get().debug;
return debug ? false: window.location.host.indexOf('localhost')!==-1;
} ,
host: () => {
let debug = get().debug;
return debug ? "wordpress.org" : window.location.host;
},
fetchSslData: async () => {
rsssl_api.doAction('ssltest_get').then( ( response ) => {
if (response.data.hasOwnProperty('host') ) {
let data = get().processSslData(response.data);
set({
sslData: data,
endpointData: data.endpointData,
dataLoaded: true,
})
}
})
},
getSslLabsData: (e) => {
let clearCacheUrl = '';
if (get().clearCache){
set({clearCache:false,sslData:false });
clearCacheUrl = '&startNew=on';
}
const url = "https://api.ssllabs.com/api/v3/analyze?host="+get().host()+clearCacheUrl;
let data = {};
data.url = url;
return rsssl_api.doAction('ssltest_run', data).then( ( response ) => {
if ( response && !response.errors) {
return JSON.parse(response);
} else {
return false;
}
})
},
runSslTest: () => {
get().getSslLabsData().then((sslData)=>{
if ( sslData.status && sslData.status === 'ERROR' ){
sslData = get().processSslData(sslData);
set({
sslData: sslData,
sslScanStatus: 'completed',
});
clearInterval(get().intervalId);
} else
if ( sslData.endpoints && sslData.endpoints.filter((endpoint) => endpoint.statusMessage === 'Ready').length>0 ) {
let completedEndpoints = sslData.endpoints.filter((endpoint) => endpoint.statusMessage === 'Ready');
let lastCompletedEndpointIndex = completedEndpoints.length-1;
let lastCompletedEndpoint = completedEndpoints[ lastCompletedEndpointIndex];
let ipAddress = lastCompletedEndpoint.ipAddress;
get().getEndpointData(ipAddress).then( (response ) => {
let endpointData = get().endpointData;
if (!Array.isArray(endpointData)) endpointData = [];
if ( !response.errors ){
//if the endpoint already is stored, replace it.
let foundEndpoint = false;
if (endpointData.length>0) {
endpointData.forEach(function(endpoint, i) {
if ( endpoint.ipAddress === response.ipAddress ) {
endpointData[i] = response;
foundEndpoint = true;
}
});
}
if ( !foundEndpoint ) {
endpointData[endpointData.length] = response;
}
set({endpointData: endpointData});
sslData.endpointData = endpointData;
}
if ( !sslData.errors ) {
rsssl_api.doAction('store_ssl_labs', sslData );
}
sslData = get().processSslData(sslData);
set({sslData: sslData, requestActive: false});
});
} else {
//if there are no errors, this runs when the first endpoint is not completed yet
sslData = get().processSslData(sslData);
if ( !sslData.errors ) {
rsssl_api.doAction('store_ssl_labs', sslData ).then( ( response ) => {});
}
set({sslData:sslData,requestActive: false});
}
});
},
processSslData: (sslData) => {
if ( !sslData ) {
sslData = {};
}
let progress = sslData.progress ? sslData.progress : 0;
let startTime = sslData.startTime ? sslData.startTime : '';
let statusMessage = sslData.statusMessage ? sslData.statusMessage : '';
let grade = sslData.grade ? sslData.grade : '?';
let ipAddress='';
if ( sslData.endpoints ) {
let completedEndpoints = sslData.endpoints.filter((endpoint) => endpoint.statusMessage === 'Ready');
let completedEndpointsLength = completedEndpoints.length;
let lastCompletedEndpoint = completedEndpoints[ completedEndpointsLength-1];
let activeEndpoint = sslData.endpoints.filter((endpoint) => endpoint.statusMessage === 'In progress')[0];
let activeEndpointProgress = 0;
if (activeEndpoint) {
activeEndpointProgress = activeEndpoint.progress ? activeEndpoint.progress : 0;
statusMessage = activeEndpoint.statusDetailsMessage;
ipAddress = activeEndpoint.ipAddress;
}
if (lastCompletedEndpoint) grade = lastCompletedEndpoint.grade;
progress = ( completedEndpointsLength * 100 + activeEndpointProgress ) / sslData.endpoints.length;
}
if ( sslData.errors ) {
grade = '?';
statusMessage = sslData.errors[0].message;
progress = 100;
}
let summary = {};
if ( progress >= 100) {
set({sslScanStatus: 'completed'});
}
summary.grade = grade;
summary.startTime = startTime;
summary.statusMessage = statusMessage;
summary.ipAddress = ipAddress;
summary.progress = progress;
sslData.summary = summary;
return sslData;
},
getEndpointData:(ipAddress) => {
const url = 'https://api.ssllabs.com/api/v3/getEndpointData?host='+get().host()+'&s='+ipAddress;
let data = {};
data.url = url;
return rsssl_api.doAction('ssltest_run', data).then( ( response ) => {
if ( response && !response.errors) {
return JSON.parse(response);
}
})
}
}));
export default useSslLabs;