make login duration based on the last active request

Closes-Bug: 1395420

Change-Id: Ib3963f2a4a5653f168e868afc79e8dc0ab40392c
This commit is contained in:
xiaodongwang 2014-11-22 21:09:48 -08:00 committed by Xiaodong Wang
parent 5fbc73b798
commit dc7272bdf0
5 changed files with 297 additions and 95 deletions

View File

@ -57,6 +57,20 @@ def log_user_action(func):
return decorated_api
def update_user_token(func):
@functools.wraps(func)
def decorated_api(*args, **kwargs):
response = func(*args, **kwargs)
expire_timestamp = (
datetime.datetime.now() + app.config['REMEMBER_COOKIE_DURATION']
)
user_api.record_user_token(
current_user, current_user.token, expire_timestamp
)
return response
return decorated_api
def _clean_data(data, keys):
for key in keys:
if key in data:
@ -212,15 +226,9 @@ def _login(use_cookie):
raise exception_handler.BadRequest(
'missing email or password in data'
)
if 'expire_timestamp' not in data:
expire_timestamp = (
datetime.datetime.now() + app.config['REMEMBER_COOKIE_DURATION']
)
else:
expire_timestamp = util.parse_datetime(
data['expire_timestamp'], exception_handler.BadRequest
)
expire_timestamp = (
datetime.datetime.now() + app.config['REMEMBER_COOKIE_DURATION']
)
data['expire_timestamp'] = expire_timestamp
user = auth_handler.authenticate_user(**data)
if not login_user(user, remember=data.get('remember', False)):
@ -260,6 +268,7 @@ def logout():
@app.route("/users", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_users():
"""list users."""
data = _get_request_args(
@ -274,6 +283,7 @@ def list_users():
@app.route("/users", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def add_user():
"""add user."""
data = _get_request_data()
@ -286,6 +296,7 @@ def add_user():
@app.route("/users/<int:user_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_user(user_id):
"""Get user."""
data = _get_request_args()
@ -297,6 +308,7 @@ def show_user(user_id):
@app.route("/current-user", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_current_user():
"""Get user."""
data = _get_request_args()
@ -308,6 +320,7 @@ def show_current_user():
@app.route("/users/<int:user_id>", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_user(user_id):
"""Update user."""
data = _get_request_data()
@ -324,6 +337,7 @@ def update_user(user_id):
@app.route("/users/<int:user_id>", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_user(user_id):
"""Delete user."""
data = _get_request_data()
@ -338,6 +352,7 @@ def delete_user(user_id):
@app.route("/users/<int:user_id>/permissions", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_user_permissions(user_id):
"""Get user permissions."""
data = _get_request_args()
@ -349,6 +364,7 @@ def list_user_permissions(user_id):
@app.route("/users/<int:user_id>/action", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def take_user_action(user_id):
"""Take user action."""
data = _get_request_data()
@ -394,6 +410,7 @@ def take_user_action(user_id):
)
@log_user_action
@login_required
@update_user_token
def show_user_permission(user_id, permission_id):
"""Get a specific user permission."""
data = _get_request_args()
@ -409,6 +426,7 @@ def show_user_permission(user_id, permission_id):
@app.route("/users/<int:user_id>/permissions", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def add_user_permission(user_id):
"""Add permission to a specific user."""
data = _get_request_data()
@ -427,6 +445,7 @@ def add_user_permission(user_id):
)
@log_user_action
@login_required
@update_user_token
def delete_user_permission(user_id, permission_id):
"""Delete a specific user permission."""
data = _get_request_data()
@ -442,6 +461,7 @@ def delete_user_permission(user_id, permission_id):
@app.route("/permissions", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_permissions():
"""List permissions."""
data = _get_request_args()
@ -454,6 +474,7 @@ def list_permissions():
@app.route("/permissions/<int:permission_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_permission(permission_id):
"""Get permission."""
data = _get_request_args()
@ -496,6 +517,7 @@ def _filter_timestamp(data):
@app.route("/users/logs", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_all_user_actions():
"""List all users actions."""
data = _get_request_args()
@ -511,6 +533,7 @@ def list_all_user_actions():
@app.route("/users/<int:user_id>/logs", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_user_actions(user_id):
"""List user actions."""
data = _get_request_args()
@ -526,6 +549,7 @@ def list_user_actions(user_id):
@app.route("/users/logs", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_all_user_actions():
"""Delete all user actions."""
data = _get_request_data()
@ -540,6 +564,7 @@ def delete_all_user_actions():
@app.route("/users/<int:user_id>/logs", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_user_actions(user_id):
"""Delete user actions."""
data = _get_request_data()
@ -593,6 +618,7 @@ def _filter_ip(data):
@app.route("/switches", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_switches():
"""List switches."""
data = _get_request_args()
@ -608,6 +634,7 @@ def list_switches():
@app.route("/switches/<int:switch_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_switch(switch_id):
"""Get switch."""
data = _get_request_args()
@ -619,6 +646,7 @@ def show_switch(switch_id):
@app.route("/switches", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def add_switch():
"""add switch."""
data = _get_request_data()
@ -631,6 +659,7 @@ def add_switch():
@app.route("/switches/<int:switch_id>", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_switch(switch_id):
"""update switch."""
data = _get_request_data()
@ -643,6 +672,7 @@ def update_switch(switch_id):
@app.route("/switches/<int:switch_id>", methods=['PATCH'])
@log_user_action
@login_required
@update_user_token
def patch_switch(switch_id):
"""patch switch."""
data = _get_request_data()
@ -655,6 +685,7 @@ def patch_switch(switch_id):
@app.route("/switches/<int:switch_id>", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_switch(switch_id):
"""delete switch."""
data = _get_request_data()
@ -667,6 +698,7 @@ def delete_switch(switch_id):
@app.route("/switch-filters", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_switch_filters():
"""List switch filters."""
data = _get_request_args()
@ -682,6 +714,7 @@ def list_switch_filters():
@app.route("/switch-filters/<int:switch_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_switch_filters(switch_id):
"""Get switch filters."""
data = _get_request_args()
@ -693,6 +726,7 @@ def show_switch_filters(switch_id):
@app.route("/switch-filters/<int:switch_id>", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_switch_filters(switch_id):
"""update switch filters."""
data = _get_request_data()
@ -705,6 +739,7 @@ def update_switch_filters(switch_id):
@app.route("/switch-filters/<int:switch_id>", methods=['PATCH'])
@log_user_action
@login_required
@update_user_token
def patch_switch_filters(switch_id):
"""patch switch filters."""
data = _get_request_data()
@ -785,6 +820,7 @@ def _filter_location(data):
@app.route("/switches/<int:switch_id>/machines", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_switch_machines(switch_id):
"""Get switch machines."""
data = _get_request_args(vlans=_int_converter)
@ -803,6 +839,7 @@ def list_switch_machines(switch_id):
@app.route("/switches/<int:switch_id>/machines-hosts", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_switch_machines_hosts(switch_id):
"""Get switch machines or hosts."""
data = _get_request_args(vlans=_int_converter, os_id=_int_converter)
@ -823,6 +860,7 @@ def list_switch_machines_hosts(switch_id):
@app.route("/switches/<int:switch_id>/machines", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def add_switch_machine(switch_id):
"""add switch machine."""
data = _get_request_data()
@ -838,6 +876,7 @@ def add_switch_machine(switch_id):
)
@log_user_action
@login_required
@update_user_token
def show_switch_machine(switch_id, machine_id):
"""get switch machine."""
data = _get_request_args()
@ -855,6 +894,7 @@ def show_switch_machine(switch_id, machine_id):
)
@log_user_action
@login_required
@update_user_token
def update_switch_machine(switch_id, machine_id):
"""update switch machine."""
data = _get_request_data()
@ -872,6 +912,7 @@ def update_switch_machine(switch_id, machine_id):
)
@log_user_action
@login_required
@update_user_token
def patch_switch_machine(switch_id, machine_id):
"""patch switch machine."""
data = _get_request_data()
@ -889,6 +930,7 @@ def patch_switch_machine(switch_id, machine_id):
)
@log_user_action
@login_required
@update_user_token
def delete_switch_machine(switch_id, machine_id):
"""Delete switch machine."""
data = _get_request_data()
@ -903,6 +945,7 @@ def delete_switch_machine(switch_id, machine_id):
@app.route("/switches/<int:switch_id>/action", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def take_switch_action(switch_id):
"""update switch."""
data = _get_request_data()
@ -930,6 +973,7 @@ def take_switch_action(switch_id):
@app.route("/machines/<int:machine_id>/action", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def take_machine_action(machine_id):
"""update machine."""
data = _get_request_data()
@ -969,6 +1013,7 @@ def take_machine_action(machine_id):
@app.route("/switch-machines", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_switchmachines():
"""List switch machines."""
data = _get_request_args(vlans=_int_converter)
@ -988,6 +1033,7 @@ def list_switchmachines():
@app.route("/switches-machines-hosts", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_switchmachines_hosts():
"""List switch machines or hosts."""
data = _get_request_args(vlans=_int_converter, os_id=_int_converter)
@ -1012,6 +1058,7 @@ def list_switchmachines_hosts():
)
@log_user_action
@login_required
@update_user_token
def show_switchmachine(switch_machine_id):
"""get switch machine."""
data = _get_request_args()
@ -1029,6 +1076,7 @@ def show_switchmachine(switch_machine_id):
)
@log_user_action
@login_required
@update_user_token
def update_switchmachine(switch_machine_id):
"""update switch machine."""
data = _get_request_data()
@ -1043,6 +1091,7 @@ def update_switchmachine(switch_machine_id):
@app.route('/switch-machines/<int:switch_machine_id>', methods=['PATCH'])
@log_user_action
@login_required
@update_user_token
def patch_switchmachine(switch_machine_id):
"""patch switch machine."""
data = _get_request_data()
@ -1057,6 +1106,7 @@ def patch_switchmachine(switch_machine_id):
@app.route("/switch-machines/<int:switch_machine_id>", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_switchmachine(switch_machine_id):
"""Delete switch machine."""
data = _get_request_data()
@ -1071,6 +1121,7 @@ def delete_switchmachine(switch_machine_id):
@app.route("/machines", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_machines():
"""List machines."""
data = _get_request_args()
@ -1087,6 +1138,7 @@ def list_machines():
@app.route("/machines/<int:machine_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_machine(machine_id):
"""Get machine."""
data = _get_request_args()
@ -1101,6 +1153,7 @@ def show_machine(machine_id):
@app.route("/machines/<int:machine_id>", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_machine(machine_id):
"""update machine."""
data = _get_request_data()
@ -1115,6 +1168,7 @@ def update_machine(machine_id):
@app.route("/machines/<int:machine_id>", methods=['PATCH'])
@log_user_action
@login_required
@update_user_token
def patch_machine(machine_id):
"""patch machine."""
data = _get_request_data()
@ -1129,6 +1183,7 @@ def patch_machine(machine_id):
@app.route("/machines/<int:machine_id>", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_machine(machine_id):
"""Delete machine."""
data = _get_request_data()
@ -1143,6 +1198,7 @@ def delete_machine(machine_id):
@app.route("/subnets", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_subnets():
"""List subnets."""
data = _get_request_args()
@ -1157,6 +1213,7 @@ def list_subnets():
@app.route("/subnets/<int:subnet_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_subnet(subnet_id):
"""Get subnet."""
data = _get_request_args()
@ -1171,6 +1228,7 @@ def show_subnet(subnet_id):
@app.route("/subnets", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def add_subnet():
"""add subnet."""
data = _get_request_data()
@ -1183,6 +1241,7 @@ def add_subnet():
@app.route("/subnets/<int:subnet_id>", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_subnet(subnet_id):
"""update subnet."""
data = _get_request_data()
@ -1197,6 +1256,7 @@ def update_subnet(subnet_id):
@app.route("/subnets/<int:subnet_id>", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_subnet(subnet_id):
"""Delete subnet."""
data = _get_request_data()
@ -1211,6 +1271,7 @@ def delete_subnet(subnet_id):
@app.route("/adapters", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_adapters():
"""List adapters."""
data = _get_request_args()
@ -1229,6 +1290,7 @@ def list_adapters():
@app.route("/adapters/<int:adapter_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_adapter(adapter_id):
"""Get adapter."""
data = _get_request_args()
@ -1243,6 +1305,7 @@ def show_adapter(adapter_id):
@app.route("/adapters/<int:adapter_id>/metadata", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_adapter_metadata(adapter_id):
"""Get adapter metadata."""
data = _get_request_args()
@ -1257,6 +1320,7 @@ def show_adapter_metadata(adapter_id):
@app.route("/oses/<int:os_id>/metadata", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_os_metadata(os_id):
"""Get os metadata."""
data = _get_request_args()
@ -1274,6 +1338,7 @@ def show_os_metadata(os_id):
)
@log_user_action
@login_required
@update_user_token
def show_adapter_os_metadata(adapter_id, os_id):
"""Get adapter metadata."""
data = _get_request_args()
@ -1288,6 +1353,7 @@ def show_adapter_os_metadata(adapter_id, os_id):
@app.route("/clusters", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_clusters():
"""List clusters."""
data = _get_request_args()
@ -1302,6 +1368,7 @@ def list_clusters():
@app.route("/clusters/<int:cluster_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_cluster(cluster_id):
"""Get cluster."""
data = _get_request_args(adapter_id=_int_converter)
@ -1316,6 +1383,7 @@ def show_cluster(cluster_id):
@app.route("/clusters", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def add_cluster():
"""add cluster."""
data = _get_request_data()
@ -1328,6 +1396,7 @@ def add_cluster():
@app.route("/clusters/<int:cluster_id>", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_cluster(cluster_id):
"""update cluster."""
data = _get_request_data()
@ -1342,6 +1411,7 @@ def update_cluster(cluster_id):
@app.route("/clusters/<int:cluster_id>", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_cluster(cluster_id):
"""Delete cluster."""
data = _get_request_data()
@ -1361,6 +1431,7 @@ def delete_cluster(cluster_id):
@app.route("/clusters/<int:cluster_id>/config", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_cluster_config(cluster_id):
"""Get cluster config."""
data = _get_request_args()
@ -1375,6 +1446,7 @@ def show_cluster_config(cluster_id):
@app.route("/clusters/<int:cluster_id>/metadata", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_cluster_metadata(cluster_id):
"""Get cluster config."""
data = _get_request_args()
@ -1389,6 +1461,7 @@ def show_cluster_metadata(cluster_id):
@app.route("/clusters/<int:cluster_id>/config", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_cluster_config(cluster_id):
"""update cluster config."""
data = _get_request_data()
@ -1401,6 +1474,7 @@ def update_cluster_config(cluster_id):
@app.route("/clusters/<int:cluster_id>/config", methods=['PATCH'])
@log_user_action
@login_required
@update_user_token
def patch_cluster_config(cluster_id):
"""patch cluster config."""
data = _get_request_data()
@ -1413,6 +1487,7 @@ def patch_cluster_config(cluster_id):
@app.route("/clusters/<int:cluster_id>/config", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_cluster_config(cluster_id):
"""Delete cluster config."""
data = _get_request_data()
@ -1427,6 +1502,7 @@ def delete_cluster_config(cluster_id):
@app.route("/clusters/<int:cluster_id>/action", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def take_cluster_action(cluster_id):
"""take cluster action."""
data = _get_request_data()
@ -1461,6 +1537,7 @@ def take_cluster_action(cluster_id):
@app.route("/clusters/<int:cluster_id>/state", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def get_cluster_state(cluster_id):
"""Get cluster state."""
data = _get_request_args()
@ -1475,6 +1552,7 @@ def get_cluster_state(cluster_id):
@app.route("/clusters/<int:cluster_id>/hosts", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_cluster_hosts(cluster_id):
"""Get cluster hosts."""
data = _get_request_args()
@ -1489,6 +1567,7 @@ def list_cluster_hosts(cluster_id):
@app.route("/clusterhosts", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_clusterhosts():
"""Get cluster hosts."""
data = _get_request_args()
@ -1503,6 +1582,7 @@ def list_clusterhosts():
@app.route("/clusters/<int:cluster_id>/hosts/<int:host_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_cluster_host(cluster_id, host_id):
"""Get clusterhost."""
data = _get_request_args()
@ -1517,6 +1597,7 @@ def show_cluster_host(cluster_id, host_id):
@app.route("/clusterhosts/<int:clusterhost_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_clusterhost(clusterhost_id):
"""Get clusterhost."""
data = _get_request_args()
@ -1531,6 +1612,7 @@ def show_clusterhost(clusterhost_id):
@app.route("/clusters/<int:cluster_id>/hosts", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def add_cluster_host(cluster_id):
"""update cluster hosts."""
data = _get_request_data()
@ -1546,6 +1628,7 @@ def add_cluster_host(cluster_id):
)
@log_user_action
@login_required
@update_user_token
def update_cluster_host(cluster_id, host_id):
"""Update cluster host."""
data = _get_request_data()
@ -1563,6 +1646,7 @@ def update_cluster_host(cluster_id, host_id):
)
@log_user_action
@login_required
@update_user_token
def update_clusterhost(clusterhost_id):
"""Update cluster host."""
data = _get_request_data()
@ -1580,6 +1664,7 @@ def update_clusterhost(clusterhost_id):
)
@log_user_action
@login_required
@update_user_token
def patch_cluster_host(cluster_id, host_id):
"""Update cluster host."""
data = _get_request_data()
@ -1597,6 +1682,7 @@ def patch_cluster_host(cluster_id, host_id):
)
@log_user_action
@login_required
@update_user_token
def patch_clusterhost(clusterhost_id):
"""Update cluster host."""
data = _get_request_data()
@ -1614,6 +1700,7 @@ def patch_clusterhost(clusterhost_id):
)
@log_user_action
@login_required
@update_user_token
def delete_cluster_host(cluster_id, host_id):
"""Delete cluster host."""
data = _get_request_data()
@ -1636,6 +1723,7 @@ def delete_cluster_host(cluster_id, host_id):
)
@log_user_action
@login_required
@update_user_token
def delete_clusterhost(clusterhost_id):
"""Delete cluster host."""
data = _get_request_data()
@ -1658,6 +1746,7 @@ def delete_clusterhost(clusterhost_id):
)
@log_user_action
@login_required
@update_user_token
def show_cluster_host_config(cluster_id, host_id):
"""Get clusterhost config."""
data = _get_request_args()
@ -1672,6 +1761,7 @@ def show_cluster_host_config(cluster_id, host_id):
@app.route("/clusterhosts/<int:clusterhost_id>/config", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_clusterhost_config(clusterhost_id):
"""Get clusterhost config."""
data = _get_request_args()
@ -1689,6 +1779,7 @@ def show_clusterhost_config(clusterhost_id):
)
@log_user_action
@login_required
@update_user_token
def update_cluster_host_config(cluster_id, host_id):
"""update clusterhost config."""
data = _get_request_data()
@ -1703,6 +1794,7 @@ def update_cluster_host_config(cluster_id, host_id):
@app.route("/clusterhosts/<int:clusterhost_id>/config", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_clusterhost_config(clusterhost_id):
"""update clusterhost config."""
data = _get_request_data()
@ -1720,6 +1812,7 @@ def update_clusterhost_config(clusterhost_id):
)
@log_user_action
@login_required
@update_user_token
def patch_cluster_host_config(cluster_id, host_id):
"""patch clusterhost config."""
data = _get_request_data()
@ -1734,6 +1827,7 @@ def patch_cluster_host_config(cluster_id, host_id):
@app.route("/clusterhosts/<int:clusterhost_id>", methods=['PATCH'])
@log_user_action
@login_required
@update_user_token
def patch_clusterhost_config(clusterhost_id):
"""patch clusterhost config."""
data = _get_request_data()
@ -1751,6 +1845,7 @@ def patch_clusterhost_config(clusterhost_id):
)
@log_user_action
@login_required
@update_user_token
def delete_cluster_host_config(cluster_id, host_id):
"""Delete clusterhost config."""
data = _get_request_data()
@ -1765,6 +1860,7 @@ def delete_cluster_host_config(cluster_id, host_id):
@app.route("/clusterhosts/<int:clusterhost_id>/config", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_clusterhost_config(clusterhost_id):
"""Delete clusterhost config."""
data = _get_request_data()
@ -1782,6 +1878,7 @@ def delete_clusterhost_config(clusterhost_id):
)
@log_user_action
@login_required
@update_user_token
def show_cluster_host_state(cluster_id, host_id):
"""Get clusterhost state."""
data = _get_request_args()
@ -1796,6 +1893,7 @@ def show_cluster_host_state(cluster_id, host_id):
@app.route("/clusterhosts/<int:clusterhost_id>/state", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_clusterhost_state(clusterhost_id):
"""Get clusterhost state."""
data = _get_request_args()
@ -1813,6 +1911,7 @@ def show_clusterhost_state(clusterhost_id):
)
@log_user_action
@login_required
@update_user_token
def update_cluster_host_state(cluster_id, host_id):
"""update clusterhost state."""
data = _get_request_data()
@ -1827,6 +1926,7 @@ def update_cluster_host_state(cluster_id, host_id):
@app.route("/clusterhosts/<int:clusterhost_id>/state", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_clusterhost_state(clusterhost_id):
"""update clusterhost state."""
data = _get_request_data()
@ -1841,6 +1941,7 @@ def update_clusterhost_state(clusterhost_id):
@app.route("/hosts", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_hosts():
"""List hosts."""
data = _get_request_args()
@ -1855,6 +1956,7 @@ def list_hosts():
@app.route("/hosts/<int:host_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_host(host_id):
"""Get host."""
data = _get_request_args()
@ -1869,6 +1971,7 @@ def show_host(host_id):
@app.route("/machines-hosts", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_machines_or_hosts():
"""Get host."""
data = _get_request_args(os_id=_int_converter)
@ -1887,6 +1990,7 @@ def list_machines_or_hosts():
@app.route("/machines-hosts/<int:host_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_machine_or_host(host_id):
"""Get host."""
data = _get_request_args()
@ -1901,6 +2005,7 @@ def show_machine_or_host(host_id):
@app.route("/hosts/<int:host_id>", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_host(host_id):
"""update host."""
data = _get_request_data()
@ -1915,6 +2020,7 @@ def update_host(host_id):
@app.route("/hosts", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_hosts():
"""update hosts."""
data = _get_request_data_as_list()
@ -1929,6 +2035,7 @@ def update_hosts():
@app.route("/hosts/<int:host_id>", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_host(host_id):
"""Delete host."""
data = _get_request_data()
@ -1948,6 +2055,7 @@ def delete_host(host_id):
@app.route("/hosts/<int:host_id>/clusters", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def get_host_clusters(host_id):
"""Get host clusters."""
data = _get_request_args()
@ -1962,6 +2070,7 @@ def get_host_clusters(host_id):
@app.route("/hosts/<int:host_id>/config", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_host_config(host_id):
"""Get host config."""
data = _get_request_args()
@ -1976,6 +2085,7 @@ def show_host_config(host_id):
@app.route("/hosts/<int:host_id>/config", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_host_config(host_id):
"""update host config."""
data = _get_request_data()
@ -1988,6 +2098,7 @@ def update_host_config(host_id):
@app.route("/hosts/<int:host_id>", methods=['PATCH'])
@log_user_action
@login_required
@update_user_token
def patch_host_config(host_id):
"""patch host config."""
data = _get_request_data()
@ -2000,6 +2111,7 @@ def patch_host_config(host_id):
@app.route("/hosts/<int:host_id>/config", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_host_config(host_id):
"""Delete host config."""
data = _get_request_data()
@ -2014,6 +2126,7 @@ def delete_host_config(host_id):
@app.route("/hosts/<int:host_id>/networks", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_host_networks(host_id):
"""list host networks."""
data = _get_request_args()
@ -2030,6 +2143,7 @@ def list_host_networks(host_id):
@app.route("/host/networks", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def list_hostnetworks():
"""list host networks."""
data = _get_request_args(
@ -2050,6 +2164,7 @@ def list_hostnetworks():
)
@log_user_action
@login_required
@update_user_token
def show_host_network(host_id, host_network_id):
"""Get host network."""
data = _get_request_args()
@ -2064,6 +2179,7 @@ def show_host_network(host_id, host_network_id):
@app.route("/host/networks/<int:host_network_id>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_hostnetwork(host_network_id):
"""Get host network."""
data = _get_request_args()
@ -2078,6 +2194,7 @@ def show_hostnetwork(host_network_id):
@app.route("/hosts/<int:host_id>/networks", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def add_host_network(host_id):
"""add host network."""
data = _get_request_data()
@ -2089,6 +2206,7 @@ def add_host_network(host_id):
@app.route("/hosts/networks", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_host_networks():
"""add host networks."""
data = _get_request_data_as_list()
@ -2104,6 +2222,7 @@ def update_host_networks():
)
@log_user_action
@login_required
@update_user_token
def update_host_network(host_id, host_network_id):
"""update host network."""
data = _get_request_data()
@ -2118,6 +2237,7 @@ def update_host_network(host_id, host_network_id):
@app.route("/host-networks/<int:host_network_id>", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_hostnetwork(host_network_id):
"""update host network."""
data = _get_request_data()
@ -2135,6 +2255,7 @@ def update_hostnetwork(host_network_id):
)
@log_user_action
@login_required
@update_user_token
def delete_host_network(host_id, host_network_id):
"""Delete host network."""
data = _get_request_data()
@ -2149,6 +2270,7 @@ def delete_host_network(host_id, host_network_id):
@app.route("/host-networks/<int:host_network_id>", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def delete_hostnetwork(host_network_id):
"""Delete host network."""
data = _get_request_data()
@ -2163,6 +2285,7 @@ def delete_hostnetwork(host_network_id):
@app.route("/hosts/<int:host_id>/state", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def show_host_state(host_id):
"""Get host state."""
data = _get_request_args()
@ -2177,6 +2300,7 @@ def show_host_state(host_id):
@app.route("/hosts/<int:host_id>/state", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def update_host_state(host_id):
"""update host state."""
data = _get_request_data()
@ -2218,6 +2342,7 @@ def _reset_host(*args, **kwargs):
@app.route("/hosts/<int:host_id>/action", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def take_host_action(host_id):
"""take host action."""
data = _get_request_data()
@ -2264,6 +2389,7 @@ def _get_response_json(response):
@app.route("/proxy/<path:url>", methods=['GET'])
@log_user_action
@login_required
@update_user_token
def proxy_get(url):
"""proxy url."""
headers = _get_headers(
@ -2290,6 +2416,7 @@ def proxy_get(url):
@app.route("/proxy/<path:url>", methods=['POST'])
@log_user_action
@login_required
@update_user_token
def proxy_post(url):
"""proxy url."""
headers = _get_headers(
@ -2315,6 +2442,7 @@ def proxy_post(url):
@app.route("/proxy/<path:url>", methods=['PUT'])
@log_user_action
@login_required
@update_user_token
def proxy_put(url):
"""proxy url."""
headers = _get_headers(
@ -2340,6 +2468,7 @@ def proxy_put(url):
@app.route("/proxy/<path:url>", methods=['PATCH'])
@log_user_action
@login_required
@update_user_token
def proxy_patch(url):
"""proxy url."""
headers = _get_headers(
@ -2365,6 +2494,7 @@ def proxy_patch(url):
@app.route("/proxy/<path:url>", methods=['DELETE'])
@log_user_action
@login_required
@update_user_token
def proxy_delete(url):
"""proxy url."""
headers = _get_headers(

View File

@ -190,10 +190,7 @@ class UserWrapper(UserMixin):
self.password = crypted_password
self.active = active
self.is_admin = is_admin
if expire_timestamp:
self.expire_timestamp = expire_timestamp
else:
self.expire_timestamp = datetime.datetime.now()
self.expire_timestamp = expire_timestamp
if not token:
self.token = self.get_auth_token()
else:
@ -215,7 +212,10 @@ class UserWrapper(UserMixin):
def is_authenticated(self):
current_time = datetime.datetime.now()
return current_time < self.expire_timestamp
return (
not self.expire_timestamp or
current_time < self.expire_timestamp
)
def __str__(self):
return '%s[email:%s,password:%s]' % (
@ -253,20 +253,33 @@ def get_user_object_from_token(session, token):
session, models.User, id=user_token.user_id
).to_dict()
user_dict['token'] = token
user_dict['expire_timestamp'] = user_token.expire_timestamp
expire_timestamp = user_token.expire_timestamp
user_dict['expire_timestamp'] = expire_timestamp
return UserWrapper(**user_dict)
@utils.supported_filters()
@database.run_in_session()
@utils.wrap_to_dict(RESP_TOKEN_FIELDS)
def record_user_token(session, user, token, expire_timestamp):
def record_user_token(
session, user, token, expire_timestamp
):
"""record user token in database."""
return utils.add_db_object(
session, models.UserToken, True,
token, user_id=user.id,
expire_timestamp=expire_timestamp
user_token = utils.get_db_object(
session, models.UserToken, False,
user_id=user.id, token=token
)
if not user_token:
return utils.add_db_object(
session, models.UserToken, True,
token, user_id=user.id,
expire_timestamp=expire_timestamp
)
elif expire_timestamp > user_token.expire_timestamp:
return utils.update_db_object(
session, user_token, expire_timestamp=expire_timestamp
)
return user_token
@utils.supported_filters()

View File

@ -20,10 +20,12 @@ import logging
import netaddr
import re
from sqlalchemy import and_
from sqlalchemy import or_
from compass.db import exception
from compass.db import models
from compass.utils import util
def model_query(session, model):
@ -53,18 +55,21 @@ def _one_item_list_condition_func(col_attr, value, condition_func):
return None
def _model_filter_by_condition(
query, col_attr, value, condition_func,
list_condition_func=_default_list_condition_func):
def _model_condition_func(
col_attr, value,
item_condition_func,
list_condition_func=_default_list_condition_func
):
if isinstance(value, list):
condition = list_condition_func(
col_attr, value, condition_func
if not value:
return None
if len(value) == 1:
return item_condition_func(col_attr, value)
return list_condition_func(
col_attr, value, item_condition_func
)
else:
condition = condition_func(col_attr, value)
if condition is not None:
query = query.filter(condition)
return query
return item_condition_func(col_attr, value)
def _between_condition(col_attr, value):
@ -100,6 +105,108 @@ def model_order_by(query, model, order_by):
return query.order_by(*order_by_cols)
def _model_condition(col_attr, value):
if isinstance(value, list):
basetype_values = []
composite_values = []
for item in value:
if util.is_instance(item, [list, dict]):
composite_values.append(item)
else:
basetype_values.append(item)
conditions = []
if basetype_values:
if len(basetype_values) == 1:
condition = (col_attr == basetype_values[0])
else:
condition = col_attr.in_(basetype_values)
conditions.append(condition)
for composite_value in composite_values:
condition = _model_condition(col_attr, composite_value)
if condition is not None:
conditions.append(condition)
if not conditions:
return None
if len(conditions) == 1:
return conditions[0]
return or_(*conditions)
elif isinstance(value, dict):
conditions = []
if 'eq' in value:
conditions.append(_model_condition_func(
col_attr, value['eq'],
lambda attr, data: attr == data,
lambda attr, data, item_condition_func: attr.in_(data)
))
if 'lt' in value:
conditions.append(_model_condition_func(
col_attr, value['lt'],
lambda attr, data: attr < data,
_one_item_list_condition_func
))
if 'gt' in value:
conditions.append(_model_condition_func(
col_attr, value['gt'],
lambda attr, data: attr > data,
_one_item_list_condition_func
))
if 'le' in value:
conditions.append(_model_condition_func(
col_attr, value['le'],
lambda attr, data: attr <= data,
_one_item_list_condition_func
))
if 'ge' in value:
conditions.append(_model_condition_func(
col_attr, value['ge'],
lambda attr, data: attr >= data,
_one_item_list_condition_func
))
if 'ne' in value:
conditions.append(_model_condition_func(
col_attr, value['ne'],
lambda attr, data: attr != data,
lambda attr, data, item_condition_func: attr.notin_(data)
))
if 'in' in value:
conditions.append(col_attr.in_(value['in']))
if 'notin' in value:
conditions.append(col_attr.notin_(value['notin']))
if 'startswith' in value:
conditions.append(_model_condition_func(
col_attr, value['startswith'],
lambda attr, data: attr.like('%s%%' % data)
))
if 'endswith' in value:
conditions.append(_model_condition_func(
col_attr, value['endswith'],
lambda attr, data: attr.like('%%%s' % data)
))
if 'like' in value:
conditions.append(_model_condition_func(
col_attr, value['like'],
lambda attr, data: attr.like('%%%s%%' % data)
))
if 'between' in value:
conditions.append(_model_condition_func(
col_attr, value['between'],
_between_condition
))
conditions = [
condition
for condition in conditions
if condition is not None
]
if not conditions:
return None
if len(conditions) == 1:
return conditions[0]
return and_(conditions)
else:
condition = (col_attr == value)
return condition
def model_filter(query, model, **filters):
for key, value in filters.items():
if isinstance(key, basestring):
@ -109,69 +216,9 @@ def model_filter(query, model, **filters):
continue
else:
col_attr = key
if isinstance(value, list):
query = query.filter(col_attr.in_(value))
elif isinstance(value, dict):
if 'eq' in value:
query = _model_filter_by_condition(
query, col_attr, value['eq'],
lambda attr, data: attr == data,
lambda attr, data, condition_func: attr.in_(data)
)
if 'lt' in value:
query = _model_filter_by_condition(
query, col_attr, value['lt'],
lambda attr, data: attr < data,
_one_item_list_condition_func
)
if 'gt' in value:
query = _model_filter_by_condition(
query, col_attr, value['gt'],
lambda attr, data: attr > data,
_one_item_list_condition_func
)
if 'le' in value:
query = _model_filter_by_condition(
query, col_attr, value['le'],
lambda attr, data: attr <= data,
_one_item_list_condition_func
)
if 'ge' in value:
query = _model_filter_by_condition(
query, col_attr, value['ge'],
lambda attr, data: attr >= data,
_one_item_list_condition_func
)
if 'ne' in value:
query = _model_filter_by_condition(
query, col_attr, value['ne'], None,
lambda attr, data, condition_func: ~attr.in_(data)
)
if 'in' in value:
query = query.filter(col_attr.in_(value['in']))
if 'startswith' in value:
query = _model_filter_by_condition(
query, col_attr, value['startswith'],
lambda attr, data: attr.like('%s%%' % data)
)
if 'endswith' in value:
query = _model_filter_by_condition(
query, col_attr, value['endswith'],
lambda attr, data: attr.like('%%%s' % data)
)
if 'like' in value:
query = _model_filter_by_condition(
query, col_attr, value['like'],
lambda attr, data: attr.like('%%%s%%' % data)
)
if 'between' in value:
query = _model_filter_by_condition(
query, col_attr, value['between'],
_between_condition
)
else:
query = query.filter(col_attr == value)
condition = _model_condition(col_attr, value)
if condition is not None:
query = query.filter(condition)
return query
@ -221,6 +268,10 @@ def wrap_to_dict(support_keys=[], **filters):
def _wrapper_dict(data, support_keys, **filters):
"""Helper for warpping db object into dictionary."""
logging.info(
'wrap dict %s by support_keys=%s filters=%s',
data, support_keys, filters
)
if isinstance(data, list):
return [
_wrapper_dict(item, support_keys, **filters)
@ -509,6 +560,9 @@ def add_db_object(session, table, exception_when_existing=True,
new_object = False
if db_object:
logging.debug(
'got db object %s: %s', db_keys, db_object
)
if exception_when_existing:
raise exception.DuplicatedRecord(
'%s exists in table %s' % (db_keys, table.__name__)

View File

@ -1456,9 +1456,7 @@ class UserToken(BASE, HelperMixin):
ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE')
)
token = Column(String(256), unique=True, nullable=False)
expire_timestamp = Column(
DateTime, default=lambda: datetime.datetime.now()
)
expire_timestamp = Column(DateTime, nullable=True)
def __init__(self, token, **kwargs):
self.token = token
@ -2200,6 +2198,9 @@ class AdapterFlavorRole(BASE, HelperMixin):
self.role_id = role_id
super(AdapterFlavorRole, self).__init__()
def __str__(self):
return 'AdapterFlavorRole[%s:%s]' % (self.flavor_id, self.role_id)
def validate(self):
super(AdapterFlavorRole, self).validate()
flavor_adapter_id = self.flavor.adapter_id
@ -2508,6 +2509,9 @@ class Adapter(BASE, HelperMixin):
self.name = name
super(Adapter, self).__init__(**kwargs)
def __str__(self):
return 'Adapter[%s:%s]' % (self.id, self.name)
def initialize(self):
if not self.display_name:
self.display_name = self.name

View File

@ -84,6 +84,7 @@ deactivate
sudo mkdir -p /var/log/redis
sudo chown -R redis:root /var/log/redis
sudo mkdir -p /var/lib/redis/
sudo rm -rf /var/lib/redis/*
sudo chown -R redis:root /var/lib/redis
sudo mkdir -p /var/run/redis
sudo chown -R redis:root /var/run/redis