Index: /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.controller.js
===================================================================
--- /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.controller.js	(revision 9202)
+++ /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.controller.js	(working copy)
@@ -6,15 +6,286 @@
         '$state',
         '$uibModal',
         'sysResourceService',
-        function($scope, $rootScope, $state, $uibModal, sysResourceService) {
+        '$filter',
+        function($scope, $rootScope, $state, $uibModal, sysResourceService, $filter) {
             var avxViewModel = this;
             $rootScope.title = "System Email Settings";
+            $scope.onLabel = $filter('T')('Enable');
+            $scope.offLabel = $filter('T')('Disable');
+
+            avxViewModel.email = {
+                from_string: ''
+            };
+            avxViewModel.emailPlaceholder = '';
+            avxViewModel.originalFromString = '';
+            avxViewModel.alert = {
+                hostname: '',
+                send_alert: false
+            };
+            avxViewModel.alertHostnamePlaceholder = '';
+            avxViewModel.externalServer = {
+                enable: false,
+                email_server: '',
+                server_port: 25,
+                use_ssl_tls: false
+            };
+            avxViewModel.externalSender = {
+                email: '',
+                password: ''
+            };
+            avxViewModel.relay = {
+                enable: false
+            };
+            avxViewModel.relay_data = [];
+            
+            // Define showProgressBar function early so it can be used by all functions
+            var showProgressBar = function() {
+                var modalInstance = $uibModal.open({
+                    templateUrl: 'app/modules/common/templates/progress.html',
+                    controller: 'showProgressCtrl',
+                    controllerAs: 'progress',
+                    backdrop: false
+                });
+                return modalInstance;
+            };
+            
+            // Get relay status on initialization
+            sysResourceService
+                .get_relay_status()
+                .then(function(res) {
+                    if (res && res.status === 200 && res.data[0]) {
+                        avxViewModel.relay.enable = res.data[1].status || false;
+                    }
+                })
+                .catch(function() {
+                    avxViewModel.relay.enable = false;
+                });
+            
+            avxViewModel.refreshRelayList = function() {
+                showProgressBar();
+                sysResourceService
+                    .get_relay_server_list()
+                    .then(function(res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res && res.status === 200) {
+                            avxViewModel.relay_data = res.data || [];
+                        }
+                    })
+                    .catch(function() {
+                        $rootScope.$broadcast('endLoading', true);
+                        alert("Failed to load relay server list.");
+                    });
+            };
+            
+            avxViewModel.showRelayAddModal = function() {
+                var modalInstance = $uibModal.open({
+                    templateUrl: 'app/modules/system/submenu/sys_mgmt/email/relay-add.html',
+                    controller: 'relayAddCtrl',
+                    controllerAs: 'relayAdd'
+                });
+                modalInstance.result.then(function(){
+                    avxViewModel.refreshRelayList();
+                });
+            };
+            
+            avxViewModel.deleteRelay = function(row) {
+                var reminder = $filter('T')('Are you sure you want to delete the relay server for hostname') + ' [' + row.host_name + ']?';
+                var action_reminder = confirm(reminder);
+                
+                if (!action_reminder) {
+                    return;
+                }
+                
+                showProgressBar();
+                sysResourceService
+                    .delete_relay_server(row.host_name)
+                    .then(function(res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res && res.status === 200) {
+                            if (!res.data[0]) {
+                                alert(res.data[1]);
+                            } else {
+                                avxViewModel.refreshRelayList();
+                            }
+                        } else {
+                            alert("Internal error.");
+                        }
+                    })
+                    .catch(function() {
+                        $rootScope.$broadcast('endLoading', true);
+                        alert("Failed to delete relay server.");
+                    });
+            };
+            
+            avxViewModel.clearAllRelayServers = function() {
+                var reminder = $filter('T')('Are you sure you want to clear the relay server configuration?');
+                var action_reminder = confirm(reminder);
+                
+                if (!action_reminder) {
+                    return;
+                }
+                
+                showProgressBar();
+                sysResourceService
+                    .clear_relay_server()
+                    .then(function(res) {
+                        if (res && res.status === 200) {
+                            if (!res.data[0]) {
+                                $rootScope.$broadcast('endLoading', true);
+                                alert(res.data[1]);
+                            } else {
+                                sysResourceService
+                                    .get_relay_server_list()
+                                    .then(function(listRes) {
+                                        if (listRes && listRes.status === 200) {
+                                            avxViewModel.relay_data = listRes.data || [];
+                                        }
+                                        return sysResourceService.get_relay_status();
+                                    })
+                                    .then(function(statusRes) {
+                                        $rootScope.$broadcast('endLoading', true);
+                                        if (statusRes && statusRes.status === 200 && statusRes.data[0]) {
+                                            avxViewModel.relay.enable = statusRes.data[1].status || false;
+                                        }
+                                    })
+                                    .catch(function() {
+                                        $rootScope.$broadcast('endLoading', true);
+                                        alert("Failed to refresh relay status.");
+                                    });
+                            }
+                        } else {
+                            $rootScope.$broadcast('endLoading', true);
+                            alert("Internal error.");
+                        }
+                    })
+                    .catch(function() {
+                        $rootScope.$broadcast('endLoading', true);
+                        alert("Failed to clear relay servers.");
+                    });
+            };
+            
+            avxViewModel.toggleRelayEnable = function() {
+                // Check if relay_data has items before enabling
+                if (avxViewModel.relay.enable && (!avxViewModel.relay_data || avxViewModel.relay_data.length === 0)) {
+                    avxViewModel.relay.enable = false;
+                    alert($filter('T')('Please complete all required relay server settings before enabling this configuration.'));
+                    return;
+                }
+                
+                showProgressBar();
+                sysResourceService
+                    .update_relay_status(avxViewModel.relay.enable)
+                    .then(function(res) {
+                        if (res && res.status === 200 && res.data[0]) {
+                            // Refresh status after successful update
+                            sysResourceService
+                                .get_relay_status()
+                                .then(function(statusRes) {
+                                    $rootScope.$broadcast('endLoading', true);
+                                    if (statusRes && statusRes.status === 200 && statusRes.data[0]) {
+                                        avxViewModel.relay.enable = statusRes.data[1].status || false;
+                                    }
+                                })
+                                .catch(function() {
+                                    $rootScope.$broadcast('endLoading', true);
+                                    alert("Error occurred while getting relay status.");
+                                });
+                        } else {
+                            $rootScope.$broadcast('endLoading', true);
+                            alert("Failed to update relay status: " + (res.data[1] || ""));
+                            // Revert the switch state on failure
+                            avxViewModel.relay.enable = !avxViewModel.relay.enable;
+                        }
+                    })
+                    .catch(function() {
+                        $rootScope.$broadcast('endLoading', true);
+                        alert("Error occurred while updating relay status.");
+                        // Revert the switch state on error
+                        avxViewModel.relay.enable = !avxViewModel.relay.enable;
+                    });
+            };
+            
+            avxViewModel.validateExternalServer = function() {
+                if (avxViewModel.externalServer.enable) {
+                    var emailServer = avxViewModel.externalServer.email_server;
+                    var serverPort = avxViewModel.externalServer.server_port;
+                    
+                    var isEmailServerEmpty = !emailServer || emailServer.trim() === '';
+                    var isServerPortEmpty = !serverPort || serverPort === '';
+                    
+                    if (isEmailServerEmpty || isServerPortEmpty) {
+                        alert($filter('T')('Please complete all required external Email server settings before enabling this configuration.'));
+                        avxViewModel.externalServer.enable = false;
+                        return false;
+                    }
+                    
+                    showProgressBar();
+                    sysResourceService
+                        .update_external_mail_server_status(true)
+                        .then(function(res) {
+                            $rootScope.$broadcast('endLoading', true);
+                            if (res && res.status === 200) {
+                                if (!res.data[0]) {
+                                    alert(res.data[1]);
+                                    avxViewModel.externalServer.enable = false;
+                                }
+                            } else {
+                                alert("Internal error.");
+                                avxViewModel.externalServer.enable = false;
+                            }
+                        });
+                } else {
+                    showProgressBar();
+                    sysResourceService
+                        .update_external_mail_server_status(false)
+                        .then(function(res) {
+                            $rootScope.$broadcast('endLoading', true);
+                            if (res && res.status === 200) {
+                                if (!res.data[0]) {
+                                    alert(res.data[1]);
+                                }
+                            } else {
+                                alert("Internal error.");
+                            }
+                        });
+                }
+            };
+            
             function get_info(cb) {
                 sysResourceService
                     .get_email()
                     .then(function(res) {
                         if (res && res.status === 200) {
-                            avxViewModel.email = res.data;
+                            var fromString = res.data.from_string || '';
+                            if (fromString && fromString.match(/^%/)) {
+                                avxViewModel.emailPlaceholder = fromString;
+                                avxViewModel.email.from_string = '';
+                                avxViewModel.originalFromString = '';
+                            } else {
+                                avxViewModel.email.from_string = fromString;
+                                avxViewModel.emailPlaceholder = '';
+                                avxViewModel.originalFromString = fromString;
+                            }
+                        }
+                        if(cb) {
+                            cb();
+                        }
+                });
+            }
+            function get_alert_info(cb) {
+                sysResourceService
+                    .get_alert_mail()
+                    .then(function(res) {
+                        if (res && res.status === 200) {
+                            var hostString = res.data.host_string || '';
+                            if (hostString && hostString.match(/^%/)) {
+                                avxViewModel.alertHostnamePlaceholder = hostString;
+                                avxViewModel.alert.hostname = '';
+                            } else {
+                                avxViewModel.alert.hostname = hostString;
+                                avxViewModel.alertHostnamePlaceholder = '';
+                            }
+                            avxViewModel.alert.send_alert = res.data.is_send_alert_msg === true ? true : false;
                         }
                         if(cb) {
                             cb();
@@ -22,36 +293,197 @@
                 });
             }
             get_info();
-            var showProgressBar = function() {
-                var modalInstance = $uibModal.open({
-                    templateUrl: 'app/modules/common/templates/progress.html',
-                    controller: 'showProgressCtrl',
-                    controllerAs: 'progress',
-                    backdrop: false
+            get_alert_info();
+            
+            function get_external_mail_info(cb) {
+                sysResourceService
+                    .get_external_mail_server()
+                    .then(function(res) {
+                        if (res && res.status === 200) {
+                            avxViewModel.externalServer.enable = res.data.status || false;
+                            avxViewModel.externalServer.email_server = res.data.server_address || '';
+                            avxViewModel.externalServer.server_port = res.data.server_port || 25;
+                            avxViewModel.externalServer.use_ssl_tls = res.data.is_ssl || false;
+                        }
+                        if(cb) {
+                            cb();
+                        }
+                });
+            }
+            get_external_mail_info();
+            
+            function get_external_sender_info(cb) {
+                sysResourceService
+                    .get_external_sender_mail()
+                    .then(function(res) {
+                        if (res && res.status === 200) {
+                            avxViewModel.externalSender.email = res.data.email || '';
+                            avxViewModel.externalSender.password = res.data.password || '';
+                        }
+                        if(cb) {
+                            cb();
+                        }
+                });
+            }
+            get_external_sender_info();
+            avxViewModel.refreshRelayList();
+            
+            avxViewModel.saveEmail = function(from) {
+                var reminder = $filter('T')('Warning: This operation will take approximately 1–2 minutes. Please do not refresh the page or perform other actions until it is completed.');
+                var action_reminder = confirm(reminder);
+                
+                if (!action_reminder) {
+                    avxViewModel.email.from_string = avxViewModel.originalFromString;
+                    from.$dirty = true;
+                    return;
+                }
+                
+                showProgressBar();
+                sysResourceService
+                    .update_email(avxViewModel.email.from_string || "")
+                    .then(function(res) {
+                        setTimeout(function() {
+                            $rootScope.$broadcast('endLoading', true);
+                        }, 60000);
+                        
+                        if (res&&res.status === 200) {
+                            if (!res.data[0]) {
+                                alert(res.data[1]);
+                                from.$dirty=true;
+                            } else {
+                                from.$dirty=false;
+
+                                avxViewModel.originalFromString = avxViewModel.email.from_string;
+                            }
+                        } else {
+                            alert("Internal error.");
+                            from.$dirty=true;
+                        }
                 });
             };
-            avxViewModel.saveEmail = function(email, from) {
+            avxViewModel.saveAlert = function(form) {
+                var reminder = $filter('T')('Warning: This operation will take approximately 1–2 minutes. Please do not refresh the page or perform other actions until it is completed.');
+                var action_reminder = confirm(reminder);
+                
+                if (!action_reminder) {
+                    return;
+                }
+                
                 showProgressBar();
-                var post_data=email;
-                if (email === undefined) {
-                    post_data="";
+                var post_data = {
+                    host_string: avxViewModel.alert.hostname || "",
+                    is_send_alert_msg: avxViewModel.alert.send_alert || false
+                };
+                sysResourceService
+                    .update_alert_mail(post_data)
+                    .then(function(res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res&&res.status === 200) {
+                            if (!res.data[0]) {
+                                alert(res.data[1]);
+                                form.$dirty=true;
+                            } else {
+                                form.$dirty=false;
+                            }
+                        } else {
+                            alert("Internal error.");
+                            form.$dirty=true;
+                        }
+                });
+            };
+            avxViewModel.saveExternalMailServer = function(form) {
+                showProgressBar();
+                var post_data = {
+                    status: avxViewModel.externalServer.enable || false,
+                    server_address: avxViewModel.externalServer.email_server || "",
+                    server_port: avxViewModel.externalServer.server_port || 25,
+                    is_ssl: avxViewModel.externalServer.use_ssl_tls || false
+                };
+                sysResourceService
+                    .update_external_mail_server(post_data)
+                    .then(function(res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res&&res.status === 200) {
+                            if (!res.data[0]) {
+                                alert(res.data[1]);
+                                form.$dirty=true;
+                            } else {
+                                form.$dirty=false;
+                            }
+                        } else {
+                            alert("Internal error.");
+                            form.$dirty=true;
+                        }
+                });
+            };
+            avxViewModel.deleteExternalMailServer = function() {
+                var reminder = $filter('T')('Are you sure you want to delete the external email server?');
+                var action_reminder = confirm(reminder);
+                
+                if (!action_reminder) {
+                    return;
                 }
+                
+                showProgressBar();
+                sysResourceService
+                    .delete_external_mail_server()
+                    .then(function(res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res && res.status === 200) {
+                            if (!res.data[0]) {
+                                alert(res.data[1]);
+                            } else {
+                                $state.go('index.system.sys_mgmt.email', {}, {reload: true});
+                            }
+                        } else {
+                            alert("Internal error.");
+                        }
+                });
+            };
+            avxViewModel.saveExternalSender = function(form) {
+                showProgressBar();
+                var post_data = {
+                    email: avxViewModel.externalSender.email || "",
+                    password: avxViewModel.externalSender.password || ""
+                };
                 sysResourceService
-                    .update_email(post_data)
+                    .update_external_sender_mail(post_data)
                     .then(function(res) {
                         $rootScope.$broadcast('endLoading', true);
                         if (res&&res.status === 200) {
                             if (!res.data[0]) {
                                 alert(res.data[1]);
-                                from.$dirty=true;
+                                form.$dirty=true;
                             } else {
-                                if (email === undefined) {
-                                    from.$dirty=false;
-                                }
+                                form.$dirty=false;
+                            }
+                        } else {
+                            alert("Internal error.");
+                            form.$dirty=true;
+                        }
+                });
+            };
+            avxViewModel.deleteExternalSender = function() {
+                var reminder = $filter('T')('Are you sure you want to delete the Email?');
+                var action_reminder = confirm(reminder);
+                
+                if (!action_reminder) {
+                    return;
+                }
+                
+                showProgressBar();
+                sysResourceService
+                    .delete_external_sender_mail()
+                    .then(function(res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        if (res && res.status === 200) {
+                            if (!res.data[0]) {
+                                alert(res.data[1]);
+                            } else {
+                                $state.go('index.system.sys_mgmt.email', {}, {reload: true});
                             }
                         } else {
                             alert("Internal error.");
-                            from.$dirty=true;
                         }
                 });
             };
@@ -59,4 +491,63 @@
                 $state.go('index.system.sys_mgmt.email', {}, {reload: true});
             };
         }
+    ])
+    .controller('relayAddCtrl', [
+        '$scope',
+        '$rootScope',
+        '$state',
+        '$uibModalInstance',
+        '$uibModal',
+        'sysResourceService',
+        function($scope, $rootScope, $state, $uibModalInstance, $uibModal, sysResourceService) {
+            var avxViewModel = this;
+            avxViewModel.data = {
+                host_name: '',
+                relay_server: ''
+            };
+            avxViewModel.loading = false;
+            
+            var showProgressBar = function() {
+                var modalInstance = $uibModal.open({
+                    templateUrl: 'app/modules/common/templates/progress.html',
+                    controller: 'showProgressCtrl',
+                    controllerAs: 'progress',
+                    backdrop: false
+                });
+                return modalInstance;
+            };
+            
+            avxViewModel.modalClose = function() {
+                $uibModalInstance.dismiss();
+            };
+            
+            avxViewModel.add = function(data) {
+                showProgressBar();
+                avxViewModel.loading = true;
+                var post_data = {
+                    host_name: data.host_name || "",
+                    relay_server: data.relay_server || ""
+                };
+                sysResourceService
+                    .add_relay_server(post_data)
+                    .then(function(res) {
+                        $rootScope.$broadcast('endLoading', true);
+                        avxViewModel.loading = false;
+                        if (res && res.status === 200) {
+                            if (!res.data[0]) {
+                                alert(res.data[1]);
+                            } else {
+                                $uibModalInstance.close();
+                            }
+                        } else {
+                            alert("Internal error.");
+                        }
+                    })
+                    .catch(function() {
+                        $rootScope.$broadcast('endLoading', true);
+                        avxViewModel.loading = false;
+                        alert("Failed to add relay server.");
+                    });
+            };
+        }
     ]);
\ No newline at end of file
Index: /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.html
===================================================================
--- /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.html	(revision 9202)
+++ /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.html	(working copy)
@@ -1,16 +1,194 @@
 <div class="row">
-    <form class="form-horizontal" name="general" verify-scope="tipStyle: 1" unsaved-warning-form>
-        <div class="form-group">
-            <label class="col-md-3 control-label">{{'Email'|T}}</label>
-            <div class="col-md-6">
-                <input ng-verify="required:false" type="email" name="from_string" class="form-control" placeholder="" required ng-model="sys_email.email.from_string" resettable>
-            </div>
-        </div>
-        <div class="form-group" ng-show="general.$dirty">
-            <div class="col-md-offset-3 col-md-9">
-                <button type="submit" ng-verify="control:'general'" class="btn btn-primary" ng-click="sys_email.saveEmail(sys_email.email.from_string, general)">{{'Apply Changes'|T}}</button>
-                <button type="reset" class="btn btn-default btn-cancel" ng-click="general.$dirty=false;sys_email.cancel()">{{'Cancel'|T}}</button>
-            </div>
-        </div>
-    </form>
+    <div class="col-md-12">
+        <rd-widget>
+            <rd-widget-header icon="fa fa-envelope" title="{{'System Email Sender Configuration'|T}}">
+            </rd-widget-header>
+            <rd-widget-body class="no-padding">
+                <form class="form-horizontal" name="sender" verify-scope="tipStyle: 1" unsaved-warning-form>
+                    <div class="form-group">
+                        <label class="col-md-3 control-label">{{'From'|T}}</label>
+                        <div class="col-md-6">
+                            <input ng-verify="required:false" type="email" name="from_string" class="form-control" placeholder="{{sys_email.emailPlaceholder}}" ng-model="sys_email.email.from_string" resettable>
+                        </div>
+                    </div>
+                    <div class="form-group" ng-show="sys_email.email.from_string !== sys_email.originalFromString">
+                        <div class="col-md-offset-3 col-md-9">
+                            <button type="submit" ng-verify="control:'sender'" class="btn btn-primary" ng-click="sys_email.saveEmail(sys_email.email.from_string, sender)">{{'Apply Changes'|T}}</button>
+                            <button type="reset" class="btn btn-default btn-cancel" ng-click="sys_email.email.from_string=sys_email.originalFromString">{{'Cancel'|T}}</button>
+                        </div>
+                    </div>
+                </form>
+            </rd-widget-body>
+        </rd-widget>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-md-12">
+        <rd-widget>
+            <rd-widget-header icon="fa fa-bell" title="{{'System Alert Mail Configuration'|T}}">
+            </rd-widget-header>
+            <rd-widget-body class="no-padding">
+                <form class="form-horizontal" name="alert" verify-scope="tipStyle: 1" unsaved-warning-form>
+                    <div class="form-group">
+                        <label class="col-md-3 control-label">{{'Hostname'|T}}</label>
+                        <div class="col-md-6">
+                            <input type="text" name="hostname" class="form-control" placeholder="{{sys_email.alertHostnamePlaceholder}}" ng-model="sys_email.alert.hostname" resettable>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-md-3 control-label">{{'Send Alert Message'|T}}</label>
+                        <div class="col-md-6">
+                            <input bs-switch type="checkbox" name="send_alert" ng-model="sys_email.alert.send_alert" resettable switch-on-text="{{onLabel}}" switch-off-text="{{offLabel}}"/>
+                        </div>
+                    </div>
+                    <div class="form-group" ng-show="alert.$dirty">
+                        <div class="col-md-offset-3 col-md-9">
+                            <button type="submit" class="btn btn-primary" ng-click="sys_email.saveAlert(alert)">{{'Apply Changes'|T}}</button>
+                            <button type="reset" class="btn btn-default btn-cancel" ng-click="alert.$dirty=false;sys_email.cancel()">{{'Cancel'|T}}</button>
+                        </div>
+                    </div>
+                </form>
+            </rd-widget-body>
+        </rd-widget>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-md-12">
+        <rd-widget>
+            <rd-widget-header icon="fa fa-envelope" title="{{'External SNMP Mail Server Configuration'|T}}">
+            </rd-widget-header>
+            <rd-widget-body class="no-padding">
+                <div class="form-horizontal">
+                    <div class="form-group">
+                        <div class="col-md-12 text-center">
+                            <input bs-switch type="checkbox" name="external_server_enable" ng-model="sys_email.externalServer.enable" ng-change="sys_email.validateExternalServer()" switch-on-text="{{onLabel}}" switch-off-text="{{offLabel}}"/>
+                        </div>
+                    </div>
+                </div>
+                <form class="form-horizontal" name="externalServer" verify-scope="tipStyle: 1" unsaved-warning-form>
+                    <div class="form-group">
+                        <label class="col-md-3 control-label">{{'External Email Server'|T}}</label>
+                        <div class="col-md-6">
+                            <input type="text" name="email_server" class="form-control" placeholder="" ng-model="sys_email.externalServer.email_server" ng-verify="required:true, minlength:1, maxlength:64, pattern:'^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)$'" resettable>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-md-3 control-label">{{'Server Port'|T}}</label>
+                        <div class="col-md-6">
+                            <input type="number" name="server_port" class="form-control" placeholder="25" ng-model="sys_email.externalServer.server_port" min="0" max="65535" ng-verify="required:true" resettable>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-md-3 control-label">{{'Use SSL/TLS'|T}}</label>
+                        <div class="col-md-6">
+                            <input bs-switch type="checkbox" name="use_ssl_tls" ng-model="sys_email.externalServer.use_ssl_tls" resettable switch-on-text="{{onLabel}}" switch-off-text="{{offLabel}}"/>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="col-md-offset-3 col-md-9">
+                            <button type="button" class="btn btn-danger" ng-click="sys_email.deleteExternalMailServer()">{{'Delete'|T}}</button>
+                        </div>
+                    </div>
+                    <div class="form-group" ng-show="externalServer.$dirty">
+                        <div class="col-md-offset-3 col-md-9">
+                            <button type="submit" ng-verify="control:'externalServer'" class="btn btn-primary" ng-click="sys_email.saveExternalMailServer(externalServer)">{{'Apply Changes'|T}}</button>
+                            <button type="reset" class="btn btn-default btn-cancel" ng-click="externalServer.$dirty=false;sys_email.cancel()">{{'Cancel'|T}}</button>
+                        </div>
+                    </div>
+                </form>
+            </rd-widget-body>
+        </rd-widget>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-md-12">
+        <rd-widget>
+            <rd-widget-header icon="fa fa-user" title="{{'External SNMP Sender Mail Configuration'|T}}">
+            </rd-widget-header>
+            <rd-widget-body class="no-padding">
+                <form class="form-horizontal" name="externalSender" verify-scope="tipStyle: 1" unsaved-warning-form>
+                    <div class="form-group">
+                        <label class="col-md-3 control-label">{{'Email'|T}}</label>
+                        <div class="col-md-6">
+                            <input type="email" name="external_sender_email" class="form-control" placeholder="" ng-model="sys_email.externalSender.email" ng-verify="required:true, minlength:1, maxlength:32" resettable>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-md-3 control-label">{{'Password'|T}}</label>
+                        <div class="col-md-6">
+                            <input type="password" name="external_sender_password" class="form-control" placeholder="" ng-model="sys_email.externalSender.password" ng-verify="required:true, minlength:1, maxlength:64" resettable>
+                        </div>
+                    </div>
+                    <div class="form-group" ng-show="externalSender.$dirty">
+                        <div class="col-md-offset-3 col-md-9">
+                            <button type="submit" ng-verify="control:'externalSender'" class="btn btn-primary" ng-click="sys_email.saveExternalSender(externalSender)">{{'Apply Changes'|T}}</button>
+                            <button type="reset" class="btn btn-default btn-cancel" ng-click="externalSender.$dirty=false;sys_email.cancel()">{{'Cancel'|T}}</button>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="col-md-offset-3 col-md-9">
+                            <button type="button" class="btn btn-danger" ng-click="sys_email.deleteExternalSender()">{{'Delete'|T}}</button>
+                        </div>
+                    </div>
+                </form>
+            </rd-widget-body>
+        </rd-widget>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-md-12">
+        <rd-widget>
+            <rd-widget-header icon="fa fa-server" title="{{'Relay Server Configuration'|T}}">
+            </rd-widget-header>
+            <rd-widget-body class="no-padding">
+                <div class="form-horizontal">
+                    <div class="form-group">
+                        <div class="col-md-12 text-center">
+                            <input bs-switch type="checkbox" name="relay_enable" ng-model="sys_email.relay.enable" ng-change="sys_email.toggleRelayEnable()" switch-on-text="{{onLabel}}" switch-off-text="{{offLabel}}"/>
+                        </div>
+                    </div>
+                </div>
+                <div class="table-toolbar"> 
+                    <div class="">
+                        <div class="btn-group">
+                            <button class="btn btn-link hive_enable_active" title="{{'Refresh'|T}}" ng-click="sys_email.refreshRelayList()"><i class="fa fa-refresh"></i></button>
+                            <button class="btn btn-link" title="{{'Add'|T}}" ng-click="sys_email.showRelayAddModal()"><i class="fa fa-plus-circle"></i></button>
+                            <button class="btn btn-link" title="{{'Clear All'|T}}" ng-click="sys_email.clearAllRelayServers()"><i class="fa fa-times-circle"></i></button>
+                        </div>
+                    </div>
+                </div>
+                <div class="table-container" st-table="displayedRelayCollection" st-safe-src="sys_email.relay_data">
+                    <div class="table-responsive table-content">
+                        <table class="table table-striped table-hover">
+                            <thead>
+                                <tr>
+                                    <th st-sort="host_name">{{'Hostname'|T}}</th>
+                                    <th st-sort="relay_server">{{'Relay Server'|T}}</th>
+                                    <th>{{'Action'|T}}</th>
+                                </tr>
+                            </thead>
+                            <tbody ng-show="sys_email.relay_data.length">
+                                <tr ng-repeat="row in displayedRelayCollection">
+                                    <td>{{row.host_name}}</td>
+                                    <td>{{row.relay_server}}</td>
+                                    <td>
+                                        <a title="{{'Delete'|T}}" class="fa fa-times-circle" href="" ng-click="sys_email.deleteRelay(row)"><span style="margin-left: 8px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;">{{'Delete'|T}}</span></a>
+                                    </td>
+                                </tr>
+                            </tbody>
+                        </table>
+                    </div>
+                    <div style="margin-bottom: 15px;text-align: center" ng-hide="sys_email.relay_data"><img src="app/images/loading.gif"></div>
+                    <div class="table-pagination">
+                        <div class="pagination-detail"></div>
+                        <div class="pagination" st-pagination="" st-items-by-page="10"></div>
+                    </div>
+                </div>
+            </rd-widget-body>
+        </rd-widget>
+    </div>
 </div>
\ No newline at end of file
Index: /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/relay-add.html
===================================================================
--- /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/relay-add.html	(revision 0)
+++ /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/relay-add.html	(working copy)
@@ -0,0 +1,29 @@
+<div class="modal-header">
+    <button type="button" class="close" ng-click="relayAdd.modalClose()">&times;</button>
+    <h4 class="modal-title">{{'Add Relay Server'|T}}</h4>
+</div>
+
+<div class="modal-body overflow-y-inherit">
+    <div class="row">
+        <div class="col-lg-12">
+            <form class="form-horizontal" name="relayForm" verify-scope="tipStyle: 1">
+                <div class="form-group">
+                    <label class="col-md-3 control-label">{{'Hostname'|T}}</label>
+                    <div class="col-md-9">
+                        <input ng-verify="required:true, minlength:1, maxlength:50" type="text" class="form-control" placeholder="" ng-model="relayAdd.data.host_name" name="host_name">
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-md-3 control-label">{{'Relay Server'|T}}</label>
+                    <div class="col-md-9">
+                        <input ng-verify="required:true, minlength:1, maxlength:30" type="text" class="form-control" placeholder="" ng-model="relayAdd.data.relay_server" name="relay_server">
+                    </div>
+                </div>
+            </form>
+        </div>
+    </div>
+</div>
+<div class="modal-footer">
+    <button type="button" class="btn btn-default" ng-click="relayAdd.modalClose()">{{'Cancel'|T}}</button>
+    <button ng-verify="control:'relayForm'" type="button" disabled="relayAdd.loading" class="btn btn-primary" ng-click="relayAdd.add(relayAdd.data)">{{'Save'|T}}</button>
+</div>
Index: /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/system.service.js
===================================================================
--- /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/system.service.js	(revision 9202)
+++ /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/system.service.js	(working copy)
@@ -1,770 +1,857 @@
-angular.module('avx.system')
-       .service('sysResourceService', [ 
-        '$q',
-        'apiService',
-         function($q, apiService) {
-            return {
-                get_host: get_host,
-                update_host: update_host,
-                reset_host: reset_host,
-                get_time: get_time,
-                update_time: update_time,
-                clear_timezone: clear_timezone,
-                get_ntp: get_ntp,
-                update_ntp: update_ntp,
-                add_ntp_server: add_ntp_server,
-                delete_ntp_server: delete_ntp_server,
-                get_user: get_user,
-                add_user: add_user,
-                update_user: update_user,
-                delete_user: delete_user,
-                update_user_ssh: update_user_ssh,
-                get_user_ssh_key:get_user_ssh_key,
-                get_user_ssh_pwd:get_user_ssh_pwd,
-                delete_user_ssh:delete_user_ssh,
-                import_user_ssh_key:import_user_ssh_key,
-                system_update: system_update,
-                system_shutdown: system_shutdown,
-                system_reboot: system_reboot,
-                get_email: get_email,
-                update_email: update_email,
-                get_config_running: get_config_running,
-                get_config_startup: get_config_startup,
-                get_config_tech: get_config_tech,
-                load_config:load_config,
-                load_config_scp:load_config_scp,
-                load_config_tftp:load_config_tftp,
-                load_config_file:load_config_file,
-                load_config_local:load_config_local,
-                backup_config:backup_config,
-                backup_config_scp:backup_config_scp,
-                backup_config_tftp:backup_config_tftp,
-                backup_config_file:backup_config_file,
-                get_saved_config_files: get_saved_config_files,
-                delete_config_file:delete_config_file,
-                download_config_file:download_config_file,
-                get_webui:get_webui,
-                update_webui:update_webui,
-                get_webui_ssl:get_webui_ssl,
-                webui_ssl_import:webui_ssl_import,
-                webui_ssl_clear:webui_ssl_clear,
-                get_xmlrpc:get_xmlrpc,
-                update_xmlrpc:update_xmlrpc,
-                get_restapi:get_restapi,
-                update_restapi:update_restapi,
-                get_ssh:get_ssh,
-                update_ssh:update_ssh,
-                regenerate_ssh_key: regenerate_ssh_key,
-                get_access_enable:get_access_enable,
-                update_access_enable:update_access_enable,
-                get_access_config:get_access_config,
-                update_access_config:update_access_config,
-                reset_access_config:reset_access_config,
-                get_va_info: get_va_info,
-                get_sys_resource: get_sys_resource,
-                get_sys_resource_occupation_topN: get_sys_resource_occupation_topN,
-                get_port_resource: get_port_resource,
-                get_ssl_resource: get_ssl_resource,
-                get_sys_version: get_sys_version,
-                get_sys_license_info: get_sys_license_info,
-                get_sys_central_license_info: get_sys_central_license_info,
-                get_sys_pool_license_info: get_sys_pool_license_info,
-                get_sys_apv_demo_license_info: get_sys_apv_demo_license_info,
-                get_sys_pool_license_assignment: get_sys_pool_license_assignment,
-                get_sys_central_license_assignment: get_sys_central_license_assignment,
-                assign_sys_pool_license_resource: assign_sys_pool_license_resource,
-                unassign_sys_pool_license_resource: unassign_sys_pool_license_resource,
-                get_per_va_sys_pool_license_assignment: get_per_va_sys_pool_license_assignment,
-                update_per_va_sys_pool_license_assignment: update_per_va_sys_pool_license_assignment,
-                update_avx_license: update_avx_license,
-                update_va_license: update_va_license,
-                update_apv_license: update_apv_license,
-                update_avx_pool_license: update_avx_pool_license,
-                generate_avx_license_request_file: generate_avx_license_request_file,
-                generate_va_individual_license_request_file: generate_va_individual_license_request_file,
-                generate_apv_central_license_request_file: generate_apv_central_license_request_file,
-                generate_avx_pool_license_request_file: generate_avx_pool_license_request_file,
-                get_license_status: get_license_status,
-                clear_configuration: clear_configuration,
-                unassignVapvLicense: unassignVapvLicense,
-                assignVapvLicense: assignVapvLicense,
-                backup_all_config_file: backup_all_config_file,
-                load_all_config_file: load_all_config_file,
-                load_all_config_local: load_all_config_local,
-                get_udisk_files: get_udisk_files,
-                get_udisk_name: get_udisk_name,
-                load_config_udisk: load_config_udisk,
-                backup_config_udisk: backup_config_udisk,
-                update_user_bind: update_user_bind,
-                get_user_bind_cert:get_user_bind_cert,
-                import_user_bind_cert:import_user_bind_cert,
-                get_netiag_license_info:get_netiag_license_info,
-                get_netgate_license_info:get_netgate_license_info,
-                update_netiag_license:update_netiag_license,
-                update_netgate_license:update_netgate_license,
-                generate_netiag_license_request_file:generate_netiag_license_request_file,
-                generate_netgate_license_request_file:generate_netgate_license_request_file,
-                get_netgate_sys_pool_license_assignment:get_netgate_sys_pool_license_assignment,
-                get_per_va_netiag_pool_license_assignment:get_per_va_netiag_pool_license_assignment,
-                get_per_va_netgate_pool_license_assignment:get_per_va_netgate_pool_license_assignment,
-                get_aaa_data: get_aaa_data,
-                change_aaa_status: change_aaa_status,
-                update_aaa_data: update_aaa_data,
-                clear_aaa_data: clear_aaa_data,
-                delete_aaa_data: delete_aaa_data,
-                clean_all_ntp: clean_all_ntp,
-                add_ntp_key: add_ntp_key,
-                delete_ntp_key: delete_ntp_key,
-                get_ntp_key: get_ntp_key,
-            };
-            function get_udisk_files() {
-                return apiService.get('/api/avx/system/config_mgmt/UdiskFileConfig/_get_list_data');
-            }
-            function get_udisk_name() {
-                return apiService.get('/api/avx/system/config_mgmt/UdiskConfig/_get_list_data');
-            }
-            function get_host() {
-                return apiService.get('/api/avx/system/HostSettings/_fields');
-            }
-            function update_host(host) {
-                var url = '/api/avx/system/HostSettings/_update'
-                var post_data = {"post_data": JSON.stringify({"hostname":host})};
-                return apiService.post(url, post_data);
-            }
-            function reset_host() {
-                return apiService.post('/api/avx/system/HostSettings/_perform?action=Reset&options=%7B%22__pk_list%22%3A%5B%22%22%5D%7D');
-            }
-            function get_time() {
-                return apiService.get('/api/avx/system/TimeSettings/_fields');
-            }
-            function update_time(time, timezone) {
-                var url = '/api/avx/system/TimeSettings/_update';
-                var post_data = {"post_data": JSON.stringify({"system_time":time, "system_timezone":timezone})};
-                return apiService.post(url, post_data);
-            }
-            function clear_timezone() {
-                var url = '/api/avx/system/TimeSettings/_perform?action=Clear_timezone';
-                var post_data = {"action":"Clear_timezone","options": JSON.stringify({"__pk_list":[]})}
-                return apiService.post(url, post_data);
-            }
-            function get_ntp() {
-                return apiService.get('/api/avx/system/NTPSettings/_fields?fields=[%22enable_ntp%22,%20%22ntp_server%22,%20%22ntp_stats%22,%20%22ntp_key%22]');
-            }
-            function update_ntp(onoff) {
-                var url = '/api/avx/system/NTPSettings/_update';
-                var post_data = {"post_data": JSON.stringify({"enable_ntp":onoff})};
-                return apiService.post(url, post_data);
-            }
-            function add_ntp_server(data) {
-                var url = '/api/avx/system/NTPServer/_add';
-                var post_data = {"post_data": JSON.stringify({"ip":data["ip"], "options":data["options"], "key_id":data["key_id"]})};
-                return apiService.post(url, post_data);
-            }
-            function delete_ntp_server(data) {
-                var url = '/api/avx/system/NTPServer/_delete';
-                var post_data = {"pk": JSON.stringify({"ip":data["ip"]})};
-                return apiService.post(url, post_data);
-            }
-            function get_user() {
-                return apiService.get('/api/avx/system/user_mgmt/Administrator/_get_list_data');
-            }
-            function add_user(data) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_add';
-                var post_data = {"post_data": JSON.stringify({"username":data["username"], "passwords":data["passwords"], "level":data["level"]})};
-                return apiService.post(url, post_data);
-            }
-            function update_user(data) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_update/username/%22'+data["username"]+'%22';
-                var post_data = {"post_data": JSON.stringify({"username":data["username"], "passwords":data["passwords"], "level":data["level"]})};
-                return apiService.post(url, post_data);
-            }
-            function update_user_ssh(user, data) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_update/username/%22'+user+'%22';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function delete_user(data) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_delete';
-                var post_data = {"pk": JSON.stringify({"username":data["username"]})};
-                return apiService.post(url, post_data);
-            }
-            function get_user_ssh_key(name) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_field_group/username/"'+ name +'"?field_group=ssh';
-                return apiService.get(url);
-            }
-            function get_user_ssh_pwd(name) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_field_group/username/"'+ name +'"?field_group=enable';
-                return apiService.get(url);
-            }
-            function delete_user_ssh(name) {
-                var url = '/api/avx/system/user_mgmt/SSHKey/_delete';
-                var post_data = {"pk": JSON.stringify({"user":[{"_asso_idx":0,"username":name}]})};
-                return apiService.post(url, post_data);
-            }
-            function import_user_ssh_key(name, options) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_perform?action=ImportKey';
-                options["__pk_list"] = [JSON.stringify({"username":name})];
-                var post_data = {"action":"ImportKey","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function system_update(data) {
-                var url = '/api/avx/system/system_mgmt/SystemUpdate/_perform';
-                var post_data = {"action":"Update","options": JSON.stringify({"option":data["option"], "using":data["using"]})};
-                return apiService.post(url, post_data);
-            }
-            function system_shutdown(data) {
-                var url = '/api/avx/system/system_mgmt/SystemShutdownReboot/_perform';
-                var post_data = {"action":"Shutdown","options": JSON.stringify({"option":data["option"]})};
-                return apiService.post(url, post_data);
-            }
-            function system_reboot(data) {
-                var url = '/api/avx/system/system_mgmt/SystemShutdownReboot/_perform';
-                var post_data = {"action":"Reboot","options": JSON.stringify({})};
-                return apiService.post(url, post_data);
-            }
-            function get_email() {
-                return apiService.get('/api/avx/system/system_mgmt/EmailSettings/_fields');
-            }
-            function update_email(email) {
-                var url = '/api/avx/system/system_mgmt/EmailSettings/_update';
-                var post_data = {"post_data": JSON.stringify({"from_string":email})};
-                return apiService.post(url, post_data);
-            }
-            function get_config_running() {
-                return apiService.get('/api/avx/system/config_mgmt/ViewConfig/_fields?fields=[%22running_config%22]');
-            }
-            function get_config_startup() {
-                return apiService.get('/api/avx/system/config_mgmt/ViewConfig/_fields?fields=[%22startup_config%22]');
-            }
-            function get_config_tech() {
-                return apiService.get('/api/avx/system/config_mgmt/ViewConfig/_fields?fields=[%22tech%22]');
-            }
-            function load_config() {
-                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
-                var post_data = {"action":"LoadStartupConfig","options": JSON.stringify({})};
-                return apiService.post(url, post_data);
-            }
-            function load_config_scp(data) {
-                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
-                //{"servername":"10.8.5.202","username":"tiankai","passwdscp":"click1","path":"/home/tiankai/x.x","file_passwdscp":"xx"}
-                var options={
-                    "servername":data["server_name"],
-                    "username":data["username"],
-                    "passwdscp":data["password"],
-                    "path":data["path"],
-                    "file_passwdscp":data["filePasswd"]
-                };
-                var post_data = {"action":"LoadConfigSCP","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function load_config_tftp(data) {
-                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
-                //{"server":"10.8.5.202","filename":"/home/tiankai/xxx","passwd":"sss"}
-                var options={
-                    "server":data["server_ip"],
-                    "filename":data["fileName"],
-                    "passwd":data["filePasswd"]
-                };
-                var post_data = {"action":"LoadConfigTFTP","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function get_saved_config_files() {
-                return apiService.get('/api/avx/system/config_mgmt/SavedFile/_get_list_data');
-            }
-            function load_config_file(data) {
-                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
-                var options={
-                    "filename":data.split(".")[0]
-                };
-                var post_data = {"action":"LoadConfigFile","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function load_all_config_file(file, password) {
-                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
-                var options={
-                    "file": file.split(".")[0],
-                    "password": password
-                };
-                var post_data = {"action":"LoadAllConfigFile","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function load_config_udisk(disk_name, file_name) {
-                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
-                var options={
-                    "disk_name": disk_name,
-                    "file_name": file_name
-                };
-                var post_data = {"action": "LoadConfigUdisk","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function load_config_local(data) {
-                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
-                var options={
-                    "local":data
-                };
-                var post_data = {"action":"LoadRunningConfigLocal","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function load_all_config_local(file, password) {
-                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
-                var options = {
-                    "local": file,
-                    "password": password
-                };
-                var post_data = {"action":"LoadAllConfigLocal","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function backup_config() {
-                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
-                var post_data = {"action":"BackupStartupConfig","options": JSON.stringify({})};
-                return apiService.post(url, post_data);
-            }
-            function backup_config_scp(data) {
-                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
-                //{"server_name":"10.8.8.10","user_name":"tiankai","password":"click1","path":"/home/tiankai/1.tgz","file_password":"dd"}
-                var options={
-                    "server_name": data["server_name"],
-                    "user_name": data["user_name"],
-                    "password": data["password"],
-                    "path": data["path"],
-                    "file_password": data["passwd_file"]
-                };
-                var post_data = {"action":"BackupConfigSCP","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function backup_config_tftp(data) {
-                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
-                //{"ip":"1.1.1.1","file":"sss","file_password":"ss"}
-                var options={
-                    "ip":data["server_ip"],
-                    "file":data["file_name"],
-                    "file_password":data["passwd_file"]
-                };
-                var post_data = {"action":"BackupConfigTFTP","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function backup_config_file(data) {
-                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
-                var actionModel = "BackupConfigSavedFile";
-                var options = {
-                    "file": data["filename"]
-                };
-                if (data.type == "all") {
-                    options["password"] = data["password"];
-                    actionModel = "BackupAllConfigSavedFile";
-                }
-                var post_data = {"action": actionModel,"options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function backup_all_config_file(data) {
-                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
-                var options={
-                    "file": data["filename"],
-                    "password": data["password"]
-                };
-                var post_data = {"action":"BackupAllConfigSavedFile","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function backup_config_udisk(data) {
-                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
-                var options={
-                    "disk_name": data["disk_name"],
-                    "file_name": data["file_name"]
-                };
-                var post_data = {"action": "BackupConfigUdisk","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function delete_config_file(data, file_type) {
-                var url = '/api/avx/system/config_mgmt/SavedFile/_delete';
-                var options = {
-                    "name": data,
-                    "file_type": file_type
-                };
-                var post_data = {"pk": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function download_config_file(name, type) {
-                var url = '/localfile/configfile/' + name;
-                return window.open(url);
-            }
-            function get_webui() {
-                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=webui_settings');
-            }
-            function update_webui(data) {
-                var url = '/api/avx/system/access_control/AccessControl/_update';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function get_webui_ssl() {
-                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=webui_ssl_cert');
-            }
-            function webui_ssl_import(data) {
-                var url = '/api/avx/system/access_control/AccessControl/_perform';
-                var action;
-                var options={"__pk_list":[""]};
-                if (data["type"] == "cert") {
-                    action = 'Import_Cert';
-                } else {
-                    action = 'Import_Interca';
-                }
-                if (data["import_way"] == "File") {
-                    options["using"] = {
-                        "local": {
-                            "cert": data["local"]
-                        }
-                    };
-                    // Add password parameters for local file import
-                    if (data["pfx_pass"] !== undefined) {
-                        options["using"]["local"]["pfx_pass"] = data["pfx_pass"];
-                    }
-                    if (data["passphrase"] !== undefined) {
-                        options["using"]["local"]["passphrase"] = data["passphrase"];
-                    }
-                } else if (data["import_way"] == "URL") {
-                    options["using"] = {
-                        "online": {
-                            "url": data["url"]
-                        }
-                    };
-                    // Add passphrase parameter for URL import
-                    if (data["passphrase"] !== undefined) {
-                        options["using"]["online"]["passphrase"] = data["passphrase"];
-                    }
-                } else if (data["import_way"] == "INPUT") {
-                    options["using"] = {
-                        "manual_input": {
-                            "cert_content": data["input"]
-                        }
-                    };
-                    // Add passphrase parameter for manual input
-                    if (data["passphrase"] !== undefined) {
-                        options["using"]["manual_input"]["passphrase"] = data["passphrase"];
-                    }
-                }
-
-                var post_data = {"action": action,"options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function webui_ssl_clear(data) {
-                var url = '/api/avx/system/access_control/AccessControl/_perform';
-                var action;
-                if (data["type"] == "cert") {
-                    action = 'Clear_Cert';
-                } else {
-                    action = 'Clear_Interca';
-                }
-                var options={"__pk_list":[""]};
-                var post_data = {"action": action,"options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function get_xmlrpc() {
-                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=xmlrpc_settings');
-            }
-            function update_xmlrpc(data) {
-                var url = '/api/avx/system/access_control/AccessControl/_update';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function get_restapi() {
-                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=restapi_settings');
-            }
-            function update_restapi(data) {
-                var url = '/api/avx/system/access_control/AccessControl/_update';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function get_ssh() {
-                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=ssh_settings');
-            }
-            function update_ssh(data) {
-                var url = '/api/avx/system/access_control/AccessControl/_update';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function regenerate_ssh_key() {
-                url = '/api/avx/system/access_control/AccessControl/_perform?action=Regenerate';
-                var post_data = {"action":"Regenerate","options": JSON.stringify({"__pk_list":[""]})};
-                return apiService.post(url, post_data);
-            }
-            function get_access_enable() {
-                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=enablemode_settings');
-            }
-            function update_access_enable(data) {
-                var url = '/api/avx/system/access_control/AccessControl/_update';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function get_access_config() {
-                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=configmode_settings');
-            }
-            function update_access_config(data) {
-                var url = '/api/avx/system/access_control/AccessControl/_update';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function reset_access_config() {
-                var url = '/api/avx/system/access_control/AccessControl/_perform?action=Reset';
-                var post_data = {"action":"Reset","options": JSON.stringify({"__pk_list":[""]})};
-                return apiService.post(url, post_data);
-            }
-            function get_va_info(key) {
-                key=key||null;
-                if (key) {
-                    url = '/api/avx/va/instance/VAInstance/_get_list_data?key='+JSON.stringify(key);
-                } else {
-                    url = '/api/avx/va/instance/VAInstance/_get_list_data'
-                }
-                return apiService.get(url);
-            }
-            function get_sys_resource() {
-                return apiService.get('/api/avx/system/system_mgmt/SystemResource/_fields');
-            }
-            function get_sys_resource_occupation_topN() {
-                return apiService.get('/sys_resource_occupation');
-            }
-            function get_port_resource(key) {
-                key=key||null;
-                if (key) {
-                    url = '/api/avx/network/interface/TrafficInterface/_get_list_data?key='+JSON.stringify(key);
-                } else {
-                    url = '/api/avx/network/interface/TrafficInterface/_get_list_data'
-                }
-                return apiService.get(url);
-            }
-            function get_ssl_resource(key) {
-                key=key||null;
-                if (key) {
-                    url = '/api/avx/network/interface/SSL/_get_list_data?key='+JSON.stringify(key);
-                } else {
-                    url = '/api/avx/network/interface/SSL/_get_list_data'
-                }
-                return apiService.get(url);
-            }
-            function get_sys_version() {
-                return apiService.get('/api/avx/system/SystemInfo/_field_group?field_group=status');
-            }
-            function get_sys_license_info() {
-                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=sys_license');
-            }
-            function get_sys_central_license_info() {
-                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=apv_license');
-            }
-            function get_sys_pool_license_info() {
-                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=ag_license');
-            }
-            function get_sys_apv_demo_license_info() {
-                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=apv_demo_license');
-            }
-            function get_sys_pool_license_assignment(key) {
-                key=key||null;
-                if (key) {
-                    url = '/api/avx/system/system_mgmt/VaLicense/_get_list_data?key='+JSON.stringify(key);
-                } else {
-                    url = '/api/avx/system/system_mgmt/VaLicense/_get_list_data'
-                }
-                return apiService.get(url);
-            }
-            function get_sys_central_license_assignment(key) {
-                key=key||null;
-                if (key) {
-                    url = '/api/avx/system/system_mgmt/APVLicense/_get_list_data?key='+JSON.stringify(key);
-                } else {
-                    url = '/api/avx/system/system_mgmt/APVLicense/_get_list_data'
-                }
-                return apiService.get(url);
-            }
-            function get_license_status(requestData) {
-                return apiService.post('/avx/get_license_status', requestData);
-            }
-            function assign_sys_pool_license_resource(va_name, licensed_vs, licensed_user,licensed_s2s) {
-                var post_data = {"post_data": JSON.stringify({"va":[{"va_name":va_name,"_asso_idx":0}],"vs":licensed_vs,"user":licensed_user,"s2s":licensed_s2s})};
-                return apiService.post('/api/avx/system/system_mgmt/VaLicense/_add', post_data);
-            }
-            function unassign_sys_pool_license_resource(va_name) {
-                var pk_list = [{"va": [{"_asso_idx": 0, "va_name": va_name}]}];
-                var post_data = {"pk": JSON.stringify(pk_list)};
-                return apiService.post('/api/avx/system/system_mgmt/VaLicense/_delete2', post_data);
-            }
-            function get_per_va_sys_pool_license_assignment(va_name) {
-                return apiService.get('/api/avx/system/system_mgmt/VaLicense/_get_asso_list_data?initial_filter=%7B"va"%3A%5B%7B"va_name"%3A"'+va_name+'"%2C"_asso_idx"%3A0%7D%5D%7D');
-            }
-            function update_per_va_sys_pool_license_assignment(va_name, licensed_vs, licensed_user, licensed_s2s) {
-                var url = '/api/avx/system/system_mgmt/VaLicense/_update/va/%5B%7B%22va_name%22%3A%20%22'+ va_name +'%22%2C%20%22_asso_idx%22%3A%200%7D%5D'
-                var post_data = {"post_data": JSON.stringify({"vs":licensed_vs, "user":licensed_user, "s2s":licensed_s2s})};
-                return apiService.post(url, post_data);
-            }
-            function update_avx_license(license_key) {
-                //license_key: 38f9d4a3-5844e59d-f75d561d-c949400b-e1af218c-20000000-0455d8ab-20161128-99999999
-                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
-                var post_data = {"post_data": JSON.stringify({"license_key":license_key})};
-                return apiService.post(url, post_data);
-            }
-            function update_va_license(current_va_name, license_key, type) {
-                var url = '/api/avx/va/instance/ImportVALicense/_perform';
-                var post_data = {"action":"Import","options": JSON.stringify({"va_name":current_va_name, "license": license_key, "type": type})};
-                return apiService.post(url, post_data);
-            }
-            function update_apv_license(apv_license_key) {
-                //license_key: 3c75b31a-93e04ad9-b28d4f7d-760d4502-7688b3db-30000000-0455d8ab-20170207-99999999
-                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
-                var post_data = {"post_data": JSON.stringify({"apv_license_key":apv_license_key})};
-                return apiService.post(url, post_data);
-            }
-            function update_avx_pool_license(ag_license_key) {
-                //ag_license_key: 3grBc315-NWCU8WCS-Cc00Z0Pm-NUA=#131-4d61c9ab-a9cf1625-6067eaa3-beef03a3-4d#7ebaa-accd7#dc-ba98765
-                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
-                var post_data = {"post_data": JSON.stringify({"ag_license_key":ag_license_key})};
-                return apiService.post(url, post_data);
-            }
-            function generate_avx_license_request_file(license_capacity) {
-                var url = '/lic_requset_file/generate'
-                var post_data = {"post_data": JSON.stringify({"license_capacity":license_capacity})};
-                return apiService.post(url, post_data);
-            }
-            function generate_va_individual_license_request_file(current_va_name, licensed_vs, licensed_user, licensed_s2s, licensed_vxag, va_size) {
-                var url = '/lic_requset_file/generate'
-                var post_data = {"post_data": JSON.stringify({"current_va_name":current_va_name, "licensed_vs":licensed_vs, "licensed_user": licensed_user, "licensed_s2s": licensed_s2s, "licensed_vxag": licensed_vxag, "va_size": va_size})};
-                return apiService.post(url, post_data);
-            }
-            function generate_apv_central_license_request_file(licensed_vapv) {
-                var url = '/lic_requset_file/generate'
-                var post_data = {"post_data": JSON.stringify({"licensed_vapv":licensed_vapv})};
-                return apiService.post(url, post_data);
-            }
-            function generate_avx_pool_license_request_file(licensed_vs, licensed_user, licensed_s2s, licensed_vxag) {
-                var url = '/lic_requset_file/generate'
-                var post_data = {"post_data": JSON.stringify({"licensed_vs":licensed_vs, "licensed_user": licensed_user, "licensed_s2s": licensed_s2s, "licensed_vxag": licensed_vxag})};
-                return apiService.post(url, post_data);
-            }
-            function clear_configuration(requestData) {
-                return apiService.post('/api/avx/system/config_mgmt/ClearConfiguration/_perform?action=Clear', requestData);
-            }
-            function unassignVapvLicense(requestData) {
-                return apiService.post('/api/avx/system/system_mgmt/VaLicenseAssign/_perform?action=Unassign', requestData);
-            }
-            function assignVapvLicense(requestData) {
-                return apiService.post('/api/avx/system/system_mgmt/VaLicenseAssign/_perform?action=Assign', requestData);
-            }
-            function update_user_bind(user, data) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_update/username/%22'+user+'%22';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function get_user_bind_cert(name) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_field_group/username/"'+ name +'"?field_group=twofactor';
-                return apiService.get(url);
-            }
-            function import_user_bind_cert(name, options) {
-                var url = '/api/avx/system/user_mgmt/Administrator/_perform?action=ImportCert';
-                options["__pk_list"] = [JSON.stringify({"username":name})];
-                var post_data = {"action":"ImportCert","options": JSON.stringify(options)};
-                return apiService.post(url, post_data);
-            }
-            function get_netiag_license_info() {
-                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=netiag_license');
-            }
-            function get_netgate_license_info() {
-                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=netgate_license');
-            }
-            function update_netiag_license(netiag_license_key) {
-                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
-                var post_data = {"post_data": JSON.stringify({"netiag_license_key":netiag_license_key})};
-                return apiService.post(url, post_data);
-            }
-            function update_netgate_license(netgate_license_key) {
-                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
-                var post_data = {"post_data": JSON.stringify({"netgate_license_key":netgate_license_key})};
-                return apiService.post(url, post_data);
-            }
-            function generate_netiag_license_request_file(licensed_vs, licensed_user, licensed_s2s, licensed_vnetiag) {
-                var url = '/lic_requset_file/generate'
-                var post_data = {"post_data": JSON.stringify({"licensed_vs":licensed_vs, "licensed_user": licensed_user, "licensed_s2s": licensed_s2s, "licensed_vnetiag": licensed_vnetiag})};
-                return apiService.post(url, post_data);
-            }
-            function generate_netgate_license_request_file(licensed_vs, licensed_user, licensed_s2s, licensed_vnetgate) {
-                var url = '/lic_requset_file/generate'
-                var post_data = {"post_data": JSON.stringify({"licensed_vs":licensed_vs, "licensed_user": licensed_user, "licensed_s2s": licensed_s2s, "licensed_vnetgate": licensed_vnetgate})};
-                return apiService.post(url, post_data);
-            }
-            function get_netgate_sys_pool_license_assignment(key) {
-                key=key||null;
-                if (key) {
-                    url = '/api/avx/system/system_mgmt/NetgateVaLicense/_get_list_data?key='+JSON.stringify(key);
-                } else {
-                    url = '/api/avx/system/system_mgmt/NetgateVaLicense/_get_list_data'
-                }
-                return apiService.get(url);
-            }
-            function get_per_va_netiag_pool_license_assignment(va_name) {
-                return apiService.get('/api/avx/system/system_mgmt/NetiagVaLicense/_get_asso_list_data?initial_filter=%7B"va"%3A%5B%7B"va_name"%3A"'+va_name+'"%2C"_asso_idx"%3A0%7D%5D%7D');
-            }
-            function get_per_va_netgate_pool_license_assignment(va_name) {
-                return apiService.get('/api/avx/system/system_mgmt/NetgateVaLicense/_get_asso_list_data?initial_filter=%7B"va"%3A%5B%7B"va_name"%3A"'+va_name+'"%2C"_asso_idx"%3A0%7D%5D%7D');
-            }
-            function get_aaa_data() {
-                return apiService.get('/api/avx/system/user_mgmt/AAASettings/_get_list_data');
-            }
-            function change_aaa_status(status, csrf_token) {
-                var post_data = {
-                    "action":"Enable",
-                    "options": JSON.stringify({
-                        "enable": status? 1: 0
-                    }),
-                    "csrfmiddlewaretoken": csrf_token
-                };
-                var url = '/api/avx/system/user_mgmt/AAASettings/_perform';
-                return apiService.post(url, post_data);
-            }
-            function update_aaa_data(data, csrf_token) {
-                console.log(data, csrf_token);
-                var post_data = {
-                    "action":"Update",
-                    "options": JSON.stringify(data),
-                    "csrfmiddlewaretoken": csrf_token
-                };
-                var url = '/api/avx/system/user_mgmt/AAASettings/_perform';
-                return apiService.post(url, post_data);
-            }
-            function clear_aaa_data(csrf_token) {
-                var url = '/api/avx/system/user_mgmt/AAASettings/_perform';
-                var post_data = {
-                    "action":"Clear",
-                    "options": JSON.stringify([]),
-                    "csrfmiddlewaretoken": csrf_token
-                };
-                return apiService.post(url, post_data);
-            }
-            function delete_aaa_data(csrf_token) {
-                var url = '/api/avx/system/user_mgmt/AAASettings/_delete';
-                var post_data = {
-                    "pk": JSON.stringify({
-                        "server_name": "es01"
-                    }),
-                    "csrfmiddlewaretoken": csrf_token
-                };
-                return apiService.post(url, post_data);
-            }
-            function clean_all_ntp(csrf_token) {
-                var url = '/api/avx/system/NTPSettings/_perform?action=Clear_ntp';
-                var post_data = {
-                    "action": "Clear_ntp",
-                    "options": JSON.stringify([]),
-                    "csrfmiddlewaretoken": csrf_token
-                };
-                return apiService.post(url, post_data);
-            }
-            function add_ntp_key(data) {
-                var url = '/api/avx/system/NTPKey/_add';
-                var post_data = {"post_data": JSON.stringify({"key_id":data["key_id"], "auth_key":data["auth_key"]})};
-                return apiService.post(url, post_data);
-            }
-            function delete_ntp_key(data) {
-                var url = '/api/avx/system/NTPKey/_delete';
-                var post_data = {"pk": JSON.stringify({"key_id":data["key_id"]})};
-                return apiService.post(url, post_data);
-            }
-            function get_ntp_key() {
-                return apiService.get('/api/avx/system/NTPSettings/_fields?fields=[%22ntp_key%22]');
-            }
-        }
+angular.module('avx.system')
+       .service('sysResourceService', [ 
+        '$q',
+        'apiService',
+         function($q, apiService) {
+            return {
+                get_host: get_host,
+                update_host: update_host,
+                reset_host: reset_host,
+                get_time: get_time,
+                update_time: update_time,
+                clear_timezone: clear_timezone,
+                get_ntp: get_ntp,
+                update_ntp: update_ntp,
+                add_ntp_server: add_ntp_server,
+                delete_ntp_server: delete_ntp_server,
+                get_user: get_user,
+                add_user: add_user,
+                update_user: update_user,
+                delete_user: delete_user,
+                update_user_ssh: update_user_ssh,
+                get_user_ssh_key:get_user_ssh_key,
+                get_user_ssh_pwd:get_user_ssh_pwd,
+                delete_user_ssh:delete_user_ssh,
+                import_user_ssh_key:import_user_ssh_key,
+                system_update: system_update,
+                system_shutdown: system_shutdown,
+                system_reboot: system_reboot,
+                get_email: get_email,
+                update_email: update_email,
+                get_alert_mail: get_alert_mail,
+                update_alert_mail: update_alert_mail,
+                get_external_mail_server: get_external_mail_server,
+                update_external_mail_server: update_external_mail_server,
+                update_external_mail_server_status: update_external_mail_server_status,
+                delete_external_mail_server: delete_external_mail_server,
+                get_external_sender_mail: get_external_sender_mail,
+                update_external_sender_mail: update_external_sender_mail,
+                delete_external_sender_mail: delete_external_sender_mail,
+                get_relay_server_list: get_relay_server_list,
+                add_relay_server: add_relay_server,
+                delete_relay_server: delete_relay_server,
+                clear_relay_server: clear_relay_server,
+                get_relay_status: get_relay_status,
+                update_relay_status: update_relay_status,
+                get_config_running: get_config_running,
+                get_config_startup: get_config_startup,
+                get_config_tech: get_config_tech,
+                load_config:load_config,
+                load_config_scp:load_config_scp,
+                load_config_tftp:load_config_tftp,
+                load_config_file:load_config_file,
+                load_config_local:load_config_local,
+                backup_config:backup_config,
+                backup_config_scp:backup_config_scp,
+                backup_config_tftp:backup_config_tftp,
+                backup_config_file:backup_config_file,
+                get_saved_config_files: get_saved_config_files,
+                delete_config_file:delete_config_file,
+                download_config_file:download_config_file,
+                get_webui:get_webui,
+                update_webui:update_webui,
+                get_webui_ssl:get_webui_ssl,
+                webui_ssl_import:webui_ssl_import,
+                webui_ssl_clear:webui_ssl_clear,
+                get_xmlrpc:get_xmlrpc,
+                update_xmlrpc:update_xmlrpc,
+                get_restapi:get_restapi,
+                update_restapi:update_restapi,
+                get_ssh:get_ssh,
+                update_ssh:update_ssh,
+                regenerate_ssh_key: regenerate_ssh_key,
+                get_access_enable:get_access_enable,
+                update_access_enable:update_access_enable,
+                get_access_config:get_access_config,
+                update_access_config:update_access_config,
+                reset_access_config:reset_access_config,
+                get_va_info: get_va_info,
+                get_sys_resource: get_sys_resource,
+                get_sys_resource_occupation_topN: get_sys_resource_occupation_topN,
+                get_port_resource: get_port_resource,
+                get_ssl_resource: get_ssl_resource,
+                get_sys_version: get_sys_version,
+                get_sys_license_info: get_sys_license_info,
+                get_sys_central_license_info: get_sys_central_license_info,
+                get_sys_pool_license_info: get_sys_pool_license_info,
+                get_sys_apv_demo_license_info: get_sys_apv_demo_license_info,
+                get_sys_pool_license_assignment: get_sys_pool_license_assignment,
+                get_sys_central_license_assignment: get_sys_central_license_assignment,
+                assign_sys_pool_license_resource: assign_sys_pool_license_resource,
+                unassign_sys_pool_license_resource: unassign_sys_pool_license_resource,
+                get_per_va_sys_pool_license_assignment: get_per_va_sys_pool_license_assignment,
+                update_per_va_sys_pool_license_assignment: update_per_va_sys_pool_license_assignment,
+                update_avx_license: update_avx_license,
+                update_va_license: update_va_license,
+                update_apv_license: update_apv_license,
+                update_avx_pool_license: update_avx_pool_license,
+                generate_avx_license_request_file: generate_avx_license_request_file,
+                generate_va_individual_license_request_file: generate_va_individual_license_request_file,
+                generate_apv_central_license_request_file: generate_apv_central_license_request_file,
+                generate_avx_pool_license_request_file: generate_avx_pool_license_request_file,
+                get_license_status: get_license_status,
+                clear_configuration: clear_configuration,
+                unassignVapvLicense: unassignVapvLicense,
+                assignVapvLicense: assignVapvLicense,
+                backup_all_config_file: backup_all_config_file,
+                load_all_config_file: load_all_config_file,
+                load_all_config_local: load_all_config_local,
+                get_udisk_files: get_udisk_files,
+                get_udisk_name: get_udisk_name,
+                load_config_udisk: load_config_udisk,
+                backup_config_udisk: backup_config_udisk,
+                update_user_bind: update_user_bind,
+                get_user_bind_cert:get_user_bind_cert,
+                import_user_bind_cert:import_user_bind_cert,
+                get_netiag_license_info:get_netiag_license_info,
+                get_netgate_license_info:get_netgate_license_info,
+                update_netiag_license:update_netiag_license,
+                update_netgate_license:update_netgate_license,
+                generate_netiag_license_request_file:generate_netiag_license_request_file,
+                generate_netgate_license_request_file:generate_netgate_license_request_file,
+                get_netgate_sys_pool_license_assignment:get_netgate_sys_pool_license_assignment,
+                get_per_va_netiag_pool_license_assignment:get_per_va_netiag_pool_license_assignment,
+                get_per_va_netgate_pool_license_assignment:get_per_va_netgate_pool_license_assignment,
+                get_aaa_data: get_aaa_data,
+                change_aaa_status: change_aaa_status,
+                update_aaa_data: update_aaa_data,
+                clear_aaa_data: clear_aaa_data,
+                delete_aaa_data: delete_aaa_data,
+                clean_all_ntp: clean_all_ntp,
+                add_ntp_key: add_ntp_key,
+                delete_ntp_key: delete_ntp_key,
+                get_ntp_key: get_ntp_key,
+            };
+            function get_udisk_files() {
+                return apiService.get('/api/avx/system/config_mgmt/UdiskFileConfig/_get_list_data');
+            }
+            function get_udisk_name() {
+                return apiService.get('/api/avx/system/config_mgmt/UdiskConfig/_get_list_data');
+            }
+            function get_host() {
+                return apiService.get('/api/avx/system/HostSettings/_fields');
+            }
+            function update_host(host) {
+                var url = '/api/avx/system/HostSettings/_update'
+                var post_data = {"post_data": JSON.stringify({"hostname":host})};
+                return apiService.post(url, post_data);
+            }
+            function reset_host() {
+                return apiService.post('/api/avx/system/HostSettings/_perform?action=Reset&options=%7B%22__pk_list%22%3A%5B%22%22%5D%7D');
+            }
+            function get_time() {
+                return apiService.get('/api/avx/system/TimeSettings/_fields');
+            }
+            function update_time(time, timezone) {
+                var url = '/api/avx/system/TimeSettings/_update';
+                var post_data = {"post_data": JSON.stringify({"system_time":time, "system_timezone":timezone})};
+                return apiService.post(url, post_data);
+            }
+            function clear_timezone() {
+                var url = '/api/avx/system/TimeSettings/_perform?action=Clear_timezone';
+                var post_data = {"action":"Clear_timezone","options": JSON.stringify({"__pk_list":[]})}
+                return apiService.post(url, post_data);
+            }
+            function get_ntp() {
+                return apiService.get('/api/avx/system/NTPSettings/_fields?fields=[%22enable_ntp%22,%20%22ntp_server%22,%20%22ntp_stats%22,%20%22ntp_key%22]');
+            }
+            function update_ntp(onoff) {
+                var url = '/api/avx/system/NTPSettings/_update';
+                var post_data = {"post_data": JSON.stringify({"enable_ntp":onoff})};
+                return apiService.post(url, post_data);
+            }
+            function add_ntp_server(data) {
+                var url = '/api/avx/system/NTPServer/_add';
+                var post_data = {"post_data": JSON.stringify({"ip":data["ip"], "options":data["options"], "key_id":data["key_id"]})};
+                return apiService.post(url, post_data);
+            }
+            function delete_ntp_server(data) {
+                var url = '/api/avx/system/NTPServer/_delete';
+                var post_data = {"pk": JSON.stringify({"ip":data["ip"]})};
+                return apiService.post(url, post_data);
+            }
+            function get_user() {
+                return apiService.get('/api/avx/system/user_mgmt/Administrator/_get_list_data?key=' + JSON.stringify(['username', 'level', 'passwords']) + '&no_rest=' + JSON.stringify(true));
+            }
+            function add_user(data) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_add';
+                var post_data = {"post_data": JSON.stringify({"username":data["username"], "passwords":data["passwords"], "level":data["level"]})};
+                return apiService.post(url, post_data);
+            }
+            function update_user(data) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_update/username/%22'+data["username"]+'%22';
+                var post_data = {"post_data": JSON.stringify({"username":data["username"], "passwords":data["passwords"], "level":data["level"]})};
+                return apiService.post(url, post_data);
+            }
+            function update_user_ssh(user, data) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_update/username/%22'+user+'%22';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function delete_user(data) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_delete';
+                var post_data = {"pk": JSON.stringify({"username":data["username"]})};
+                return apiService.post(url, post_data);
+            }
+            function get_user_ssh_key(name) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_field_group/username/"'+ name +'"?field_group=ssh';
+                return apiService.get(url);
+            }
+            function get_user_ssh_pwd(name) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_field_group/username/"'+ name +'"?field_group=enable';
+                return apiService.get(url);
+            }
+            function delete_user_ssh(name) {
+                var url = '/api/avx/system/user_mgmt/SSHKey/_delete';
+                var post_data = {"pk": JSON.stringify({"user":[{"_asso_idx":0,"username":name}]})};
+                return apiService.post(url, post_data);
+            }
+            function import_user_ssh_key(name, options) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_perform?action=ImportKey';
+                options["__pk_list"] = [JSON.stringify({"username":name})];
+                var post_data = {"action":"ImportKey","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function system_update(data) {
+                var url = '/api/avx/system/system_mgmt/SystemUpdate/_perform';
+                var post_data = {"action":"Update","options": JSON.stringify({"option":data["option"], "using":data["using"]})};
+                return apiService.post(url, post_data);
+            }
+            function system_shutdown(data) {
+                var url = '/api/avx/system/system_mgmt/SystemShutdownReboot/_perform';
+                var post_data = {"action":"Shutdown","options": JSON.stringify({"option":data["option"]})};
+                return apiService.post(url, post_data);
+            }
+            function system_reboot(data) {
+                var url = '/api/avx/system/system_mgmt/SystemShutdownReboot/_perform';
+                var post_data = {"action":"Reboot","options": JSON.stringify({})};
+                return apiService.post(url, post_data);
+            }
+            function get_email() {
+                return apiService.get('/api/avx/system/system_mgmt/EmailSettings/_fields');
+            }
+            function update_email(email) {
+                var url = '/api/avx/system/system_mgmt/EmailSettings/_update';
+                var post_data = {"post_data": JSON.stringify({"from_string":email})};
+                return apiService.post(url, post_data);
+            }
+            function get_alert_mail() {
+                return apiService.get('/api/avx/system/system_mgmt/AlertMail/_fields');
+            }
+            function update_alert_mail(data) {
+                var url = '/api/avx/system/system_mgmt/AlertMail/_update';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function get_external_mail_server() {
+                return apiService.get('/api/avx/system/system_mgmt/ExternalMailServer/_fields');
+            }
+            function update_external_mail_server(data) {
+                var url = '/api/avx/system/system_mgmt/ExternalMailServer/_update';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function update_external_mail_server_status(value) {
+                var url = '/api/avx/system/system_mgmt/ExternalMailServer/_perform?action=UpdateStatus';
+                var post_data = {
+                    "action": "UpdateStatus",
+                    "options": JSON.stringify({"__pk_list":[], "value": value})
+                };
+                return apiService.post(url, post_data);
+            }
+            function delete_external_mail_server() {
+                var url = '/api/avx/system/system_mgmt/ExternalMailServer/_perform?action=DeleteServer&options=%7B%22__pk_list%22%3A%5B%5D%7D';
+                return apiService.post(url, {});
+            }
+            function get_external_sender_mail() {
+                return apiService.get('/api/avx/system/system_mgmt/ExternalSenderMail/_fields');
+            }
+            function update_external_sender_mail(data) {
+                var url = '/api/avx/system/system_mgmt/ExternalSenderMail/_update';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function delete_external_sender_mail() {
+                var url = '/api/avx/system/system_mgmt/ExternalSenderMail/_perform?action=DeleteEmail&options=%7B%22__pk_list%22%3A%5B%5D%7D';
+                return apiService.post(url, {});
+            }
+            function get_relay_server_list() {
+                return apiService.get('/api/avx/system/system_mgmt/RelayServer/_get_list_data');
+            }
+            function add_relay_server(data) {
+                var url = '/api/avx/system/system_mgmt/RelayServer/_add';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function delete_relay_server(hostname) {
+                var url = '/api/avx/system/system_mgmt/RelayServer/_perform?action=DeleteHost';
+                var post_data = {
+                    "action": "DeleteHost",
+                    "options": JSON.stringify({"__pk_list":[], "hostname": hostname})
+                };
+                return apiService.post(url, post_data);
+            }
+            function clear_relay_server() {
+                var url = '/api/avx/system/system_mgmt/RelayServer/_perform?action=ClearServer&options=%7B%22__pk_list%22%3A%5B%5D%7D';
+                return apiService.post(url, {});
+            }
+            function get_relay_status() {
+                var url = '/api/avx/system/system_mgmt/RelayServer/_perform?action=GetStatus&options=%7B%22__pk_list%22%3A%5B%5D%7D';
+                return apiService.post(url, {});
+            }
+            function update_relay_status(value) {
+                var url = '/api/avx/system/system_mgmt/RelayServer/_perform';
+                var post_data = {
+                    "action": "UpdateStatus",
+                    "options": JSON.stringify({"__pk_list":[], "value": value})
+                };
+                return apiService.post(url, post_data);
+            }
+            function get_config_running() {
+                return apiService.get('/api/avx/system/config_mgmt/ViewConfig/_fields?fields=[%22running_config%22]');
+            }
+            function get_config_startup() {
+                return apiService.get('/api/avx/system/config_mgmt/ViewConfig/_fields?fields=[%22startup_config%22]');
+            }
+            function get_config_tech() {
+                return apiService.get('/api/avx/system/config_mgmt/ViewConfig/_fields?fields=[%22tech%22]');
+            }
+            function load_config() {
+                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
+                var post_data = {"action":"LoadStartupConfig","options": JSON.stringify({})};
+                return apiService.post(url, post_data);
+            }
+            function load_config_scp(data) {
+                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
+                //{"servername":"10.8.5.202","username":"tiankai","passwdscp":"click1","path":"/home/tiankai/x.x","file_passwdscp":"xx"}
+                var options={
+                    "servername":data["server_name"],
+                    "username":data["username"],
+                    "passwdscp":data["password"],
+                    "path":data["path"],
+                    "file_passwdscp":data["filePasswd"]
+                };
+                var post_data = {"action":"LoadConfigSCP","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function load_config_tftp(data) {
+                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
+                //{"server":"10.8.5.202","filename":"/home/tiankai/xxx","passwd":"sss"}
+                var options={
+                    "server":data["server_ip"],
+                    "filename":data["fileName"],
+                    "passwd":data["filePasswd"]
+                };
+                var post_data = {"action":"LoadConfigTFTP","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function get_saved_config_files() {
+                return apiService.get('/api/avx/system/config_mgmt/SavedFile/_get_list_data');
+            }
+            function load_config_file(data) {
+                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
+                var options={
+                    "filename":data.split(".")[0]
+                };
+                var post_data = {"action":"LoadConfigFile","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function load_all_config_file(file, password) {
+                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
+                var options={
+                    "file": file.split(".")[0],
+                    "password": password
+                };
+                var post_data = {"action":"LoadAllConfigFile","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function load_config_udisk(disk_name, file_name) {
+                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
+                var options={
+                    "disk_name": disk_name,
+                    "file_name": file_name
+                };
+                var post_data = {"action": "LoadConfigUdisk","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function load_config_local(data) {
+                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
+                var options={
+                    "local":data
+                };
+                var post_data = {"action":"LoadRunningConfigLocal","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function load_all_config_local(file, password) {
+                var url = '/api/avx/system/config_mgmt/LoadConfig/_perform';
+                var options = {
+                    "local": file,
+                    "password": password
+                };
+                var post_data = {"action":"LoadAllConfigLocal","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function backup_config() {
+                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
+                var post_data = {"action":"BackupStartupConfig","options": JSON.stringify({})};
+                return apiService.post(url, post_data);
+            }
+            function backup_config_scp(data) {
+                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
+                //{"server_name":"10.8.8.10","user_name":"tiankai","password":"click1","path":"/home/tiankai/1.tgz","file_password":"dd"}
+                var options={
+                    "server_name": data["server_name"],
+                    "user_name": data["user_name"],
+                    "password": data["password"],
+                    "path": data["path"],
+                    "file_password": data["passwd_file"]
+                };
+                var post_data = {"action":"BackupConfigSCP","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function backup_config_tftp(data) {
+                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
+                //{"ip":"1.1.1.1","file":"sss","file_password":"ss"}
+                var options={
+                    "ip":data["server_ip"],
+                    "file":data["file_name"],
+                    "file_password":data["passwd_file"]
+                };
+                var post_data = {"action":"BackupConfigTFTP","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function backup_config_file(data) {
+                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
+                var actionModel = "BackupConfigSavedFile";
+                var options = {
+                    "file": data["filename"]
+                };
+                if (data.type == "all") {
+                    options["password"] = data["password"];
+                    actionModel = "BackupAllConfigSavedFile";
+                }
+                var post_data = {"action": actionModel,"options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function backup_all_config_file(data) {
+                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
+                var options={
+                    "file": data["filename"],
+                    "password": data["password"]
+                };
+                var post_data = {"action":"BackupAllConfigSavedFile","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function backup_config_udisk(data) {
+                var url = '/api/avx/system/config_mgmt/BackupConfig/_perform';
+                var options={
+                    "disk_name": data["disk_name"],
+                    "file_name": data["file_name"]
+                };
+                var post_data = {"action": "BackupConfigUdisk","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function delete_config_file(data, file_type) {
+                var url = '/api/avx/system/config_mgmt/SavedFile/_delete';
+                var options = {
+                    "name": data,
+                    "file_type": file_type
+                };
+                var post_data = {"pk": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function download_config_file(name, type) {
+                var url = '/localfile/configfile/' + name;
+                return window.open(url);
+            }
+            function get_webui() {
+                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=webui_settings');
+            }
+            function update_webui(data) {
+                var url = '/api/avx/system/access_control/AccessControl/_update';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function get_webui_ssl() {
+                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=webui_ssl_cert');
+            }
+            function webui_ssl_import(data) {
+                var url = '/api/avx/system/access_control/AccessControl/_perform';
+                var action;
+                var options={"__pk_list":[""]};
+                if (data["type"] == "cert") {
+                    action = 'Import_Cert';
+                } else {
+                    action = 'Import_Interca';
+                }
+                if (data["import_way"] == "File") {
+                    options["using"] = {
+                        "local": {
+                            "cert": data["local"]
+                        }
+                    };
+                    // Add password parameters for local file import
+                    if (data["pfx_pass"] !== undefined) {
+                        options["using"]["local"]["pfx_pass"] = data["pfx_pass"];
+                    }
+                    if (data["passphrase"] !== undefined) {
+                        options["using"]["local"]["passphrase"] = data["passphrase"];
+                    }
+                } else if (data["import_way"] == "URL") {
+                    options["using"] = {
+                        "online": {
+                            "url": data["url"]
+                        }
+                    };
+                    // Add passphrase parameter for URL import
+                    if (data["passphrase"] !== undefined) {
+                        options["using"]["online"]["passphrase"] = data["passphrase"];
+                    }
+                } else if (data["import_way"] == "INPUT") {
+                    options["using"] = {
+                        "manual_input": {
+                            "cert_content": data["input"]
+                        }
+                    };
+                    // Add passphrase parameter for manual input
+                    if (data["passphrase"] !== undefined) {
+                        options["using"]["manual_input"]["passphrase"] = data["passphrase"];
+                    }
+                }
+
+                var post_data = {"action": action,"options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function webui_ssl_clear(data) {
+                var url = '/api/avx/system/access_control/AccessControl/_perform';
+                var action;
+                if (data["type"] == "cert") {
+                    action = 'Clear_Cert';
+                } else {
+                    action = 'Clear_Interca';
+                }
+                var options={"__pk_list":[""]};
+                var post_data = {"action": action,"options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function get_xmlrpc() {
+                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=xmlrpc_settings');
+            }
+            function update_xmlrpc(data) {
+                var url = '/api/avx/system/access_control/AccessControl/_update';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function get_restapi() {
+                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=restapi_settings');
+            }
+            function update_restapi(data) {
+                var url = '/api/avx/system/access_control/AccessControl/_update';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function get_ssh() {
+                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=ssh_settings');
+            }
+            function update_ssh(data) {
+                var url = '/api/avx/system/access_control/AccessControl/_update';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function regenerate_ssh_key() {
+                url = '/api/avx/system/access_control/AccessControl/_perform?action=Regenerate';
+                var post_data = {"action":"Regenerate","options": JSON.stringify({"__pk_list":[""]})};
+                return apiService.post(url, post_data);
+            }
+            function get_access_enable() {
+                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=enablemode_settings');
+            }
+            function update_access_enable(data) {
+                var url = '/api/avx/system/access_control/AccessControl/_update';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function get_access_config() {
+                return apiService.get('/api/avx/system/access_control/AccessControl/_field_group?field_group=configmode_settings');
+            }
+            function update_access_config(data) {
+                var url = '/api/avx/system/access_control/AccessControl/_update';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function reset_access_config() {
+                var url = '/api/avx/system/access_control/AccessControl/_perform?action=Reset';
+                var post_data = {"action":"Reset","options": JSON.stringify({"__pk_list":[""]})};
+                return apiService.post(url, post_data);
+            }
+            function get_va_info(key) {
+                key=key||null;
+                if (key) {
+                    url = '/api/avx/va/instance/VAInstance/_get_list_data?key='+JSON.stringify(key);
+                } else {
+                    url = '/api/avx/va/instance/VAInstance/_get_list_data'
+                }
+                return apiService.get(url);
+            }
+            function get_sys_resource() {
+                return apiService.get('/api/avx/system/system_mgmt/SystemResource/_fields');
+            }
+            function get_sys_resource_occupation_topN() {
+                return apiService.get('/sys_resource_occupation');
+            }
+            function get_port_resource(key) {
+                key=key||null;
+                if (key) {
+                    url = '/api/avx/network/interface/TrafficInterface/_get_list_data?key='+JSON.stringify(key);
+                } else {
+                    url = '/api/avx/network/interface/TrafficInterface/_get_list_data'
+                }
+                return apiService.get(url);
+            }
+            function get_ssl_resource(key) {
+                key=key||null;
+                if (key) {
+                    url = '/api/avx/network/interface/SSL/_get_list_data?key='+JSON.stringify(key);
+                } else {
+                    url = '/api/avx/network/interface/SSL/_get_list_data'
+                }
+                return apiService.get(url);
+            }
+            function get_sys_version() {
+                return apiService.get('/api/avx/system/SystemInfo/_field_group?field_group=status');
+            }
+            function get_sys_license_info() {
+                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=sys_license');
+            }
+            function get_sys_central_license_info() {
+                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=apv_license');
+            }
+            function get_sys_pool_license_info() {
+                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=ag_license');
+            }
+            function get_sys_apv_demo_license_info() {
+                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=apv_demo_license');
+            }
+            function get_sys_pool_license_assignment(key) {
+                key=key||null;
+                if (key) {
+                    url = '/api/avx/system/system_mgmt/VaLicense/_get_list_data?key='+JSON.stringify(key);
+                } else {
+                    url = '/api/avx/system/system_mgmt/VaLicense/_get_list_data'
+                }
+                return apiService.get(url);
+            }
+            function get_sys_central_license_assignment(key) {
+                key=key||null;
+                if (key) {
+                    url = '/api/avx/system/system_mgmt/APVLicense/_get_list_data?key='+JSON.stringify(key);
+                } else {
+                    url = '/api/avx/system/system_mgmt/APVLicense/_get_list_data'
+                }
+                return apiService.get(url);
+            }
+            function get_license_status(requestData) {
+                return apiService.post('/avx/get_license_status', requestData);
+            }
+            function assign_sys_pool_license_resource(va_name, licensed_vs, licensed_user,licensed_s2s) {
+                var post_data = {"post_data": JSON.stringify({"va":[{"va_name":va_name,"_asso_idx":0}],"vs":licensed_vs,"user":licensed_user,"s2s":licensed_s2s})};
+                return apiService.post('/api/avx/system/system_mgmt/VaLicense/_add', post_data);
+            }
+            function unassign_sys_pool_license_resource(va_name) {
+                var pk_list = [{"va": [{"_asso_idx": 0, "va_name": va_name}]}];
+                var post_data = {"pk": JSON.stringify(pk_list)};
+                return apiService.post('/api/avx/system/system_mgmt/VaLicense/_delete2', post_data);
+            }
+            function get_per_va_sys_pool_license_assignment(va_name) {
+                return apiService.get('/api/avx/system/system_mgmt/VaLicense/_get_asso_list_data?initial_filter=%7B"va"%3A%5B%7B"va_name"%3A"'+va_name+'"%2C"_asso_idx"%3A0%7D%5D%7D');
+            }
+            function update_per_va_sys_pool_license_assignment(va_name, licensed_vs, licensed_user, licensed_s2s) {
+                var url = '/api/avx/system/system_mgmt/VaLicense/_update/va/%5B%7B%22va_name%22%3A%20%22'+ va_name +'%22%2C%20%22_asso_idx%22%3A%200%7D%5D'
+                var post_data = {"post_data": JSON.stringify({"vs":licensed_vs, "user":licensed_user, "s2s":licensed_s2s})};
+                return apiService.post(url, post_data);
+            }
+            function update_avx_license(license_key) {
+                //license_key: 38f9d4a3-5844e59d-f75d561d-c949400b-e1af218c-20000000-0455d8ab-20161128-99999999
+                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
+                var post_data = {"post_data": JSON.stringify({"license_key":license_key})};
+                return apiService.post(url, post_data);
+            }
+            function update_va_license(current_va_name, license_key, type) {
+                var url = '/api/avx/va/instance/ImportVALicense/_perform';
+                var post_data = {"action":"Import","options": JSON.stringify({"va_name":current_va_name, "license": license_key, "type": type})};
+                return apiService.post(url, post_data);
+            }
+            function update_apv_license(apv_license_key) {
+                //license_key: 3c75b31a-93e04ad9-b28d4f7d-760d4502-7688b3db-30000000-0455d8ab-20170207-99999999
+                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
+                var post_data = {"post_data": JSON.stringify({"apv_license_key":apv_license_key})};
+                return apiService.post(url, post_data);
+            }
+            function update_avx_pool_license(ag_license_key) {
+                //ag_license_key: 3grBc315-NWCU8WCS-Cc00Z0Pm-NUA=#131-4d61c9ab-a9cf1625-6067eaa3-beef03a3-4d#7ebaa-accd7#dc-ba98765
+                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
+                var post_data = {"post_data": JSON.stringify({"ag_license_key":ag_license_key})};
+                return apiService.post(url, post_data);
+            }
+            function generate_avx_license_request_file(license_capacity) {
+                var url = '/lic_requset_file/generate'
+                var post_data = {"post_data": JSON.stringify({"license_capacity":license_capacity})};
+                return apiService.post(url, post_data);
+            }
+            function generate_va_individual_license_request_file(current_va_name, licensed_vs, licensed_user, licensed_s2s, licensed_vxag, va_size) {
+                var url = '/lic_requset_file/generate'
+                var post_data = {"post_data": JSON.stringify({"current_va_name":current_va_name, "licensed_vs":licensed_vs, "licensed_user": licensed_user, "licensed_s2s": licensed_s2s, "licensed_vxag": licensed_vxag, "va_size": va_size})};
+                return apiService.post(url, post_data);
+            }
+            function generate_apv_central_license_request_file(licensed_vapv) {
+                var url = '/lic_requset_file/generate'
+                var post_data = {"post_data": JSON.stringify({"licensed_vapv":licensed_vapv})};
+                return apiService.post(url, post_data);
+            }
+            function generate_avx_pool_license_request_file(licensed_vs, licensed_user, licensed_s2s, licensed_vxag) {
+                var url = '/lic_requset_file/generate'
+                var post_data = {"post_data": JSON.stringify({"licensed_vs":licensed_vs, "licensed_user": licensed_user, "licensed_s2s": licensed_s2s, "licensed_vxag": licensed_vxag})};
+                return apiService.post(url, post_data);
+            }
+            function clear_configuration(requestData) {
+                return apiService.post('/api/avx/system/config_mgmt/ClearConfiguration/_perform?action=Clear', requestData);
+            }
+            function unassignVapvLicense(requestData) {
+                return apiService.post('/api/avx/system/system_mgmt/VaLicenseAssign/_perform?action=Unassign', requestData);
+            }
+            function assignVapvLicense(requestData) {
+                return apiService.post('/api/avx/system/system_mgmt/VaLicenseAssign/_perform?action=Assign', requestData);
+            }
+            function update_user_bind(user, data) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_update/username/%22'+user+'%22';
+                var post_data = {"post_data": JSON.stringify(data)};
+                return apiService.post(url, post_data);
+            }
+            function get_user_bind_cert(name) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_field_group/username/"'+ name +'"?field_group=twofactor';
+                return apiService.get(url);
+            }
+            function import_user_bind_cert(name, options) {
+                var url = '/api/avx/system/user_mgmt/Administrator/_perform?action=ImportCert';
+                options["__pk_list"] = [JSON.stringify({"username":name})];
+                var post_data = {"action":"ImportCert","options": JSON.stringify(options)};
+                return apiService.post(url, post_data);
+            }
+            function get_netiag_license_info() {
+                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=netiag_license');
+            }
+            function get_netgate_license_info() {
+                return apiService.get('/api/avx/system/system_mgmt/SystemLicense/_field_group?field_group=netgate_license');
+            }
+            function update_netiag_license(netiag_license_key) {
+                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
+                var post_data = {"post_data": JSON.stringify({"netiag_license_key":netiag_license_key})};
+                return apiService.post(url, post_data);
+            }
+            function update_netgate_license(netgate_license_key) {
+                var url = '/api/avx/system/system_mgmt/SystemLicense/_update'
+                var post_data = {"post_data": JSON.stringify({"netgate_license_key":netgate_license_key})};
+                return apiService.post(url, post_data);
+            }
+            function generate_netiag_license_request_file(licensed_vs, licensed_user, licensed_s2s, licensed_vnetiag) {
+                var url = '/lic_requset_file/generate'
+                var post_data = {"post_data": JSON.stringify({"licensed_vs":licensed_vs, "licensed_user": licensed_user, "licensed_s2s": licensed_s2s, "licensed_vnetiag": licensed_vnetiag})};
+                return apiService.post(url, post_data);
+            }
+            function generate_netgate_license_request_file(licensed_vs, licensed_user, licensed_s2s, licensed_vnetgate) {
+                var url = '/lic_requset_file/generate'
+                var post_data = {"post_data": JSON.stringify({"licensed_vs":licensed_vs, "licensed_user": licensed_user, "licensed_s2s": licensed_s2s, "licensed_vnetgate": licensed_vnetgate})};
+                return apiService.post(url, post_data);
+            }
+            function get_netgate_sys_pool_license_assignment(key) {
+                key=key||null;
+                if (key) {
+                    url = '/api/avx/system/system_mgmt/NetgateVaLicense/_get_list_data?key='+JSON.stringify(key);
+                } else {
+                    url = '/api/avx/system/system_mgmt/NetgateVaLicense/_get_list_data'
+                }
+                return apiService.get(url);
+            }
+            function get_per_va_netiag_pool_license_assignment(va_name) {
+                return apiService.get('/api/avx/system/system_mgmt/NetiagVaLicense/_get_asso_list_data?initial_filter=%7B"va"%3A%5B%7B"va_name"%3A"'+va_name+'"%2C"_asso_idx"%3A0%7D%5D%7D');
+            }
+            function get_per_va_netgate_pool_license_assignment(va_name) {
+                return apiService.get('/api/avx/system/system_mgmt/NetgateVaLicense/_get_asso_list_data?initial_filter=%7B"va"%3A%5B%7B"va_name"%3A"'+va_name+'"%2C"_asso_idx"%3A0%7D%5D%7D');
+            }
+            function get_aaa_data() {
+                return apiService.get('/api/avx/system/user_mgmt/AAASettings/_get_list_data');
+            }
+            function change_aaa_status(status, csrf_token) {
+                var post_data = {
+                    "action":"Enable",
+                    "options": JSON.stringify({
+                        "enable": status? 1: 0
+                    }),
+                    "csrfmiddlewaretoken": csrf_token
+                };
+                var url = '/api/avx/system/user_mgmt/AAASettings/_perform';
+                return apiService.post(url, post_data);
+            }
+            function update_aaa_data(data, csrf_token) {
+                console.log(data, csrf_token);
+                var post_data = {
+                    "action":"Update",
+                    "options": JSON.stringify(data),
+                    "csrfmiddlewaretoken": csrf_token
+                };
+                var url = '/api/avx/system/user_mgmt/AAASettings/_perform';
+                return apiService.post(url, post_data);
+            }
+            function clear_aaa_data(csrf_token) {
+                var url = '/api/avx/system/user_mgmt/AAASettings/_perform';
+                var post_data = {
+                    "action":"Clear",
+                    "options": JSON.stringify([]),
+                    "csrfmiddlewaretoken": csrf_token
+                };
+                return apiService.post(url, post_data);
+            }
+            function delete_aaa_data(csrf_token) {
+                var url = '/api/avx/system/user_mgmt/AAASettings/_delete';
+                var post_data = {
+                    "pk": JSON.stringify({
+                        "server_name": "es01"
+                    }),
+                    "csrfmiddlewaretoken": csrf_token
+                };
+                return apiService.post(url, post_data);
+            }
+            function clean_all_ntp(csrf_token) {
+                var url = '/api/avx/system/NTPSettings/_perform?action=Clear_ntp';
+                var post_data = {
+                    "action": "Clear_ntp",
+                    "options": JSON.stringify([]),
+                    "csrfmiddlewaretoken": csrf_token
+                };
+                return apiService.post(url, post_data);
+            }
+            function add_ntp_key(data) {
+                var url = '/api/avx/system/NTPKey/_add';
+                var post_data = {"post_data": JSON.stringify({"key_id":data["key_id"], "auth_key":data["auth_key"]})};
+                return apiService.post(url, post_data);
+            }
+            function delete_ntp_key(data) {
+                var url = '/api/avx/system/NTPKey/_delete';
+                var post_data = {"pk": JSON.stringify({"key_id":data["key_id"]})};
+                return apiService.post(url, post_data);
+            }
+            function get_ntp_key() {
+                return apiService.get('/api/avx/system/NTPSettings/_fields?fields=[%22ntp_key%22]');
+            }
+        }
 ]);
\ No newline at end of file
