Support assigning macs to existing items
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
4fa4edb637
commit
5c134ed566
@ -1,3 +1,4 @@
|
|||||||
|
import re
|
||||||
import boto3
|
import boto3
|
||||||
import pymongo
|
import pymongo
|
||||||
import urllib
|
import urllib
|
||||||
@ -24,9 +25,12 @@ channel = "inventory"
|
|||||||
@login_required
|
@login_required
|
||||||
@page_inventory.route("/m/inventory/by-mac/<mac>", methods=['GET'])
|
@page_inventory.route("/m/inventory/by-mac/<mac>", methods=['GET'])
|
||||||
def view_inventory_by_mac(mac):
|
def view_inventory_by_mac(mac):
|
||||||
|
if not check_mac_address_valid(mac):
|
||||||
|
return "Invalid mac address", 400
|
||||||
|
mac = mac.lower()
|
||||||
item = db.inventory.find_one({ "mac": mac }, projection = { "_id": 1})
|
item = db.inventory.find_one({ "mac": mac }, projection = { "_id": 1})
|
||||||
if not item or not item.get("_id", False):
|
if not item or not item.get("_id", False):
|
||||||
return abort(404)
|
return redirect("/m/inventory/assign-mac/%s" % mac)
|
||||||
return redirect(url_for("inventory.view_inventory_view", item_id = item["_id"]))
|
return redirect(url_for("inventory.view_inventory_view", item_id = item["_id"]))
|
||||||
|
|
||||||
@page_inventory.route("/m/inventory/<item_id>/view")
|
@page_inventory.route("/m/inventory/<item_id>/view")
|
||||||
@ -403,6 +407,7 @@ def delete_thumbs(item):
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@page_inventory.route("/m/inventory/assign-mac/<slug>")
|
||||||
@page_inventory.route("/m/inventory/assign-slug/<slug>")
|
@page_inventory.route("/m/inventory/assign-slug/<slug>")
|
||||||
@page_inventory.route("/m/inventory/clone-with-slug/<slug>")
|
@page_inventory.route("/m/inventory/clone-with-slug/<slug>")
|
||||||
@page_inventory.route("/m/inventory")
|
@page_inventory.route("/m/inventory")
|
||||||
@ -437,16 +442,25 @@ def view_inventory(slug=None):
|
|||||||
if slug and not public_view:
|
if slug and not public_view:
|
||||||
template = "inventory_pick.html"
|
template = "inventory_pick.html"
|
||||||
if request.path.startswith("/m/inventory/clone-with-slug"):
|
if request.path.startswith("/m/inventory/clone-with-slug"):
|
||||||
|
action_method = "get"
|
||||||
action_path = "clone-by-slug"
|
action_path = "clone-by-slug"
|
||||||
action_label = "Clone"
|
action_label = "Clone"
|
||||||
action_help = "Cloning item to new slug"
|
action_help = "Cloning item to new slug"
|
||||||
pick = True
|
pick = True
|
||||||
elif request.path.startswith("/m/inventory/assign-slug"):
|
elif request.path.startswith("/m/inventory/assign-slug"):
|
||||||
q.update({"shortener.slug": None})
|
q.update({"shortener.slug": None})
|
||||||
|
action_method = "get"
|
||||||
action_path = "edit-by-slug"
|
action_path = "edit-by-slug"
|
||||||
action_label = "Assign slug"
|
action_label = "Assign slug"
|
||||||
action_help = "Assigning slug"
|
action_help = "Assigning slug"
|
||||||
pick = True
|
pick = True
|
||||||
|
elif request.path.startswith("/m/inventory/assign-mac"):
|
||||||
|
q.update({"mac": None})
|
||||||
|
action_method = "post"
|
||||||
|
action_path = "set-mac"
|
||||||
|
action_label = "Assign MAC"
|
||||||
|
action_help = "Assigning MAC"
|
||||||
|
pick = True
|
||||||
if grid:
|
if grid:
|
||||||
template = "inventory_grid.html"
|
template = "inventory_grid.html"
|
||||||
if user:
|
if user:
|
||||||
@ -468,6 +482,30 @@ def view_inventory(slug=None):
|
|||||||
return render_template(template, **locals())
|
return render_template(template, **locals())
|
||||||
|
|
||||||
|
|
||||||
|
@page_inventory.route("/m/inventory/<item_id>/set-mac/<mac>", methods=['POST'])
|
||||||
|
@login_required
|
||||||
|
def view_set_mac(item_id, mac):
|
||||||
|
if not check_mac_address_valid(mac):
|
||||||
|
return abort(400)
|
||||||
|
|
||||||
|
result = db.inventory.update_one({
|
||||||
|
"_id": ObjectId(item_id),
|
||||||
|
"mac": {"$exists": False}
|
||||||
|
}, {
|
||||||
|
"$set": {
|
||||||
|
"mac" : mac.lower(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
if result.matched_count > 0:
|
||||||
|
return redirect("/m/inventory/%s/view" % item_id)
|
||||||
|
else:
|
||||||
|
return abort(404)
|
||||||
|
|
||||||
|
def check_mac_address_valid(mac):
|
||||||
|
mac_regex = re.compile(r'^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$')
|
||||||
|
return bool(mac_regex.match(mac))
|
||||||
|
|
||||||
@page_inventory.route("/m/inventory/<item_id>/audit", methods=["POST"])
|
@page_inventory.route("/m/inventory/<item_id>/audit", methods=["POST"])
|
||||||
@login_required(groups=["k-space:inventory:audit"])
|
@login_required(groups=["k-space:inventory:audit"])
|
||||||
def view_inventory_audit(item_id):
|
def view_inventory_audit(item_id):
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<td>{% if item.inventory.owner %}<a href="/m/user/{{ item.inventory.owner.username }}">{{ item.inventory.owner.username | display_name }}</a>{% endif %}</td>
|
<td>{% if item.inventory.owner %}<a href="/m/user/{{ item.inventory.owner.username }}">{{ item.inventory.owner.username | display_name }}</a>{% endif %}</td>
|
||||||
<td>{% if item.inventory.user %}<a href="/m/user/{{ item.inventory.user.username }}">{{ item.inventory.user.username | display_name }}</a>{% endif %}</td>
|
<td>{% if item.inventory.user %}<a href="/m/user/{{ item.inventory.user.username }}">{{ item.inventory.user.username | display_name }}</a>{% endif %}</td>
|
||||||
<td>
|
<td>
|
||||||
<form action="/m/inventory/{{item._id}}/{{action_path}}/{{slug}}" method="get">
|
<form action="/m/inventory/{{item._id}}/{{action_path}}/{{slug}}" method="{{action_method}}">
|
||||||
<button class="waves-effect waves-light btn" type="submit">{{action_label}}</button>
|
<button class="waves-effect waves-light btn" type="submit">{{action_label}}</button>
|
||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
|
Loading…
Reference in New Issue
Block a user