Skip to content

Commit 05576a8

Browse files
authored
Merge pull request #266 from smartdevicelink/develop
Release 2.12
2 parents a05cf59 + 5b41af1 commit 05576a8

24 files changed

+530
-246
lines changed

app/v1/app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ function exposeRoutes () {
8282
app.put('/applications/groups', auth.validateAuth, applications.putFunctionalGroup);
8383
// webengine app store
8484
app.get('/applications/store', cors(), applications.getAppStore);
85+
app.get('/applications/store/staging', cors(), applications.getStagingAppStore);
8586
app.post('/webhook', applications.webhook); //webhook route
8687
//begin policy table routes
8788
app.options('/staging/policy', cors())
@@ -105,6 +106,7 @@ function exposeRoutes () {
105106
app.get('/module', auth.validateAuth, moduleConfig.get);
106107
app.post('/module', auth.validateAuth, moduleConfig.post);
107108
app.post('/module/promote', auth.validateAuth, moduleConfig.promote);
109+
app.post('/module/promoteNoId', auth.validateAuth, moduleConfig.promoteNoId);
108110
app.get('/about', auth.validateAuth, about.getInfo);
109111
app.post('/security/certificate', certificates.createCertificate);
110112
app.post('/security/private', certificates.createPrivateKey);

app/v1/applications/controller.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,41 @@ function queryAndStoreCategories(callback) {
616616
});
617617
}
618618

619+
function getStagingAppStore (req, res, next) {
620+
let filterObj = {
621+
approval_status: 'STAGING',
622+
platform: 'EMBEDDED',
623+
};
624+
625+
if (req.query.uuid) {
626+
filterObj.app_uuid = req.query.uuid;
627+
}
628+
if (req.query.transport_type) {
629+
filterObj.transport_type = req.query.transport_type;
630+
}
631+
632+
let chosenFlow = helper.createAppInfoFlow('multiFilter', filterObj);
633+
634+
const finalFlow = flow([
635+
chosenFlow,
636+
helper.appStoreTransformation.bind(null, req.query.min_rpc_version, req.query.min_protocol_version),
637+
], { method: 'waterfall' });
638+
639+
finalFlow(function (err, apps) {
640+
if (err) {
641+
app.locals.log.error(err);
642+
return res.parcel.setStatus(500)
643+
.setMessage("Internal Server Error")
644+
.deliver();
645+
}
646+
return res.parcel.setStatus(200)
647+
.setData({
648+
applications: apps,
649+
})
650+
.deliver();
651+
})
652+
}
653+
619654
function getAppStore (req, res, next) {
620655
// only let embedded apps through
621656
let filterObj = {
@@ -670,4 +705,5 @@ module.exports = {
670705
updateAppCertificate: updateAppCertificate,
671706
checkAndUpdateCertificates: checkAndUpdateCertificates,
672707
getAppStore: getAppStore,
708+
getStagingAppStore: getStagingAppStore,
673709
};

app/v1/messages/sql.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ module.exports = {
2222
categoryByLanguage: getMessageCategoriesByLanguage,
2323
categoryByMaxId: getMessageCategoriesByMaxId,
2424
byIds: getMessagesByIdsStagingFilter,
25-
groupsByIds: getMessageGroupsByIdsStagingFilter
25+
groupsByIds: getMessageGroupsByIdsStagingFilter,
26+
highestGroupId: getHighestMessageGroupId,
2627
},
2728
getMessageNamesStaging: getMessageNamesStaging,
2829
getLanguages: getLanguages,
@@ -44,6 +45,16 @@ function getMessagesStatus (isProduction) {
4445
}
4546
}
4647

48+
//retrieve the highest id message group found
49+
function getHighestMessageGroupId (isProduction) {
50+
let viewName = isProduction ? 'view_message_group_production' : 'view_message_group_staging';
51+
52+
let sqlString = sql.select('MAX(id) AS id')
53+
.from(viewName);
54+
55+
return sqlString.toString();
56+
}
57+
4758
//retrieve message group information such as categories
4859
function getMessageGroups (isProduction, category, hideDeleted = false) {
4960
let viewName = isProduction ? 'view_message_group_production' : 'view_message_group_staging';

app/v1/module-config/controller.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,34 @@ function post(isProduction, req, res, next) {
110110
}
111111
}
112112

113+
function promoteNoId (req, res, next) {
114+
if (res.parcel.message) {
115+
return res.parcel.deliver();
116+
}
117+
118+
// retrieve the staging config
119+
const flow = helper.getModuleConfigFlow('status', false);
120+
121+
flow(function(err, data) {
122+
if (err) {
123+
app.locals.log.error(err);
124+
return res.parcel
125+
.setStatus(500)
126+
.setMessage('Internal server error')
127+
.deliver();
128+
}
129+
if (!certController.openSSLEnabled) { // cert gen not enabled
130+
data.forEach(obj => {
131+
delete obj.certificate;
132+
delete obj.private_key
133+
})
134+
}
135+
// modify the body and pass the express parameters along as if we are posting to production
136+
req.body = data[0];
137+
post(true, req, res, next);
138+
});
139+
}
140+
113141
function checkAndUpdateCertificate (cb) {
114142
if (!certController.openSSLEnabled) {
115143
if (cb) {
@@ -183,5 +211,6 @@ module.exports = {
183211
get: get,
184212
post: post.bind(null, false),
185213
promote: post.bind(null, true),
214+
promoteNoId: promoteNoId,
186215
checkAndUpdateCertificate: checkAndUpdateCertificate
187216
};

app/v1/module-config/helper.js

Lines changed: 51 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,20 @@ function validatePost (req, res) {
1515
req.body.exchange_after_x_days -= 0;
1616
req.body.timeout_after_x_seconds -= 0;
1717

18-
if (!check.number(req.body.exchange_after_x_ignition_cycles)) {
19-
return setError("exchange_after_x_ignition_cycles required");
18+
if (!check.number(req.body.exchange_after_x_ignition_cycles) ||
19+
(check.number(req.body.exchange_after_x_ignition_cycles) && req.body.exchange_after_x_ignition_cycles > 255)) {
20+
return setError("exchange_after_x_ignition_cycles required and should not exceed 255");
2021
}
2122
if (!check.number(req.body.exchange_after_x_kilometers)) {
2223
return setError("exchange_after_x_kilometers required");
2324
}
24-
if (!check.number(req.body.exchange_after_x_days)) {
25-
return setError("exchange_after_x_days required");
25+
if (!check.number(req.body.exchange_after_x_days) ||
26+
(check.number(req.body.exchange_after_x_days) && req.body.exchange_after_x_days > 255)) {
27+
return setError("exchange_after_x_days required and should not exceed 255");
2628
}
27-
if (!check.number(req.body.timeout_after_x_seconds)) {
28-
return setError("timeout_after_x_seconds required");
29+
if (!check.number(req.body.timeout_after_x_seconds) ||
30+
(check.number(req.body.timeout_after_x_seconds) && req.body.timeout_after_x_seconds > 65535)) {
31+
return setError("timeout_after_x_seconds required and should not exceed 65535");
2932
}
3033
if (!check.array(req.body.seconds_between_retries)) {
3134
return setError("seconds_between_retries required");
@@ -58,26 +61,33 @@ function validatePost (req, res) {
5861
req.body.notifications_per_minute_by_priority.COMMUNICATION -= 0;
5962
req.body.notifications_per_minute_by_priority.NORMAL -= 0;
6063
req.body.notifications_per_minute_by_priority.NONE -= 0;
61-
if (!check.number(req.body.notifications_per_minute_by_priority.EMERGENCY)) {
62-
return setError("EMERGENCY notification count required");
64+
if (!check.number(req.body.notifications_per_minute_by_priority.EMERGENCY) ||
65+
(check.number(req.body.notifications_per_minute_by_priority.EMERGENCY) && req.body.notifications_per_minute_by_priority.EMERGENCY > 255)) {
66+
return setError("EMERGENCY notification count required and should not exceed 255");
6367
}
64-
if (!check.number(req.body.notifications_per_minute_by_priority.NAVIGATION)) {
65-
return setError("NAVIGATION notification count required");
68+
if (!check.number(req.body.notifications_per_minute_by_priority.NAVIGATION) ||
69+
(check.number(req.body.notifications_per_minute_by_priority.NAVIGATION) && req.body.notifications_per_minute_by_priority.NAVIGATION > 255)) {
70+
return setError("NAVIGATION notification count required and should not exceed 255");
6671
}
67-
if (!check.number(req.body.notifications_per_minute_by_priority.PROJECTION)) {
68-
return setError("PROJECTION notification count required");
72+
if (!check.number(req.body.notifications_per_minute_by_priority.PROJECTION) ||
73+
(check.number(req.body.notifications_per_minute_by_priority.PROJECTION) && req.body.notifications_per_minute_by_priority.PROJECTION > 255)) {
74+
return setError("PROJECTION notification count required and should not exceed 255");
6975
}
70-
if (!check.number(req.body.notifications_per_minute_by_priority.VOICECOM)) {
71-
return setError("VOICECOM notification count required");
76+
if (!check.number(req.body.notifications_per_minute_by_priority.VOICECOM) ||
77+
(check.number(req.body.notifications_per_minute_by_priority.VOICECOM) && req.body.notifications_per_minute_by_priority.VOICECOM > 255)) {
78+
return setError("VOICECOM notification count required and should not exceed 255");
7279
}
73-
if (!check.number(req.body.notifications_per_minute_by_priority.COMMUNICATION)) {
74-
return setError("COMMUNICATION notification count required");
80+
if (!check.number(req.body.notifications_per_minute_by_priority.COMMUNICATION) ||
81+
(check.number(req.body.notifications_per_minute_by_priority.COMMUNICATION) && req.body.notifications_per_minute_by_priority.COMMUNICATION > 255)) {
82+
return setError("COMMUNICATION notification count required and should not exceed 255");
7583
}
76-
if (!check.number(req.body.notifications_per_minute_by_priority.NORMAL)) {
77-
return setError("NORMAL notification count required");
84+
if (!check.number(req.body.notifications_per_minute_by_priority.NORMAL) ||
85+
(check.number(req.body.notifications_per_minute_by_priority.NORMAL) && req.body.notifications_per_minute_by_priority.NORMAL > 255)) {
86+
return setError("NORMAL notification count required and should not exceed 255");
7887
}
79-
if (!check.number(req.body.notifications_per_minute_by_priority.NONE)) {
80-
return setError("NONE notification count required");
88+
if (!check.number(req.body.notifications_per_minute_by_priority.NONE) ||
89+
(check.number(req.body.notifications_per_minute_by_priority.NONE) && req.body.notifications_per_minute_by_priority.NONE > 255)) {
90+
return setError("NONE notification count required and should not exceed 255");
8191
}
8292

8393
req.body.subtle_notifications_per_minute_by_priority.EMERGENCY -= 0;
@@ -87,26 +97,33 @@ function validatePost (req, res) {
8797
req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION -= 0;
8898
req.body.subtle_notifications_per_minute_by_priority.NORMAL -= 0;
8999
req.body.subtle_notifications_per_minute_by_priority.NONE -= 0;
90-
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.EMERGENCY)) {
91-
return setError("Subtle EMERGENCY notification count required");
100+
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.EMERGENCY) ||
101+
(check.number(req.body.subtle_notifications_per_minute_by_priority.EMERGENCY) && req.body.subtle_notifications_per_minute_by_priority.EMERGENCY > 255)) {
102+
return setError("Subtle EMERGENCY notification count required and should not exceed 255");
92103
}
93-
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NAVIGATION)) {
94-
return setError("Subtle NAVIGATION notification count required");
104+
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NAVIGATION) ||
105+
(check.number(req.body.subtle_notifications_per_minute_by_priority.NAVIGATION) && req.body.subtle_notifications_per_minute_by_priority.NAVIGATION > 255)) {
106+
return setError("Subtle NAVIGATION notification count required and should not exceed 255");
95107
}
96-
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.PROJECTION)) {
97-
return setError("Subtle PROJECTION notification count required");
108+
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.PROJECTION) ||
109+
(check.number(req.body.subtle_notifications_per_minute_by_priority.PROJECTION) && req.body.subtle_notifications_per_minute_by_priority.PROJECTION > 255)) {
110+
return setError("Subtle PROJECTION notification count required and should not exceed 255");
98111
}
99-
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.VOICECOM)) {
100-
return setError("Subtle VOICECOM notification count required");
112+
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.VOICECOM) ||
113+
(check.number(req.body.subtle_notifications_per_minute_by_priority.VOICECOM) && req.body.subtle_notifications_per_minute_by_priority.VOICECOM > 255)) {
114+
return setError("Subtle VOICECOM notification count required and should not exceed 255");
101115
}
102-
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION)) {
103-
return setError("Subtle COMMUNICATION notification count required");
116+
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION) ||
117+
(check.number(req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION) && req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION > 255)) {
118+
return setError("Subtle COMMUNICATION notification count required and should not exceed 255");
104119
}
105-
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NORMAL)) {
106-
return setError("Subtle NORMAL notification count required");
120+
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NORMAL) ||
121+
(check.number(req.body.subtle_notifications_per_minute_by_priority.NORMAL) && req.body.subtle_notifications_per_minute_by_priority.NORMAL > 255)) {
122+
return setError("Subtle NORMAL notification count required and should not exceed 255");
107123
}
108-
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NONE)) {
109-
return setError("Subtle NONE notification count required");
124+
if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NONE) ||
125+
(check.number(req.body.subtle_notifications_per_minute_by_priority.NONE) && req.body.subtle_notifications_per_minute_by_priority.NONE > 255)) {
126+
return setError("Subtle NONE notification count required and should not exceed 255");
110127
}
111128
return;
112129

app/v1/policy/helper.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ function setupModuleConfig (isProduction, useLongUuids = false) {
119119
function setupConsumerFriendlyMessages (isProduction) {
120120
const getMessages = flame.flow({
121121
messageStatuses: setupSqlCommand.bind(null, messagesSql.getMessages.status(isProduction)),
122-
messageGroups: setupSqlCommand.bind(null, messagesSql.getMessages.group(isProduction, false, true))
122+
messageGroups: setupSqlCommand.bind(null, messagesSql.getMessages.group(isProduction, false, true)),
123+
highestMessageGroupId: setupSqlCommand.bind(null, messagesSql.getMessages.highestGroupId(isProduction, false))
123124
}, {method: 'parallel'});
124125

125126
const makeMessages = [

0 commit comments

Comments
 (0)