|
|
@@ -4,8 +4,9 @@
|
|
|
import express = require('express');
|
|
|
const router = express.Router();
|
|
|
import Security from '../src/Security';
|
|
|
+import RouterUtils from '../src/RouterUtils';
|
|
|
import { ILDAPManager } from '../src/ldapInterface';
|
|
|
-import { LDAPSchemaObjectClass } from '../src/LDAPSchema';
|
|
|
+import { LDAPSchemaObjectClass, ClassType } from '../src/LDAPSchema';
|
|
|
|
|
|
function LDAPEntryToAttributes(entry: Map<string, Array<string>>): any {
|
|
|
let result: any = [];
|
|
|
@@ -16,16 +17,14 @@ function LDAPEntryToAttributes(entry: Map<string, Array<string>>): any {
|
|
|
|
|
|
class AttributesByClasses {
|
|
|
public constructor(entry: Map<string, string[]>, classes: Map<string, LDAPSchemaObjectClass>) {
|
|
|
- let oClasses: LDAPSchemaObjectClass[] = new Array();
|
|
|
-
|
|
|
for (let eClass of entry.get("objectClass") || []) {
|
|
|
this.fEntries.set(eClass, new Map());
|
|
|
let cl = classes.get(eClass);
|
|
|
- cl && oClasses.push(cl);
|
|
|
+ cl && this.fObjectClasses.push(cl);
|
|
|
}
|
|
|
for (let [i, j] of entry) {
|
|
|
let found = false;
|
|
|
- for (let oc of oClasses) {
|
|
|
+ for (let oc of this.fObjectClasses) {
|
|
|
if (oc.HasAttribute(i)) {
|
|
|
this.fEntries.get(oc.GetName())?.set(i, j);
|
|
|
found = true;
|
|
|
@@ -35,7 +34,7 @@ class AttributesByClasses {
|
|
|
if (!found)
|
|
|
this.fUnmapped.set(i, j);
|
|
|
}
|
|
|
- for (let klass of oClasses) {
|
|
|
+ for (let klass of this.fObjectClasses) {
|
|
|
let className = klass.GetName();
|
|
|
let classContent = this.fEntries.get(className);
|
|
|
|
|
|
@@ -44,11 +43,18 @@ class AttributesByClasses {
|
|
|
this.fEntries.set(className, classContent);
|
|
|
}
|
|
|
for (let attr of klass.ListAttributes())
|
|
|
- !classContent.has(attr) && classContent.set(attr, new Array());
|
|
|
+ !classContent.has(attr) && !entry.has(attr) && classContent.set(attr, new Array());
|
|
|
this.fEntries.set(className, classContent);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public IsMandatoryAttr(attr: string): boolean {
|
|
|
+ for (let klass of this.fObjectClasses)
|
|
|
+ if (klass.HasMust(attr))
|
|
|
+ return true;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
public ToMap(): any {
|
|
|
let result: any = {};
|
|
|
for (let [ocKey, vals] of this.fEntries) {
|
|
|
@@ -69,17 +75,18 @@ class AttributesByClasses {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ private fObjectClasses: LDAPSchemaObjectClass[] = new Array();
|
|
|
private fEntries: Map<string, Map<string, string[]>> = new Map();
|
|
|
private fUnmapped: Map<string, string[]> = new Map();
|
|
|
}
|
|
|
|
|
|
router.get('/:dn', (req: express.Request, res: express.Response) => {
|
|
|
- if (!Security.requireLoggedUser(req, res))
|
|
|
- return;
|
|
|
+ if (!req.isUserLogged)
|
|
|
+ return RouterUtils.Redirect(res, "/login");
|
|
|
let ldapManager: ILDAPManager;
|
|
|
let entry: Map<string, string[]>;
|
|
|
req.ldapManager.GetInstance()
|
|
|
- .then(_ldapManager => { ldapManager = _ldapManager; return ldapManager.GetEntry(req.params.dn) })
|
|
|
+ .then(_ldapManager => { ldapManager = _ldapManager; return ldapManager.GetEntry(req.params.dn); })
|
|
|
.then(_entry => { entry = _entry; return ldapManager.GetSchema() }).then(schema => {
|
|
|
let classes: AttributesByClasses = new AttributesByClasses(entry, schema);
|
|
|
let dn = (entry.get("dn") || [])[0];
|
|
|
@@ -87,7 +94,19 @@ router.get('/:dn', (req: express.Request, res: express.Response) => {
|
|
|
res.render('entity', {
|
|
|
dn: dn || req.params.dn,
|
|
|
attributes: classes.ToMap(),
|
|
|
- classes: classes.GetObjectClasses()
|
|
|
+ classes: classes.GetObjectClasses(),
|
|
|
+ getType: (klass: string): string => {
|
|
|
+ switch (schema.get(klass)?.GetType()) {
|
|
|
+ case ClassType.eAbstract:
|
|
|
+ return "abstract";
|
|
|
+ case ClassType.eAuxiliary:
|
|
|
+ return "auxiliary";
|
|
|
+ case ClassType.eStructural:
|
|
|
+ return "structural";
|
|
|
+ }
|
|
|
+ return "Unknown";
|
|
|
+ },
|
|
|
+ isMandatory: (attr: string): boolean => classes.IsMandatoryAttr(attr)
|
|
|
});
|
|
|
});
|
|
|
});
|