Shinobi/libs/onvifDeviceManager.js

171 lines
6.4 KiB
JavaScript

const {
getDeviceInformation,
setHostname,
setProtocols,
setGateway,
setDNS,
setNTP,
rebootCamera,
setDateAndTime,
createUser,
deleteUser,
setVideoConfiguration,
setNetworkInterface,
setImagingSettings,
setDiscoveryMode,
getUIFieldValues,
} = require('./onvifDeviceManager/utils.js')
module.exports = function(s,config,lang,app,io){
async function getOnvifDevice(groupKey,monitorId){
const onvifDevice = s.group[groupKey].activeMonitors[monitorId].onvifConnection || (await s.createOnvifDevice({id: monitorId, ke: groupKey})).device
return onvifDevice
}
/**
* API : Get ONVIF Data from Camera
*/
app.get(config.webPaths.apiPrefix+':auth/onvifDeviceManager/:ke/:id',function (req,res){
s.auth(req.params,async (user) => {
const groupKey = req.params.ke
const monitorId = req.params.id
const {
monitorPermissions,
monitorRestrictions,
} = s.getMonitorsPermitted(user.details,monitorId)
const {
isRestricted,
isRestrictedApiKey,
apiKeyPermissions,
} = s.checkPermission(user)
if(
isRestrictedApiKey && apiKeyPermissions.get_monitors_disallowed ||
isRestricted && !monitorPermissions[`${monitorId}_monitors`]
){
s.closeJsonResponse(res,{ok: false, msg: lang['Not Authorized']});
return
}
const endData = {ok: true}
try{
const onvifDevice = await getOnvifDevice(groupKey,monitorId)
const cameraInfo = await getUIFieldValues(onvifDevice)
endData.onvifData = cameraInfo
}catch(err){
endData.ok = false
endData.err = err
s.debugLog(err)
}
s.closeJsonResponse(res,endData)
},res,req);
})
/**
* API : Save ONVIF Data to Camera
*/
app.post(config.webPaths.apiPrefix+':auth/onvifDeviceManager/:ke/:id/save',function (req,res){
s.auth(req.params,async (user) => {
const groupKey = req.params.ke
const monitorId = req.params.id
const {
monitorPermissions,
monitorRestrictions,
} = s.getMonitorsPermitted(user.details,monitorId);
const {
isRestricted,
isRestrictedApiKey,
apiKeyPermissions,
} = s.checkPermission(user);
if(
isRestrictedApiKey && apiKeyPermissions.control_monitors_disallowed
){
s.closeJsonResponse(res,{
ok: false,
msg: lang['Not Authorized']
});
return
}
const endData = {ok: true}
const responses = {}
try{
const onvifDevice = await getOnvifDevice(groupKey,monitorId)
const form = s.getPostData(req)
const videoToken = form.VideoConfiguration && form.VideoConfiguration.videoToken ? form.VideoConfiguration.videoToken : null
if(form.DateandTime){
const dateAndTime = form.DateandTime
if(dateAndTime.setNTP){
responses.setNTP = await setNTP(onvifDevice,dateAndTime.setNTP)
}
responses.setDateAndTime = await setDateAndTime(onvifDevice,dateAndTime)
}
if(form.Imaging){
responses.setImagingSettings = await setImagingSettings(onvifDevice,Object.assign({videoToken: videoToken},form.Imaging))
}
if(form.Network){
const network = form.Network
if(network.setHostname){
responses.setHostname = await setHostname(onvifDevice,network.setHostname)
}
if(network.setProtocols){
responses.setProtocols = await setProtocols(onvifDevice,network.setProtocols)
}
if(network.setGateway){
responses.setGateway = await setGateway(onvifDevice,network.setGateway)
}
if(network.setDNS){
responses.setDNS = await setDNS(onvifDevice,network.setDNS)
}
if(network.setNetworkInterface){
responses.setNetworkInterface = await setNetworkInterface(onvifDevice,network.setNetworkInterface)
}
}
if(form.VideoConfiguration){
responses.VideoConfiguration = await setVideoConfiguration(onvifDevice,form.VideoConfiguration)
}
}catch(err){
endData.ok = false
endData.err = err
s.debugLog(err)
s.debugLog(responses)
}
endData.responses = responses
s.closeJsonResponse(res,endData)
},res,req);
})
/**
* API : Reboot Camera
*/
app.get(config.webPaths.apiPrefix+':auth/onvifDeviceManager/:ke/:id/reboot',function (req,res){
s.auth(req.params,async (user) => {
const groupKey = req.params.ke
const monitorId = req.params.id
const {
monitorPermissions,
monitorRestrictions,
} = s.getMonitorsPermitted(user.details,monitorId);
const {
isRestricted,
isRestrictedApiKey,
apiKeyPermissions,
} = s.checkPermission(user);
if(
isRestrictedApiKey && apiKeyPermissions.control_monitors_disallowed
){
s.closeJsonResponse(res,{
ok: false,
msg: lang['Not Authorized']
});
return
}
const endData = {ok: true}
try{
const onvifDevice = await getOnvifDevice(groupKey,monitorId)
const cameraInfo = await rebootCamera(onvifDevice)
endData.onvifData = cameraInfo
}catch(err){
endData.ok = false
endData.err = err
s.debugLog(err)
}
s.closeJsonResponse(res,endData)
},res,req);
})
}