Finish moving
diff --git a/xos/core/xoslib/methods/openvpnview.py b/xos/core/xoslib/methods/openvpnview.py
deleted file mode 100644
index d8cf39e..0000000
--- a/xos/core/xoslib/methods/openvpnview.py
+++ /dev/null
@@ -1,84 +0,0 @@
-import jinja2
-from core.models import TenantPrivilege
-from plus import PlusSerializerMixin
-from rest_framework import serializers
-from services.openvpn.models import OpenVPNService, OpenVPNTenant
-from xos.apibase import XOSListCreateAPIView
-
-if hasattr(serializers, "ReadOnlyField"):
-    # rest_framework 3.x
-    ReadOnlyField = serializers.ReadOnlyField
-else:
-    # rest_framework 2.x
-    ReadOnlyField = serializers.Field
-
-
-def get_default_openvpn_service():
-    openvpn_services = OpenVPNService.get_service_objects().all()
-    if openvpn_services:
-        return openvpn_services[0].id
-    return None
-
-
-class OpenVPNTenantSerializer(serializers.ModelSerializer, PlusSerializerMixin):
-    """A Serializer for the OpenVPNTenant that has the minimum information required for clients.
-
-    Attributes:
-        id (ReadOnlyField): The ID of OpenVPNTenant.
-        server_network (ReadOnlyField): The network of the VPN.
-        vpn_subnet (ReadOnlyField): The subnet of the VPN.
-        script_text (SerializerMethodField): The text of the script for the client to use to
-            connect.
-    """
-    id = ReadOnlyField()
-    server_network = ReadOnlyField()
-    vpn_subnet = ReadOnlyField()
-    script_text = serializers.SerializerMethodField()
-
-    class Meta:
-        model = OpenVPNTenant
-        fields = ('id', 'service_specific_attribute', 'vpn_subnet',
-                  'server_network', 'script_text')
-
-    def get_script_text(self, obj):
-        """Gets the text of the client script for the requesting user.
-
-        Parameters:
-            obj (services.openvpn.models.OpenVPNTenant): The OpenVPNTenant to connect to.
-
-        Returns:
-            str: The client script as a str.
-        """
-        env = jinja2.Environment(
-            loader=jinja2.FileSystemLoader("/opt/xos/services/openvpn/templates"))
-        template = env.get_template("connect.vpn.j2")
-        client_name = self.context['request'].user.email + "-" + str(obj.id)
-        remote_ids = list(obj.failover_server_ids)
-        remote_ids.insert(0, obj.id)
-        remotes = OpenVPNTenant.get_tenant_objects().filter(pk__in=remote_ids)
-        pki_dir = OpenVPNService.get_pki_dir(obj)
-        fields = {"client_name": client_name,
-                  "remotes": remotes,
-                  "is_persistent": obj.is_persistent,
-                  "ca_crt": obj.get_ca_crt(pki_dir),
-                  "client_crt": obj.get_client_cert(client_name, pki_dir),
-                  "client_key": obj.get_client_key(client_name, pki_dir)
-                 }
-        return template.render(fields)
-
-
-class OpenVPNTenantList(XOSListCreateAPIView):
-    """Class that provides a list of OpenVPNTenants that the user has permission to access."""
-    serializer_class = OpenVPNTenantSerializer
-    method_kind = "list"
-    method_name = "openvpntenant"
-
-    def get_queryset(self):
-        # Get every privilege for this user
-        tenants_privs = TenantPrivilege.objects.all().filter(
-            user=self.request.user)
-        vpn_tenants = []
-        for priv in tenants_privs:
-            vpn_tenants.append(
-                OpenVPNTenant.get_tenant_objects().filter(pk=priv.tenant.pk)[0])
-        return vpn_tenants
diff --git a/xos/core/xoslib/static/js/xosOpenVPNDashboard.js b/xos/core/xoslib/static/js/xosOpenVPNDashboard.js
index 8723888..b28322f 100644
--- a/xos/core/xoslib/static/js/xosOpenVPNDashboard.js
+++ b/xos/core/xoslib/static/js/xosOpenVPNDashboard.js
@@ -1 +1 @@
-"use strict";angular.module("xos.openVPNDashboard",["ngResource","ngCookies","ngLodash","ui.router","xos.helpers"]).config(["$stateProvider",function(n){n.state("openVPNList",{url:"/",template:"<vpn-list></vpn-list>"})}]).config(["$compileProvider",function(n){n.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|file|blob):/)}]).service("Vpn",["$http","$q",function(n,e){this.getOpenVpnTenants=function(){var t=e.defer();return n.get("/xoslib/openvpntenant/").then(function(n){t.resolve(n.data)})["catch"](function(n){t.reject(n)}),t.promise}}]).config(["$httpProvider",function(n){n.interceptors.push("NoHyperlinks")}]).directive("vpnList",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/openvpn-list.tpl.html",controller:["Vpn",function(n){var e=this;n.getOpenVpnTenants().then(function(n){e.vpns=n;for(var t=0;t<e.vpns.length;t++){var i=new Blob([e.vpns[t].script_text],{type:"text/plain"});e.vpns[t].script_text=(window.URL||window.webkitURL).createObjectURL(i)}})["catch"](function(n){throw new Error(n)})}]}}),angular.module("xos.openVPNDashboard").run(["$templateCache",function(n){n.put("templates/openvpn-list.tpl.html",'<div style="display: table;">\n  <div class="vpn-row">\n    <h1 class="vpn-cell">VPN List</h1>\n  </div>\n  <div class="vpn-row">\n    <div class="vpn-cell vpn-header">ID</div>\n    <div class="vpn-cell vpn-header">VPN Network</div>\n    <div class="vpn-cell vpn-header">VPN Subnet</div>\n    <div class="vpn-cell vpn-header">Script Link</div>\n  </div>\n  <div class="vpn-row" ng-repeat="vpn in vm.vpns">\n    <div class="vpn-cell">{{ vpn.id }}</div>\n    <div class="vpn-cell">{{ vpn.server_network }}</div>\n    <div class="vpn-cell">{{ vpn.vpn_subnet }}</div>\n    <div class="vpn-cell">\n      <a download="connect-{{ vpn.id }}.vpn" ng-href="{{ vpn.script_text }}">Script</a>\n    </div>\n  </div>\n</div>\n')}]),angular.module("xos.openVPNDashboard").run(["$location",function(n){n.path("/")}]),angular.bootstrap(angular.element("#xosOpenVPNDashboard"),["xos.openVPNDashboard"]);
\ No newline at end of file
+"use strict";angular.module("xos.openVPNDashboard",["ngResource","ngCookies","ngLodash","ui.router","xos.helpers"]).config(["$stateProvider",function(n){n.state("openVPNList",{url:"/",template:"<vpn-list></vpn-list>"})}]).config(["$compileProvider",function(n){n.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|file|blob):/)}]).service("Vpn",["$http","$q",function(n,e){this.getOpenVpnTenants=function(){var t=e.defer();return n.get("/api/tenant/openvpn/list/").then(function(n){t.resolve(n.data)})["catch"](function(n){t.reject(n)}),t.promise}}]).config(["$httpProvider",function(n){n.interceptors.push("NoHyperlinks")}]).directive("vpnList",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/openvpn-list.tpl.html",controller:["Vpn",function(n){var e=this;n.getOpenVpnTenants().then(function(n){e.vpns=n;for(var t=0;t<e.vpns.length;t++){var i=new Blob([e.vpns[t].script_text],{type:"text/plain"});e.vpns[t].script_text=(window.URL||window.webkitURL).createObjectURL(i)}})["catch"](function(n){throw new Error(n)})}]}}),angular.module("xos.openVPNDashboard").run(["$templateCache",function(n){n.put("templates/openvpn-list.tpl.html",'<div style="display: table;">\n  <div class="vpn-row">\n    <h1 class="vpn-cell">VPN List</h1>\n  </div>\n  <div class="vpn-row">\n    <div class="vpn-cell vpn-header">ID</div>\n    <div class="vpn-cell vpn-header">VPN Network</div>\n    <div class="vpn-cell vpn-header">VPN Subnet</div>\n    <div class="vpn-cell vpn-header">Script Link</div>\n  </div>\n  <div class="vpn-row" ng-repeat="vpn in vm.vpns">\n    <div class="vpn-cell">{{ vpn.id }}</div>\n    <div class="vpn-cell">{{ vpn.server_network }}</div>\n    <div class="vpn-cell">{{ vpn.vpn_subnet }}</div>\n    <div class="vpn-cell">\n      <a download="connect-{{ vpn.id }}.vpn" ng-href="{{ vpn.script_text }}">Script</a>\n    </div>\n  </div>\n</div>\n')}]),angular.module("xos.openVPNDashboard").run(["$location",function(n){n.path("/")}]),angular.bootstrap(angular.element("#xosOpenVPNDashboard"),["xos.openVPNDashboard"]);
\ No newline at end of file