//
// Copyright (c) Microsoft and contributors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Module dependencies.
var _ = require('underscore');
var xmlbuilder = require('xmlbuilder');
var Constants = require('../util/constants');
var ServicePropertiesConstants = Constants.ServicePropertiesConstants;
exports = module.exports;
function serializeRetentionPolicy(doc, policy){
Eif(policy !== null){
if (typeof policy === 'undefined'){
policy = {};
}
doc = doc.ele(ServicePropertiesConstants.RETENTION_POLICY_ELEMENT);
if (typeof policy.Enabled !== 'undefined') {
doc = doc.ele(ServicePropertiesConstants.ENABLED_ELEMENT)
.txt(policy.Enabled)
.up();
} else {
doc = doc.ele(ServicePropertiesConstants.ENABLED_ELEMENT)
.txt(false)
.up();
}
if (typeof policy.Days !== 'undefined') {
doc = doc.ele(ServicePropertiesConstants.DAYS_ELEMENT)
.txt(policy.Days)
.up();
} else Iif (policy.Enabled === true){
doc = doc.ele(ServicePropertiesConstants.DAYS_ELEMENT)
.txt(1)
.up();
}
doc = doc.up();
}
}
function serializeLogging(doc, logging){
if (typeof logging.Version !== 'undefined') {
doc = doc.ele(ServicePropertiesConstants.VERSION_ELEMENT)
.txt(logging.Version)
.up();
} else {
doc = doc.ele(ServicePropertiesConstants.VERSION_ELEMENT)
.txt(ServicePropertiesConstants.DEFAULT_ANALYTICS_VERSION)
.up();
}
if (typeof logging.Delete !== 'undefined') {
doc = doc.ele(ServicePropertiesConstants.DELETE_ELEMENT)
.txt(logging.Delete)
.up();
} else {
doc = doc.ele(ServicePropertiesConstants.DELETE_ELEMENT)
.txt(false)
.up();
}
if (typeof logging.Read !== 'undefined') {
doc = doc.ele(ServicePropertiesConstants.READ_ELEMENT)
.txt(logging.Read)
.up();
} else {
doc = doc.ele(ServicePropertiesConstants.READ_ELEMENT)
.txt(false)
.up();
}
if (typeof logging.Write !== 'undefined') {
doc = doc.ele(ServicePropertiesConstants.WRITE_ELEMENT)
.txt(logging.Write)
.up();
} else {
doc = doc.ele(ServicePropertiesConstants.WRITE_ELEMENT)
.txt(false)
.up();
}
serializeRetentionPolicy(doc, logging.RetentionPolicy);
doc = doc.up();
}
function serializeMetrics(doc, metrics){
if (typeof metrics.Version !== 'undefined') {
doc = doc.ele(ServicePropertiesConstants.VERSION_ELEMENT)
.txt(metrics.Version)
.up();
} else {
doc = doc.ele(ServicePropertiesConstants.VERSION_ELEMENT)
.txt(ServicePropertiesConstants.DEFAULT_ANALYTICS_VERSION)
.up();
}
if (typeof metrics.Enabled !== 'undefined') {
doc = doc.ele(ServicePropertiesConstants.ENABLED_ELEMENT)
.txt(metrics.Enabled)
.up();
} else {
doc = doc.ele(ServicePropertiesConstants.ENABLED_ELEMENT)
.txt(false)
.up();
}
if (typeof metrics.IncludeAPIs !== 'undefined') {
doc = doc.ele(ServicePropertiesConstants.INCLUDE_APIS_ELEMENT)
.txt(metrics.IncludeAPIs)
.up();
} else Iif (metrics.Enabled === true){
doc = doc.ele(ServicePropertiesConstants.INCLUDE_APIS_ELEMENT)
.txt(false)
.up();
}
serializeRetentionPolicy(doc, metrics.RetentionPolicy);
}
function serializeCorsRules(doc, rules){
if(typeof rules !== 'undefined' && rules !== null && _.isArray(rules)){
rules.forEach(function (rule) {
doc = doc.ele(ServicePropertiesConstants.CORS_RULE_ELEMENT);
Eif(typeof rule.AllowedMethods !== 'undefined' && _.isArray(rule.AllowedMethods)){
doc = doc.ele(ServicePropertiesConstants.ALLOWED_METHODS_ELEMENT)
.txt(rule.AllowedMethods.join(','))
.up();
}
Eif(typeof rule.AllowedOrigins !== 'undefined' && _.isArray(rule.AllowedOrigins)){
doc = doc.ele(ServicePropertiesConstants.ALLOWED_ORIGINS_ELEMENT)
.txt(rule.AllowedOrigins.join(','))
.up();
}
Eif(typeof rule.AllowedHeaders !== 'undefined' && _.isArray(rule.AllowedHeaders)){
doc = doc.ele(ServicePropertiesConstants.ALLOWED_HEADERS_ELEMENT)
.txt(rule.AllowedHeaders.join(','))
.up();
}
Eif(typeof rule.ExposedHeaders !== 'undefined' && _.isArray(rule.ExposedHeaders)){
doc = doc.ele(ServicePropertiesConstants.EXPOSED_HEADERS_ELEMENT)
.txt(rule.ExposedHeaders.join(','))
.up();
}
Eif(typeof rule.MaxAgeInSeconds !== 'undefined'){
doc = doc.ele(ServicePropertiesConstants.MAX_AGE_IN_SECONDS_ELEMENT)
.txt(rule.MaxAgeInSeconds)
.up();
}
doc = doc.up();
});
}
}
exports.serialize = function (servicePropertiesJs) {
var doc = xmlbuilder.create();
doc = doc.begin(ServicePropertiesConstants.STORAGE_SERVICE_PROPERTIES_ELEMENT, { version: '1.0', encoding: 'utf-8' });
if (servicePropertiesJs.Logging) {
doc = doc.ele(ServicePropertiesConstants.LOGGING_ELEMENT);
serializeLogging(doc, servicePropertiesJs.Logging);
doc = doc.up();
}
if (servicePropertiesJs.HourMetrics) {
doc = doc.ele(ServicePropertiesConstants.HOUR_METRICS_ELEMENT);
serializeMetrics(doc, servicePropertiesJs.HourMetrics);
doc = doc.up();
}
if (servicePropertiesJs.MinuteMetrics) {
doc = doc.ele(ServicePropertiesConstants.MINUTE_METRICS_ELEMENT);
serializeMetrics(doc, servicePropertiesJs.MinuteMetrics);
doc = doc.up();
}
Eif (servicePropertiesJs.Cors) {
doc = doc.ele(ServicePropertiesConstants.CORS_ELEMENT);
serializeCorsRules(doc, servicePropertiesJs.Cors.CorsRule);
doc = doc.up();
}
if (servicePropertiesJs.DefaultServiceVersion) {
doc = doc.ele(ServicePropertiesConstants.DEFAULT_SERVICE_VERSION_ELEMENT)
.txt(servicePropertiesJs.DefaultServiceVersion)
.up();
}
return doc.doc().toString();
};
function parseRetentionPolicy(policyXml){
var policy = {};
Eif (typeof policyXml.Enabled !== 'undefined') {
policy.Enabled = policyXml.Enabled === 'true';
}
if (typeof policyXml.Days !== 'undefined') {
policy.Days = parseInt(policyXml.Days, 10);
}
return policy;
}
function parseLogging(loggingXml){
var logging = {};
Eif (typeof loggingXml.Version !== 'undefined') {
logging.Version = loggingXml.Version;
}
Eif (typeof loggingXml.Delete !== 'undefined') {
logging.Delete = loggingXml.Delete === 'true';
}
Eif (typeof loggingXml.Read !== 'undefined') {
logging.Read = loggingXml.Read === 'true';
}
Eif (typeof loggingXml.Write !== 'undefined') {
logging.Write = loggingXml.Write === 'true';
}
Eif (typeof loggingXml.RetentionPolicy !== 'undefined') {
logging.RetentionPolicy = parseRetentionPolicy(loggingXml.RetentionPolicy);
}
return logging;
}
function parseMetrics(metricsXml){
var metrics = {};
Eif (typeof metricsXml.Version !== 'undefined') {
metrics.Version = metricsXml.Version;
}
Eif (typeof metricsXml.Enabled !== 'undefined') {
metrics.Enabled = metricsXml.Enabled === 'true';
}
if (typeof metricsXml.IncludeAPIs !== 'undefined') {
metrics.IncludeAPIs = metricsXml.IncludeAPIs === 'true';
}
Eif (typeof metricsXml.RetentionPolicy !== 'undefined') {
metrics.RetentionPolicy = parseRetentionPolicy(metricsXml.RetentionPolicy);
}
return metrics;
}
function parseCors(corsXml){
var cors = {};
if (typeof corsXml.CorsRule !== 'undefined') {
var rulesXml = corsXml.CorsRule;
Iif (!_.isArray(rulesXml)) {
rulesXml = [ rulesXml ];
}
cors.CorsRule = [];
rulesXml.forEach(function (ruleXml) {
var rule = {};
Eif(typeof ruleXml.AllowedMethods !== 'undefined'){
Eif(ruleXml.AllowedMethods !== ''){
rule.AllowedMethods = ruleXml.AllowedMethods.split(',');
}
else {
rule.AllowedMethods = [];
}
}
Eif(typeof ruleXml.AllowedOrigins !== 'undefined'){
Eif(ruleXml.AllowedOrigins !== ''){
rule.AllowedOrigins = ruleXml.AllowedOrigins.split(',');
}
else {
rule.AllowedOrigins = [];
}
}
Eif(typeof ruleXml.AllowedHeaders !== 'undefined'){
Eif(ruleXml.AllowedHeaders !== ''){
rule.AllowedHeaders = ruleXml.AllowedHeaders.split(',');
}
else {
rule.AllowedHeaders = [];
}
}
Eif(typeof ruleXml.ExposedHeaders !== 'undefined'){
Eif(ruleXml.ExposedHeaders !== ''){
rule.ExposedHeaders = ruleXml.ExposedHeaders.split(',');
}
else {
rule.ExposedHeaders = [];
}
}
Eif(typeof ruleXml.MaxAgeInSeconds !== 'undefined'){
rule.MaxAgeInSeconds = parseInt(ruleXml.MaxAgeInSeconds, 10);
}
cors.CorsRule.push(rule);
});
}
return cors;
}
exports.parse = function (servicePropertiesXml) {
var serviceProperties = {};
if (typeof servicePropertiesXml.Logging !== 'undefined') {
serviceProperties.Logging = parseLogging(servicePropertiesXml.Logging);
}
if (typeof servicePropertiesXml.HourMetrics !== 'undefined') {
serviceProperties.HourMetrics = parseMetrics(servicePropertiesXml.HourMetrics);
}
if (typeof servicePropertiesXml.MinuteMetrics !== 'undefined') {
serviceProperties.MinuteMetrics = parseMetrics(servicePropertiesXml.MinuteMetrics);
}
Eif (typeof servicePropertiesXml.Cors !== 'undefined') {
serviceProperties.Cors = parseCors(servicePropertiesXml.Cors);
}
if (typeof servicePropertiesXml.DefaultServiceVersion !== 'undefined') {
serviceProperties.DefaultServiceVersion = servicePropertiesXml.DefaultServiceVersion;
}
return serviceProperties;
}; |