Base net-virt CLI files on top of which ONOS specific changes will be done
diff --git a/cli/sdncon/clusterAdmin/views.py b/cli/sdncon/clusterAdmin/views.py
new file mode 100755
index 0000000..851a79d
--- /dev/null
+++ b/cli/sdncon/clusterAdmin/views.py
@@ -0,0 +1,125 @@
+#
+# Copyright (c) 2013 Big Switch Networks, Inc.
+#
+# Licensed under the Eclipse Public License, Version 1.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# permissions and limitations under the License.
+#
+
+# Create your views here.
+
+from django.contrib.auth.decorators import login_required
+from django.utils import simplejson
+from django.http import HttpResponse
+from sdncon.clusterAdmin.models import CustomerUser
+from sdncon.clusterAdmin.utils import conditionally, isCloudBuild
+from sdncon.rest.views import safe_rest_view
+
+DEFAULT_TENANT = 'default'
+JSON_DATA_TYPE = 'application/json'
+
+@safe_rest_view
+def get_node_personality(request):
+ isCloud = isCloudBuild()
+ response_data = {'cloud' : isCloud, 'controller-node' : not isCloud}
+ response_data = simplejson.dumps(response_data)
+ return HttpResponse(response_data, JSON_DATA_TYPE)
+
+@conditionally(login_required, isCloudBuild())
+@safe_rest_view
+def session_clusterAdmin(request):
+ """
+ This returns the customer and clusters, which the current session is associated with.
+ """
+ customer = {}
+ customer['user'] = request.user.username
+ customer['customer'] = DEFAULT_TENANT
+ customer['cluster'] = []
+ if request.user.is_authenticated():
+ cus = CustomerUser.objects.all()
+ for cu in cus:
+ if cu.user.username == request.user.username:
+ customer['customer'] = cu.customer.customername
+ for cluster in cu.customer.cluster_set.all():
+ customer['cluster'].append(cluster.clustername)
+
+ response_data = simplejson.dumps(customer)
+ return HttpResponse(response_data, JSON_DATA_TYPE)
+
+
+import random
+from django.shortcuts import render_to_response, redirect
+from .models import AuthToken
+
+@conditionally(login_required, isCloudBuild())
+def token_view(request):
+ token=''
+ for t in AuthToken.objects.filter(user=request.user):
+ token=t.id
+ return render_to_response('registration/token_view.html', {'token': token})
+
+################################################################
+
+VALID_TOKEN_CHARS = ['3', '4', '6', '7', '9', 'A', 'C', 'E', 'F', 'G',
+ 'H', 'K', 'M', 'N', 'P', 'R', 'T', 'W', 'X', 'Y']
+TOKEN_LENGTH = 16
+TOKEN_GEN_ATTEMPTS = 16 # Number of times generated token can be in DB before giving up
+
+#
+# Token Specification
+# 16 characters, hyphens every 4 characters
+# ....-....-....-....
+# Key is actually this string, including the -s
+# Characters used must be in the VALID_TOKEN_CHARS array above
+# This gives a token space of 20^16
+#
+
+@conditionally(login_required, isCloudBuild())
+def token_generate(request):
+ """
+ Generate, validate and add an auth token
+ """
+
+ for try_count in range(TOKEN_GEN_ATTEMPTS):
+ token_string = ""
+ for i in range(TOKEN_LENGTH):
+ if i > 0 and i % 4 == 0:
+ token_string += '-'
+ token_string += random.choice(VALID_TOKEN_CHARS)
+ print "Generated token " + token_string
+
+ # See if the token already exists in the DB; race condition here, but should be minimal
+ try:
+ AuthToken.objects.get(id=token_string)
+ print "Token already present in DB, try " + str(try_count)
+ token_string = ""
+ except AuthToken.DoesNotExist: # This is what we want
+ break
+
+ if not token_string:
+ # Should probably raise an exception here
+ print "Failed to generate new auth token"
+ # Return internal server error
+ return
+
+ # Map the token to a customer or cluster
+ # For now, just map one token to the user
+
+ # Delete any existing tokens
+ for t in AuthToken.objects.filter(user=request.user):
+ print 'Deleting token', t
+ t.delete()
+
+ # Add the new token to the DB
+ token = AuthToken(id=token_string, user=request.user)
+ token.save()
+
+ return redirect('sdncon.clusterAdmin.views.token_view')