Commit 38bbc273 by taufikyu

penambahan menu api_key di user

1 parent c36d5361
...@@ -395,9 +395,9 @@ class CSVRenderer(object): ...@@ -395,9 +395,9 @@ class CSVRenderer(object):
# File # # File #
######## ########
# http://stackoverflow.com/questions/2257441/random-string-generation-with-upper-case-letters-and-digits-in-python # http://stackoverflow.com/questions/2257441/random-string-generation-with-upper-case-letters-and-digits-in-python
def get_random_string(): def get_random_string(width=6):
return ''.join(random.choice(ascii_uppercase + ascii_lowercase + digits) \ return ''.join(random.choice(ascii_uppercase + ascii_lowercase + digits) \
for _ in range(6)) for _ in range(width))
def get_ext(filename): def get_ext(filename):
return os.path.splitext(filename)[-1] return os.path.splitext(filename)[-1]
......
...@@ -52,6 +52,17 @@ ...@@ -52,6 +52,17 @@
${error}</p> ${error}</p>
</div> </div>
</div> </div>
<div class="form-group" tal:define="field form['is_api_key']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></label>
<div class="col-md-9">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<!--Status --> <!--Status -->
<div class="form-group" tal:define="field form['status']" id="item-${field.oid}"> <div class="form-group" tal:define="field form['status']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}"> <label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
......
...@@ -52,6 +52,17 @@ ...@@ -52,6 +52,17 @@
${error}</p> ${error}</p>
</div> </div>
</div> </div>
<div class="form-group" tal:define="field form['is_api_key']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
${field.title}<span id="error-${field.oid}" class="text text-danger"
tal:condition="field.required">&nbsp*</span></label>
<div class="col-md-9">
${structure:field.serialize()}
<p id="error-${field.oid}" class="help-block" tal:condition="field.error"
tal:repeat="error field.error.messages()">
${error}</p>
</div>
</div>
<!--Status --> <!--Status -->
<div class="form-group" tal:define="field form['status']" id="item-${field.oid}"> <div class="form-group" tal:define="field form['status']" id="item-${field.oid}">
<label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}"> <label for="${field.oid}" class="control-label col-md-3" id="req-${field.oid}">
......
...@@ -26,7 +26,7 @@ from ..models.isipkd import( ...@@ -26,7 +26,7 @@ from ..models.isipkd import(
from datatables import ( from datatables import (
ColumnDT, DataTables) ColumnDT, DataTables)
from esipkd.tools import DefaultTimeZone, _DTstrftime, _DTnumberformat, _DTactive from esipkd.tools import DefaultTimeZone, _DTstrftime, _DTnumberformat, _DTactive, get_random_string
SESS_ADD_FAILED = 'user add failed' SESS_ADD_FAILED = 'user add failed'
SESS_EDIT_FAILED = 'user edit failed' SESS_EDIT_FAILED = 'user edit failed'
...@@ -86,6 +86,11 @@ def deferred_status(node, kw): ...@@ -86,6 +86,11 @@ def deferred_status(node, kw):
values = kw.get('daftar_status', []) values = kw.get('daftar_status', [])
return widget.SelectWidget(values=values) return widget.SelectWidget(values=values)
@colander.deferred
def api_key_widget(node, kw):
values = kw.get('api_key_list', [])
return widget.SelectWidget(values=values)
STATUS = ( STATUS = (
(1, 'Aktif'), (1, 'Aktif'),
(0, 'Inaktif'), (0, 'Inaktif'),
...@@ -102,6 +107,9 @@ class AddSchema(colander.Schema): ...@@ -102,6 +107,9 @@ class AddSchema(colander.Schema):
status = colander.SchemaNode( status = colander.SchemaNode(
colander.String(), colander.String(),
widget=deferred_status) widget=deferred_status)
is_api_key = colander.SchemaNode(
colander.String(), widget=api_key_widget, title='API Key',
missing=colander.drop)
password = colander.SchemaNode( password = colander.SchemaNode(
colander.String(), colander.String(),
widget=widget.PasswordWidget(), widget=widget.PasswordWidget(),
...@@ -112,9 +120,17 @@ class EditSchema(AddSchema): ...@@ -112,9 +120,17 @@ class EditSchema(AddSchema):
missing=colander.drop, missing=colander.drop,
widget=widget.HiddenWidget(readonly=True)) widget=widget.HiddenWidget(readonly=True))
def get_form(request, class_form): def get_form(request, class_form, user=None):
schema = class_form(validator=form_validator) schema = class_form(validator=form_validator)
schema = schema.bind(daftar_status=STATUS) if user and user.api_key:
api_key_list = (
('', user.api_key),
('0', 'Hapus'))
else:
api_key_list = (
('', 'Tidak ada'),
('1', 'Buatkan'))
schema = schema.bind(daftar_status=STATUS,api_key_list=api_key_list)
schema.request = request schema.request = request
return Form(schema, buttons=('save','cancel')) return Form(schema, buttons=('save','cancel'))
...@@ -122,6 +138,11 @@ def save(values, user, row=None): ...@@ -122,6 +138,11 @@ def save(values, user, row=None):
if not row: if not row:
row = User() row = User()
row.from_dict(values) row.from_dict(values)
is_api_key = values.get('is_api_key')
if is_api_key == '0':
row.api_key = None
elif is_api_key == '1':
row.api_key = get_random_string(64)
if values['password']: if values['password']:
row.password = values['password'] row.password = values['password']
DBSession.add(row) DBSession.add(row)
...@@ -179,7 +200,7 @@ def view_edit(request): ...@@ -179,7 +200,7 @@ def view_edit(request):
row = query_id(request).first() row = query_id(request).first()
if not row: if not row:
return id_not_found(request) return id_not_found(request)
form = get_form(request, EditSchema) form = get_form(request, EditSchema, user=row)
if request.POST: if request.POST:
if 'save' in request.POST: if 'save' in request.POST:
controls = request.POST.items() controls = request.POST.items()
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!