31 from clm.models.key
import Key
32 from clm.utils.decorators
import user_log
33 from clm.utils.exception
import CLMException
46 def get(cm_id, caller_id, name):
48 k = Key.objects.filter(user_id__exact=caller_id).filter(name__exact=name)[0]
50 raise CLMException(
'ssh_key_get')
64 return [k.dict
for k
in Key.objects.filter(user_id__exact=caller_id)]
83 from clm.settings
import SSH_KEYS_LIMIT
84 keys_limit = SSH_KEYS_LIMIT
87 if keys_limit
and len(Key.objects.filter(user_id__exact=caller_id)) > keys_limit:
88 raise CLMException(
'ssh_key_limit')
89 if Key.objects.filter(user_id__exact=caller_id).filter(name__exact=name).exists():
90 raise CLMException(
'ssh_key_already_exist')
91 if subprocess.call([
'ssh-keygen',
'-q',
'-f',
'/tmp/' + str(caller_id) +
'_' + name,
'-N',
'']) != 0:
92 raise CLMException(
'ssh_key_generate')
93 f_prv = open(
'/tmp/' + str(caller_id) +
'_' + name,
'r')
94 f_pub = open('/tmp/' + str(caller_id) +
'_' + name +
'.pub',
'r')
99 s = hashlib.md5(base64.b64decode(k.data.split()[1])).hexdigest()
100 k.fingerprint = ':'.join([s[i:i + 2]
for i
in xrange(0, 30, 2)])
104 raise CLMException(
'ssh_key_generate')
106 private = f_prv.read()
107 os.remove(
'/tmp/' + str(caller_id) +
'_' + name)
108 os.remove(
'/tmp/' + str(caller_id) +
'_' + name +
'.pub')
124 def add(cm_id, caller_id, key, name):
127 from clm.settings
import SSH_KEYS_LIMIT
128 keys_limit = SSH_KEYS_LIMIT
131 if keys_limit
and len(Key.objects.filter(user_id__exact=caller_id)) > keys_limit:
132 raise CLMException(
'ssh_key_limit')
134 k.user_id = caller_id
137 r = re.search(
'ssh-rsa (.*) (.*)', key)
139 raise CLMException(
'ssh_key_format')
140 s = hashlib.md5(base64.b64decode(r.groups()[0])).hexdigest()
141 k.fingerprint =
':'.join([s[i:i + 2]
for i
in xrange(0, 30, 2)])
145 raise CLMException(
'ssh_key_add')
159 Key.objects.filter(user_id__exact=caller_id).filter(name__exact=name).
delete()
161 raise CLMException(
'ssh_key_delete')
178 for key_id
in key_ids:
180 Key.objects.filter(user_id__exact=caller_id).filter(id__exact=key_id).
delete()
181 results.append({
'status':
'ok',
'data':
''})
183 results.append({
'status':
'ssh_key_delete',
'data':
''})