Skip to content

Commit

Permalink
Bug fix hostname (#216)
Browse files Browse the repository at this point in the history
* fix (jasset):   修复资产hostname过长和密码过长引起的bug

1. 修改password字段的长度,对称加密过后的字符串会变长,所有设置得比较大(256)
2. 添加check hostname 和 password的 长度校验

* fix (jumpserver/jasset):   修复setting时,秘密过长问题。

1. 修改password字段的长度,对称加密过后的字符串会变长,所有设置得比较大(256)
2. 后端修复views秘密超过30位不保存
3.前段使用js限制秘密长多不能超过30位

* fix (jumpserver/jasset):   setting and asset hostname password  too long.

1. 添加setting password字段长度验证
2. 添加资产主机名和密码长度验证

* fix (jumpserver/jasset):   setting and asset hostname password  too long.

1. 修正setting时的 输入密码的提示错误.
  • Loading branch information
yumaojun03 authored and ibuler committed Apr 28, 2016
1 parent 9e78fd3 commit bd69339
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 73 deletions.
2 changes: 1 addition & 1 deletion jasset/models.py
Expand Up @@ -67,7 +67,7 @@ class Asset(models.Model):
port = models.IntegerField(blank=True, null=True, verbose_name=u"端口号") port = models.IntegerField(blank=True, null=True, verbose_name=u"端口号")
group = models.ManyToManyField(AssetGroup, blank=True, verbose_name=u"所属主机组") group = models.ManyToManyField(AssetGroup, blank=True, verbose_name=u"所属主机组")
username = models.CharField(max_length=16, blank=True, null=True, verbose_name=u"管理用户名") username = models.CharField(max_length=16, blank=True, null=True, verbose_name=u"管理用户名")
password = models.CharField(max_length=64, blank=True, null=True, verbose_name=u"密码") password = models.CharField(max_length=256, blank=True, null=True, verbose_name=u"密码")
use_default_auth = models.BooleanField(default=True, verbose_name=u"使用默认管理账号") use_default_auth = models.BooleanField(default=True, verbose_name=u"使用默认管理账号")
idc = models.ForeignKey(IDC, blank=True, null=True, on_delete=models.SET_NULL, verbose_name=u'机房') idc = models.ForeignKey(IDC, blank=True, null=True, on_delete=models.SET_NULL, verbose_name=u'机房')
mac = models.CharField(max_length=20, blank=True, null=True, verbose_name=u"MAC地址") mac = models.CharField(max_length=20, blank=True, null=True, verbose_name=u"MAC地址")
Expand Down
63 changes: 35 additions & 28 deletions jasset/views.py
Expand Up @@ -135,13 +135,16 @@ def asset_add(request):
af_post = AssetForm(request.POST) af_post = AssetForm(request.POST)
ip = request.POST.get('ip', '') ip = request.POST.get('ip', '')
hostname = request.POST.get('hostname', '') hostname = request.POST.get('hostname', '')

is_active = True if request.POST.get('is_active') == '1' else False is_active = True if request.POST.get('is_active') == '1' else False
use_default_auth = request.POST.get('use_default_auth', '') use_default_auth = request.POST.get('use_default_auth', '')
try: try:
if Asset.objects.filter(hostname=unicode(hostname)): if Asset.objects.filter(hostname=unicode(hostname)):
error = u'该主机名 %s 已存在!' % hostname error = u'该主机名 %s 已存在!' % hostname
raise ServerError(error) raise ServerError(error)

if len(hostname) > 54:
error = u"主机名长度不能超过53位!"
raise ServerError(error)
except ServerError: except ServerError:
pass pass
else: else:
Expand Down Expand Up @@ -219,34 +222,38 @@ def asset_edit(request):
if asset_test and asset_id != unicode(asset_test.id): if asset_test and asset_id != unicode(asset_test.id):
emg = u'该主机名 %s 已存在!' % hostname emg = u'该主机名 %s 已存在!' % hostname
raise ServerError(emg) raise ServerError(emg)
except ServerError: if len(hostname) > 54:
pass emg = u'主机名长度不能超过54位!'
else: raise ServerError(emg)
if af_post.is_valid():
af_save = af_post.save(commit=False)
if use_default_auth:
af_save.username = ''
af_save.password = ''
# af_save.port = None
else:
if password:
password_encode = CRYPTOR.encrypt(password)
af_save.password = password_encode
else:
af_save.password = password_old
af_save.is_active = True if is_active else False
af_save.save()
af_post.save_m2m()
# asset_new = get_object(Asset, id=asset_id)
# asset_diff_one(asset_old, asset_new)
info = asset_diff(af_post.__dict__.get('initial'), request.POST)
db_asset_alert(asset, username, info)

smg = u'主机 %s 修改成功' % ip
else: else:
emg = u'主机 %s 修改失败' % ip if af_post.is_valid():
return my_render('jasset/error.html', locals(), request) af_save = af_post.save(commit=False)
return HttpResponseRedirect(reverse('asset_detail')+'?id=%s' % asset_id) if use_default_auth:
af_save.username = ''
af_save.password = ''
# af_save.port = None
else:
if password:
password_encode = CRYPTOR.encrypt(password)
af_save.password = password_encode
else:
af_save.password = password_old
af_save.is_active = True if is_active else False
af_save.save()
af_post.save_m2m()
# asset_new = get_object(Asset, id=asset_id)
# asset_diff_one(asset_old, asset_new)
info = asset_diff(af_post.__dict__.get('initial'), request.POST)
db_asset_alert(asset, username, info)

smg = u'主机 %s 修改成功' % ip
else:
emg = u'主机 %s 修改失败' % ip
raise ServerError(emg)
except ServerError as e:
error = e.message
return my_render('jasset/asset_edit.html', locals(), request)
return HttpResponseRedirect(reverse('asset_detail')+'?id=%s' % asset_id)


return my_render('jasset/asset_edit.html', locals(), request) return my_render('jasset/asset_edit.html', locals(), request)


Expand Down
2 changes: 1 addition & 1 deletion jumpserver/models.py
Expand Up @@ -7,7 +7,7 @@ class Setting(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
field1 = models.CharField(max_length=100, null=True, blank=True) field1 = models.CharField(max_length=100, null=True, blank=True)
field2 = models.CharField(max_length=100, null=True, blank=True) field2 = models.CharField(max_length=100, null=True, blank=True)
field3 = models.CharField(max_length=100, null=True, blank=True) field3 = models.CharField(max_length=256, null=True, blank=True)
field4 = models.CharField(max_length=100, null=True, blank=True) field4 = models.CharField(max_length=100, null=True, blank=True)
field5 = models.CharField(max_length=100, null=True, blank=True) field5 = models.CharField(max_length=100, null=True, blank=True)


Expand Down
71 changes: 38 additions & 33 deletions jumpserver/views.py
Expand Up @@ -220,41 +220,46 @@ def setting(request):
setting_default = get_object(Setting, name='default') setting_default = get_object(Setting, name='default')


if request.method == "POST": if request.method == "POST":
setting_raw = request.POST.get('setting', '') try:
if setting_raw == 'default': setting_raw = request.POST.get('setting', '')
username = request.POST.get('username', '') if setting_raw == 'default':
port = request.POST.get('port', '') username = request.POST.get('username', '')
password = request.POST.get('password', '') port = request.POST.get('port', '')
private_key = request.POST.get('key', '') password = request.POST.get('password', '')

private_key = request.POST.get('key', '')
if '' in [username, port]:
return HttpResponse('所填内容不能为空, 且密码和私钥填一个') if len(password) > 30:
else: raise ServerError(u'秘密长度不能超过30位!')
private_key_dir = os.path.join(BASE_DIR, 'keys', 'default')
private_key_path = os.path.join(private_key_dir, 'admin_user.pem') if '' in [username, port]:
mkdir(private_key_dir) return ServerError(u'所填内容不能为空, 且密码和私钥填一个')

if private_key:
with open(private_key_path, 'w') as f:
f.write(private_key)
os.chmod(private_key_path, 0600)

if setting_default:
if password:
password_encode = CRYPTOR.encrypt(password)
else:
password_encode = password
Setting.objects.filter(name='default').update(field1=username, field2=port,
field3=password_encode,
field4=private_key_path)

else: else:
password_encode = CRYPTOR.encrypt(password) private_key_dir = os.path.join(BASE_DIR, 'keys', 'default')
setting_r = Setting(name='default', field1=username, field2=port, private_key_path = os.path.join(private_key_dir, 'admin_user.pem')
field3=password_encode, mkdir(private_key_dir)
field4=private_key_path).save()
if private_key:
with open(private_key_path, 'w') as f:
f.write(private_key)
os.chmod(private_key_path, 0600)

if setting_default:
if password:
password_encode = CRYPTOR.encrypt(password)
else:
password_encode = password
Setting.objects.filter(name='default').update(field1=username, field2=port,
field3=password_encode,
field4=private_key_path)


msg = "设置成功" else:
password_encode = CRYPTOR.encrypt(password)
setting_r = Setting(name='default', field1=username, field2=port,
field3=password_encode,
field4=private_key_path).save()
msg = "设置成功"
except ServerError as e:
error = e.message
return my_render('setting.html', locals(), request) return my_render('setting.html', locals(), request)




Expand Down
4 changes: 2 additions & 2 deletions templates/jasset/asset_add.html
Expand Up @@ -164,7 +164,7 @@ <h5> 填写资产基本信息 </h5>
msg: {required: "必须填写!"} msg: {required: "必须填写!"}
}, },
"hostname": { "hostname": {
rule: "required", rule: "required;length[0~53]",
tip: "填写主机名", tip: "填写主机名",
ok: "", ok: "",
msg: {required: "必须填写!"} msg: {required: "必须填写!"}
Expand All @@ -182,7 +182,7 @@ <h5> 填写资产基本信息 </h5>
msg: {required: "必须填写!"} msg: {required: "必须填写!"}
}, },
"password": { "password": {
rule: "required(use_default_auth)", rule: "required(use_default_auth);length[0~64]",
tip: "输入密码", tip: "输入密码",
ok: "", ok: "",
msg: {required: "必须填写!"} msg: {required: "必须填写!"}
Expand Down
16 changes: 8 additions & 8 deletions templates/jasset/asset_edit.html
Expand Up @@ -206,7 +206,7 @@ <h5> 修改资产基本信息 </h5>
}, },
fields: { fields: {
"hostname": { "hostname": {
rule: "required", rule: "required;length[0~53]",
tip: "填写主机名", tip: "填写主机名",
ok: "", ok: "",
msg: {required: "必须填写!"} msg: {required: "必须填写!"}
Expand All @@ -218,17 +218,17 @@ <h5> 修改资产基本信息 </h5>
msg: {required: "必须填写!"} msg: {required: "必须填写!"}
}, },
"username": { "username": {
rule: "required(use_default_auth)", rule: "required(use_default_auth);",
tip: "输入用户名", tip: "输入用户名",
ok: "", ok: "",
msg: {required: "必须填写!"} msg: {required: "必须填写!"}
}, },
{# "password": {#} "password": {
{# rule: "required(use_default_auth)",#} rule: "length[0~64]",
{# tip: "输入密码",#} tip: "输入密码",
{# ok: "",#} ok: "",
{# msg: {required: "必须填写!"}#} empty: true
{# }#} }
}, },
valid: function(form) { valid: function(form) {
form.submit(); form.submit();
Expand Down
6 changes: 6 additions & 0 deletions templates/setting.html
Expand Up @@ -128,6 +128,12 @@ <h5> 项目设置 </h5>
tip: "输入端口号", tip: "输入端口号",
ok: "", ok: "",
msg: {required: "端口号必填"} msg: {required: "端口号必填"}
},
"password": {
rule: "length[0~30]",
tip: "输入密码",
ok: "",
empty: true
} }
{# "key": {#} {# "key": {#}
{# rule: "required(either)",#} {# rule: "required(either)",#}
Expand Down

0 comments on commit bd69339

Please sign in to comment.