@@ -1,13 +1,13 @@ | |||
var db = db.getSiblingDB('omdb'); | |||
var db = db.getSiblingDB('om'); | |||
// Delete all collections + all records | |||
db.messages.deleteMany({}); | |||
db.tags.deleteMany({}); | |||
db.users.deleteMany({}); | |||
db.sessions.deleteMany({}); | |||
//db.messages.deleteMany({}); | |||
//db.tags.deleteMany({}); | |||
//db.users.deleteMany({}); | |||
//db.sessions.deleteMany({}); | |||
// Insert data in collections | |||
load('mong_msg.js'); | |||
//load('mong_msg.js'); | |||
load('mong_tag.js'); | |||
load('mong_usr.js'); | |||
@@ -1,8 +1,8 @@ | |||
db.users.insert([ | |||
// author,OHMNEWS2019 | |||
{"_id":"author","name":"Test Author","type":"author","roles":{"user":true,"author":true},"hash":"sha256","salt":"cy5CkPrplcEze6o4psURhw==","pwd":"Gc8ozlxjEGITkS+fW9tz2xLROzws44s04EOCWuP04qE=","abos":["wichtig","th"],"bookmarks":["th"],}, | |||
// admin,oZuse1 | |||
{"_id":"admin","name":"Test Admin","type":"admin","roles":{"user":true,"author":true,"admin":true},"hash":"sha256","salt":"PoIUHbDp7tP34ji31iQ0zw==","pwd":"mJpIfIksYs6LJJwYRBemFKqR6TacsSl2E0ZtpO1GMuk=","abos":["wichtig","th"],"bookmarks":["wichtig"],}, | |||
// User: author, Pwd: author | |||
{"_id":"author","name":"Author","type":"PF@EFI;","roles":{"user":true,"author":true},"hash":"sha256","salt":"SIzKNsNKsCRVr8a9U90q6A==","pwd":"HZly68TSAKHioz6Kz0QCbXVTHpT6hMmabUbFYVlCMeE=","abos":[],"bookmarks":[]}, | |||
// User: admin, Pwd: SwenMho | |||
// {"_id":"admin","name":"Test Admin","type":"MA@AMP;","roles":'{"user":true,"author":true,"admin":true}',"hash":"sha256","salt":"z3PNXGmQaWvaT7m2ZlT+0w==","pwd":"nfUfNv032J745xj3Hzya3Mkk43Dz/H0BmNTZhtx8UM0=","abos":["veniam","ipsum"],"bookmarks":[],}, | |||
]) | |||
//var c = require('./server/crypto.js'), |
@@ -77,7 +77,6 @@ | |||
<script src="routes/bookmark.js"></script> | |||
<script src="routes/profil.js"></script> | |||
<script src="routes/msgCard.js"></script> | |||
<script src="routes/majorData.js"></script> | |||
<script src="routes/profilCard.js"></script> | |||
<script src="routes/navRoutes.js"></script> | |||
<script src="search.js"></script> | |||
@@ -88,13 +87,13 @@ | |||
<div class="om-header"> | |||
<a class="logo-img is-hidden-desktop" href="index.html"><img src="img/app_icon.png" width=45px height=45px></a> | |||
<a class="logo-img is-hidden-touch" href="index.html"><img src="img/app_icon_desk.png" width=100px height=100px></a> | |||
<search></search> | |||
<search :key="vueRender.search"></search> | |||
</div> | |||
</div> | |||
<div class="om-content"> | |||
<div id=xxx></div> | |||
<nav-router></nav-router> | |||
<nav-router :key="auth.user"></nav-router> | |||
<router-view :key="vueRender.key"></router-view> | |||
</div> | |||
</div> | |||
@@ -104,8 +103,8 @@ | |||
router, | |||
el: '#api', | |||
data: { | |||
// Locally registered variables | |||
vueRender : vueRender, | |||
auth: auth, | |||
}, | |||
}); | |||
</script> |
@@ -152,7 +152,7 @@ Vue.component('login-panel', { | |||
function successful_login(res) { | |||
console.info("Re-Auth: Correct credentials"); | |||
this.closeLoginPanel; | |||
vueForceRender(); | |||
vueForceRender('key'); | |||
//console.log(res); | |||
router.push('/home') |
@@ -4,10 +4,11 @@ const CreateMsgRouter = { | |||
<div class="column pull-right-sm is-four-fifths-desktop"> | |||
<div id="mobile" class="om-card card"> | |||
<h4>Neue Nachricht erstellen</h4> | |||
<b-field> | |||
<b-input placeholder="User" id="user"></b-input> | |||
</b-field> | |||
<!--<b-field> | |||
<b-input placeholder="User" id="user"></b-input> | |||
</b-field>--> | |||
<label class="label">{{ userName }}</label> | |||
<b-field> | |||
<b-input placeholder="Betreff" id="subject"></b-input> | |||
</b-field> | |||
@@ -38,6 +39,7 @@ const CreateMsgRouter = { | |||
data: function () { | |||
return { | |||
auth: auth, | |||
isDisabled: false, | |||
selected: [], | |||
searchtext : "", | |||
@@ -45,13 +47,16 @@ const CreateMsgRouter = { | |||
}; | |||
}, | |||
computed:{ | |||
filteredDataArray() { | |||
filteredDataArray: function() { | |||
return this.taglist.filter((option) => { | |||
return option | |||
.toString() | |||
.toLowerCase() | |||
.indexOf(this.searchtext.toLowerCase()) >= 0 | |||
}) | |||
}, | |||
userName: function() { | |||
return 'User: '+auth.name; | |||
} | |||
}, | |||
methods: { | |||
@@ -62,8 +67,19 @@ const CreateMsgRouter = { | |||
createMsg: function () { | |||
var _subject = $("#subject").val(); | |||
var _message = $("#message").val(); | |||
var _tag = tagArray; | |||
var _user = auth.name != '' ? auth.name : $("#user").val(); | |||
var tmpArr = []; | |||
tagArray.forEach(function(tag) { | |||
console.info(tag); | |||
tmpArr.push(tag.replace(/#/g, '')); | |||
}); | |||
tagArray = tmpArr; | |||
var _tag = tagArray; | |||
var _user = auth.name.split(' '); | |||
if (_user.length < 2) { | |||
_user = _user[0]; | |||
} else { | |||
_user = _user[1] + ', ' + _user[0]; | |||
} | |||
//console.log("Message Created: " + _tag + " " + _message + " " + _user); | |||
$.ajax({ | |||
url: "api/msg", | |||
@@ -95,38 +111,26 @@ const CreateMsgRouter = { | |||
}) | |||
}, | |||
list_tags: function () { | |||
$.ajax({url: "api/tag/ids",method: "GET"}) | |||
.done(jd => { | |||
// NICHT SO wg. Vue: _messagelist = jd; | |||
console.log("DATA: "+data); | |||
if(data == ""){ | |||
_taglist.splice(0, _taglist.length); | |||
_taglist.push.apply(_taglist, jd); | |||
console.log("tag: jd: " + jd); | |||
for (var e in jd) { | |||
if (!_tags[jd[e]]) { | |||
get_insert_tag(jd[e]); | |||
} | |||
$.ajax({url: "api/tag/ids",method: "GET"}) | |||
.done(jd => { | |||
// NICHT SO wg. Vue: _messagelist = jd; | |||
console.log("DATA: "+data); | |||
if(data == ""){ | |||
_taglist.splice(0, _taglist.length); | |||
_taglist.push.apply(_taglist, jd); | |||
console.log("tag: jd: " + jd); | |||
for (var e in jd) { | |||
if (!_tags[jd[e]]) { | |||
get_insert_tag(jd[e]); | |||
} | |||
} | |||
}).fail(function (e, f, g) { | |||
console.log("err: " + e + f + g); | |||
}); | |||
} | |||
} | |||
}).fail(function (e, f, g) { | |||
console.log("err: " + e + f + g); | |||
}); | |||
}, | |||
}, | |||
mounted: function () { | |||
var userField = $('#user'); | |||
if (auth != null && auth.mail != '') { | |||
// userField.prop('placeholder',auth.name); | |||
var authorName = auth.name.split(' '); | |||
authorName = authorName[1] + ', ' + authorName[0]; | |||
userField.val(authorName); | |||
userField.prop('disabled',true); | |||
} else { | |||
userField.prop('placeholder','User'); | |||
userField.prop('disabled',false); | |||
} | |||
//this.list_tags(); | |||
if ($(this).bootstrapMaterialDesign) | |||
$(this).bootstrapMaterialDesign(); |
@@ -1,16 +1,26 @@ | |||
const HomeRouter = { | |||
template: ` | |||
<div> | |||
<div id="om-msg-cards" class="column pull-right-sm is-four-fifths-desktop"> | |||
<a id="escape-search-link" @click="goBackToDashboard">< zurück zu allen Einträgen</a> | |||
<b-button id="subscribe-btn" type="is-primary" @click="changeSubscribtion"><div id="btn-text"></div></b-button><br><br> | |||
<MsgCard | |||
v-for="id in messagelist.slice().reverse()" | |||
:key="id" | |||
:msg="messages[id] || {}" | |||
:isBookmark="bookmarkArray[id]" | |||
></MsgCard> | |||
</div> | |||
<div id="om-msg-cards" class="column pull-right-sm is-four-fifths-desktop"> | |||
<b-button id="escape-search-link" | |||
v-if="_isSearchActiv" | |||
@click="goBackToDashboard" | |||
icon-left="arrow-left" | |||
type="is-primary" | |||
@toggle-escape-search-link="toggleEscapeSearchLink" | |||
outlined> | |||
zurück zu allen Einträgen | |||
</b-button> | |||
<!--<b-button id="subscribe-btn" type="is-primary" v-if="_isSubscripeButtonActiv" @update-home-abo-button="updateHomeAboButton" @click="changeSubscribtion"> | |||
{{ subscripeTagName }} | |||
</b-button>--><br><br> | |||
<MsgCard | |||
v-for="id in messagelist.slice().reverse()" | |||
:key="id" | |||
:msg="messages[id] || {}" | |||
:isBookmark="bookmarkArray[id]"> | |||
</MsgCard> | |||
</div> | |||
</div>`, | |||
data: function () { | |||
return { | |||
@@ -18,34 +28,51 @@ const HomeRouter = { | |||
messages: _messages, | |||
isSearchActiv: _isSearchActiv, | |||
isSubscripeButtonActiv: _isSubscripeButtonActiv, | |||
isSubscriped: false, | |||
subscripeTagName: '', | |||
bookmarkArray: auth.bookmarks, | |||
vueRender: vueRender, | |||
}; | |||
}, | |||
methods: { | |||
updateHomeAboButton: function(content) { | |||
this.subscripeTagName = content; | |||
console.info( this.subscripeTagName); | |||
vueForceRender('key'); | |||
}, | |||
toggleEscapeSearchLink: function() { | |||
console.info('got called'); | |||
this.isSearchActive = !this.isSearchActive; | |||
vueForceRender('key'); | |||
console.info( this.isSearchActive); | |||
}, | |||
list_messages: function() { | |||
messages(); | |||
}, | |||
goBackToDashboard: function() { | |||
vueForceRender(); | |||
$("#escape-search-link").css("visibility", "hidden"); | |||
$("#subscribe-btn").css("visibility", "hidden"); | |||
_isSearchActiv = false; | |||
this.$emit('reset-searchtext',''); | |||
// $("#escape-search-link").css("visibility", "hidden"); | |||
// $("#subscribe-btn").css("visibility", "hidden"); | |||
_isSubscripeButtonActiv = false; | |||
vueForceRender('key'); | |||
vueForceRender('search'); | |||
}, | |||
changeSubscribtion: function(){ | |||
var btnString = $("#btn-text").text(); | |||
console.log(btnString); | |||
if($("#btn-text").hasClass("subscribed")){ | |||
$("#btn-text").removeClass("subscribed"); | |||
var newBtnString = btnString.replace(/deabonnieren/g, '') + "abonnieren"; | |||
if(this.isSubscriped){ | |||
this.subscripeTagName.replace(/deabonnieren/g, '') + "abonnieren"; | |||
//console.log(btnString); | |||
$("#btn-text").text(newBtnString); | |||
// $("#btn-text").text(newBtnString); | |||
}else{ | |||
$("#btn-text").addClass("subscribed"); | |||
var newBtnString = btnString.replace(/abonnieren/g, '') + "deabonnieren"; | |||
this.subscripeTagName.replace(/abonnieren/g, '') + "deabonnieren"; | |||
//console.log(newBtnString); | |||
$("#btn-text").text(newBtnString); | |||
// $("#btn-text").text(newBtnString); | |||
} | |||
this.isSubscriped = !this.isSubscriped; | |||
vueForceRender('key'); | |||
} | |||
}, |
@@ -1,7 +1,6 @@ | |||
// Global Variables | |||
// User | |||
var auth = {}, | |||
majorList = [], | |||
// Message | |||
_messagelist = [], | |||
@@ -14,19 +13,82 @@ var auth = {}, | |||
// Search | |||
_isSearchActiv = false, | |||
_isSubscripeButtonActiv = true, | |||
_isSubscripeButtonActiv = false, | |||
data = [], | |||
search_data = [], | |||
// Vue Rerender Key | |||
vueRender = { key:0 }; | |||
vueRender = { | |||
key: 0, | |||
search: 0, | |||
}; | |||
const authorRole = 'author'; | |||
const authorRole = 'author', | |||
majorList = [ | |||
{id:'B-AC',name:'Bachelor Angewandte Chemie'}, | |||
{id:'B-AMP',name:'Bachelor Angewandte Mathematik und Physik'}, | |||
{id:'B-TJ',name:'Bachelor Technikjournalismus/Technik-PR'}, | |||
{id:'B-AR',name:'Bachelor Architektur'}, | |||
{id:'B-BI',name:'Bachelor Bauingenieurwesen'}, | |||
{id:'B-BW',name:'Bachelor Betriebswirtschaft'}, | |||
{id:'B-BIO',name:'Bachelor Management in der Biobranche'}, | |||
{id:'B-IB',name:'Bachelor International Business'}, | |||
{id:'B-IBT',name:'Bachelor International Business and Technology'}, | |||
{id:'B-DE',name:'Bachelor Design'}, | |||
{id:'B-EI',name:'Bachelor Elektrotechnik und Informationstechnik'}, | |||
{id:'B-MED',name:'Bachelor Medizintechnik'}, | |||
{id:'B-MF',name:'Bachelor Mechatronik/Feinwerktechnik'}, | |||
{id:'B-ME',name:'Bachelor Media Engineering'}, | |||
{id:'B-IN',name:'Bachelor Informatik'}, | |||
{id:'B-MIN',name:'Bachelor Medieninformatik'}, | |||
{id:'B-WIN',name:'Bachelor Wirtschaftsinformatik'}, | |||
{id:'B-MB',name:'Bachelor Maschinenbau'}, | |||
{id:'B-EGT',name:'Bachelor Energie- und Gebäudetechnik'}, | |||
{id:'B-EBL',name:'Bachelor Soziale Arbeit: Erziehung und Bildung im Lebenslauf'}, | |||
{id:'B-SA',name:'Bachelor Soziale Arbeit'}, | |||
{id:'B-EPT',name:'Bachelor Energieprozesstechnik'}, | |||
{id:'B-VT',name:'Bachelor Verfahrenstechnik'}, | |||
{id:'B-WT',name:'Bachelor Werkstofftechnik'}, | |||
{id:'M-AMP',name:'Master Angewandte Mathematik und Physik'}, | |||
{id:'M-AR',name:'Master Architektur'}, | |||
{id:'M-BI',name:'Master Internationales Bauwesen'}, | |||
{id:'M-URB',name:'Master Urbane Mobilität (Verkehrsingenieurwesen)'}, | |||
{id:'M-BW',name:'Master Betriebswirtschaft'}, | |||
{id:'M-TAX',name:'Master Steuerberatung'}, | |||
{id:'M-WR',name:'Master Wirtschaftsrecht'}, | |||
{id:'M-IFE',name:'Master International Finance and Economics'}, | |||
{id:'M-IMA',name:'Master International Marketing'}, | |||
{id:'M-APR',name:'Master Applied Research in Engineering Sciences'}, | |||
{id:'M-SY',name:'Master Elektronische und Mechatronische Systeme'}, | |||
{id:'M-IN',name:'Master Informatik'}, | |||
{id:'M-MIN',name:'Master Medieninformatik'}, | |||
{id:'M-WIN',name:'Master Wirtschaftsinformatik'}, | |||
{id:'M-MB',name:'Master Maschinenbau'}, | |||
{id:'M-EE',name:'Master Energiemanagement und Energietechnik'}, | |||
{id:'M-GT',name:'Master Gebäudetechnik'}, | |||
{id:'M-SA',name:'Master Soziale Arbeit'}, | |||
{id:'M-VT',name:'Master Chemieingenieurwesen und Verfahrenstechnik'}, | |||
{id:'M-WT',name:'Master Werkstofftechnik'}, | |||
], | |||
facultyList = [ | |||
{id:'AC',name:'Angewandte Chemie'}, | |||
{id:'AMP',name:'Angewandte Mathematik, Physik und Allgemeinwissenschaften'}, | |||
{id:'AR',name:'Architektur'}, | |||
{id:'BI',name:'Bauingeneurwesen'}, | |||
{id:'BW',name:'Betriebswirtschaft'}, | |||
{id:'D',name:'Design'}, | |||
{id:'EFI',name:'Elektrotechnik Feinwerktechnik Informationstechnik'}, | |||
{id:'IN',name:'Informatik'}, | |||
{id:'MB-VS',name:'Maschinenbau und Versorgungstechnik'}, | |||
{id:'SW',name:'Sozialwissenschaften'}, | |||
{id:'VT',name:'Verfahrenstechnik'}, | |||
{id:'WT',name:'Werkstofftechnik'}, | |||
]; | |||
// Global Functions | |||
function vueForceRender() { | |||
if (vueRender.key >= 10) { | |||
vueRender.key = 0; | |||
function vueForceRender(keyName) { | |||
if (vueRender[keyName] >= 10) { | |||
vueRender[keyName] = 0; | |||
} | |||
vueRender.key++; | |||
vueRender[keyName]++; | |||
} |
@@ -1,46 +0,0 @@ | |||
majorList = [ | |||
{id:'B-AC',name:'Bachelor Angewandte Chemie'}, | |||
{id:'B-AMP',name:'Bachelor Angewandte Mathematik und Physik'}, | |||
{id:'B-TJ',name:'Bachelor Technikjournalismus/Technik-PR'}, | |||
{id:'B-AR',name:'Bachelor Architektur'}, | |||
{id:'B-BI',name:'Bachelor Bauingenieurwesen'}, | |||
{id:'B-BW',name:'Bachelor Betriebswirtschaft'}, | |||
{id:'B-BIO',name:'Bachelor Management in der Biobranche'}, | |||
{id:'B-IB',name:'Bachelor International Business'}, | |||
{id:'B-IBT',name:'Bachelor International Business and Technology'}, | |||
{id:'B-DE',name:'Bachelor Design'}, | |||
{id:'B-EI',name:'Bachelor Elektrotechnik und Informationstechnik'}, | |||
{id:'B-MED',name:'Bachelor Medizintechnik'}, | |||
{id:'B-MF',name:'Bachelor Mechatronik/Feinwerktechnik'}, | |||
{id:'B-ME',name:'Bachelor Media Engineering'}, | |||
{id:'B-IN',name:'Bachelor Informatik'}, | |||
{id:'B-MIN',name:'Bachelor Medieninformatik'}, | |||
{id:'B-WIN',name:'Bachelor Wirtschaftsinformatik'}, | |||
{id:'B-MB',name:'Bachelor Maschinenbau'}, | |||
{id:'B-EGT',name:'Bachelor Energie- und Gebäudetechnik'}, | |||
{id:'B-EBL',name:'Bachelor Soziale Arbeit: Erziehung und Bildung im Lebenslauf'}, | |||
{id:'B-SA',name:'Bachelor Soziale Arbeit'}, | |||
{id:'B-EPT',name:'Bachelor Energieprozesstechnik'}, | |||
{id:'B-VT',name:'Bachelor Verfahrenstechnik'}, | |||
{id:'B-WT',name:'Bachelor Werkstofftechnik'}, | |||
{id:'M-AMP',name:'Master Angewandte Mathematik und Physik'}, | |||
{id:'M-AR',name:'Master Architektur'}, | |||
{id:'M-BI',name:'Master Internationales Bauwesen'}, | |||
{id:'M-URB',name:'Master Urbane Mobilität (Verkehrsingenieurwesen)'}, | |||
{id:'M-BW',name:'Master Betriebswirtschaft'}, | |||
{id:'M-TAX',name:'Master Steuerberatung'}, | |||
{id:'M-WR',name:'Master Wirtschaftsrecht'}, | |||
{id:'M-IFE',name:'Master International Finance and Economics'}, | |||
{id:'M-IMA',name:'Master International Marketing'}, | |||
{id:'M-APR',name:'Master Applied Research in Engineering Sciences'}, | |||
{id:'M-SY',name:'Master Elektronische und Mechatronische Systeme'}, | |||
{id:'M-IN',name:'Master Informatik'}, | |||
{id:'M-MIN',name:'Master Medieninformatik'}, | |||
{id:'M-WIN',name:'Master Wirtschaftsinformatik'}, | |||
{id:'M-MB',name:'Master Maschinenbau'}, | |||
{id:'M-EE',name:'Master Energiemanagement und Energietechnik'}, | |||
{id:'M-GT',name:'Master Gebäudetechnik'}, | |||
{id:'M-SA',name:'Master Soziale Arbeit'}, | |||
{id:'M-VT',name:'Master Chemieingenieurwesen und Verfahrenstechnik'}, | |||
{id:'M-WT',name:'Master Werkstofftechnik'}, | |||
]; |
@@ -11,7 +11,7 @@ Vue.component('nav-router', { | |||
<i class="material-icons">search</i> | |||
</router-link> | |||
<router-link v-if="isAuthor" to="/createMessage" class="navbar-item is-primary is-expanded is-hidden-desktop"> | |||
<router-link v-if="auth.roles.author" to="/createMessage" class="navbar-item is-primary is-expanded is-hidden-desktop"> | |||
<i class="material-icons">add_circle</i> | |||
</router-link> | |||
@@ -37,7 +37,7 @@ Vue.component('nav-router', { | |||
<i class="material-icons">search</i> Search | |||
</router-link></li> | |||
<li><router-link v-if="isAuthor" to="/createMessage"> | |||
<li><router-link v-if="auth.roles.author" to="/createMessage"> | |||
<i class="material-icons">add_circle</i> Create Message | |||
</router-link></li> | |||
@@ -55,18 +55,9 @@ Vue.component('nav-router', { | |||
</div>`, | |||
data: function() { | |||
return { | |||
isAuthor: this.isAuthorCheck(), | |||
auth: auth, | |||
}; | |||
}, | |||
methods: { | |||
isAuthorCheck: function() { | |||
console.info(auth.roles.author === authorRole); | |||
return (auth.roles.author === authorRole); | |||
}, | |||
}, | |||
updated: function() { | |||
this.isAuthorChecked(); | |||
} | |||
}); | |||
const routes = [ |
@@ -11,7 +11,9 @@ Vue.component('profil-card', { | |||
<div class="profil-text"> | |||
<span style="font-size:120%; display:inline-block; margin: 0.8rem 0 0 0;"><b>{{ auth.name }}</b></span><br><br> | |||
<span style="font-size:90%; display:inline-block; margin: 0 0 0.8rem 0;"><b>{{ major }}</b></span> | |||
<span style="font-size:100%; display:inline-block; margin: 0 0 0.8rem 0;"><b>{{ labelMajorOrFaculty }}</b></span> | |||
<br> | |||
<span style="font-size:90%; display:inline-block; margin: 0 0 0.8rem 0;"><b>{{ majorOrFaculty }}</b></span> | |||
<br><br> | |||
</div> | |||
@@ -57,25 +59,45 @@ Vue.component('profil-card', { | |||
}; | |||
}, | |||
computed: { | |||
major: function() { | |||
majorOrFaculty: function() { | |||
// e.g. ST@B-ME;ST@EFI; | |||
var majorID = auth.type.split(';')[0].split('@')[1]; | |||
//console.info(majorID); | |||
//console.info(majorList); | |||
var majorName = 'Studiengang Unbekannt'; | |||
majorList.forEach(function(major) { | |||
if (major.id == majorID) { | |||
majorName = major.name; | |||
} | |||
}); | |||
return majorName; | |||
if (auth.roles.author) { | |||
var facultyID = auth.type.split(';'); | |||
console.info(facultyID[facultyID.length-2]); | |||
facultyID = facultyID[facultyID.length-2].split('@')[1]; | |||
var facultyName = ''; | |||
facultyList.forEach(function(faculty) { | |||
if (faculty.id == facultyID) { | |||
facultyName = faculty.name; | |||
} | |||
}); | |||
return facultyName; | |||
} else { | |||
var majorID = auth.type.split(';')[0].split('@')[1]; | |||
//console.info(majorID); | |||
//console.info(majorList); | |||
var majorName = 'Studiengang Unbekannt'; | |||
majorList.forEach(function(major) { | |||
if (major.id == majorID) { | |||
majorName = major.name; | |||
} | |||
}); | |||
return majorName; | |||
} | |||
}, | |||
labelMajorOrFaculty: function() { | |||
if (auth.roles.author) { | |||
return 'Fakultät:' | |||
} else { | |||
return 'Studiengang:' | |||
} | |||
} | |||
}, | |||
methods: { | |||
logout: function() { | |||
clearAuthState(); | |||
$.ajax({ url: "api/logout", method: "POST" }); | |||
vueForceRender(); | |||
vueForceRender('key'); | |||
router.push('/profil'); | |||
}, | |||
} |
@@ -8,30 +8,34 @@ Vue.component('search',{ | |||
:data="filteredDataArray" | |||
placeholder="suche..." | |||
icon="magnify" | |||
@reset-searchtext="resetSearchtext($event)" | |||
@select="option => selected = option"> | |||
</b-autocomplete> | |||
<button class="clearButton" @click="clear">x</button> | |||
</b-field> | |||
</form>`, | |||
data: function() { | |||
return{ | |||
return { | |||
searchtext: "", | |||
selected: [], | |||
taglist: data, | |||
}; | |||
}, | |||
computed:{ | |||
filteredDataArray() { | |||
filteredDataArray: function() { | |||
return this.taglist.filter((option) => { | |||
return option | |||
.toString() | |||
.toLowerCase() | |||
.indexOf(this.searchtext.toLowerCase()) >= 0 | |||
}) | |||
} | |||
}); | |||
}, | |||
}, | |||
methods: { | |||
getFilteredTags(text) { | |||
resetSearchtext: function(param) { | |||
this.searchtext = param; | |||
}, | |||
getFilteredTags: function(text) { | |||
this.taglist = data.filter((option) => { | |||
return option | |||
.toString() | |||
@@ -41,7 +45,12 @@ Vue.component('search',{ | |||
this.search(); | |||
}, | |||
search: function() { | |||
searching(this.searchtext); | |||
var btnString = ''; | |||
btnString = searching(this.searchtext, btnString); | |||
console.info(btnString); | |||
this.$emit('update-home-abo-button', btnString); | |||
vueForceRender('key'); | |||
}, | |||
saveTagsToArray: function() { | |||
tagArray = this.selected; | |||
@@ -69,13 +78,17 @@ Vue.component('search',{ | |||
}); | |||
}, | |||
clear: function() { | |||
//_isSearchActiv = false; | |||
this.searchtext = ""; | |||
this.list_messages(); | |||
//router.push('/files') | |||
//router.push('/home') | |||
$("#escape-search-link").css("visibility", "hidden"); | |||
$("#subscribe-btn").css("visibility", "hidden"); | |||
_isSearchActiv = false; | |||
_isSubscripeButtonActiv = false; | |||
this.$emit('toggle-escape-search-link'); | |||
vueForceRender('key'); | |||
console.info('done'); | |||
// $("#escape-search-link").css("visibility", "hidden"); | |||
// $("#subscribe-btn").css("visibility", "hidden"); | |||
}, | |||
}, | |||
mounted: function() { | |||
@@ -90,44 +103,46 @@ function get_insert_tag(id) { | |||
url: "api/tag/id/" + id, | |||
method: "GET" | |||
}).done(function(tag) { | |||
data.push("#" + tag.name); | |||
data.push('#'+tag.name); | |||
}).fail(function(e, f, g) { | |||
console.log("cannot load " + id + ".json: " + e + f + g); | |||
}) | |||
} | |||
function searching(searchtext) { | |||
function searching(searchtext,btnString) { | |||
_isSearchActiv = true; | |||
$("#escape-search-link").css("visibility", "visible"); | |||
// $("#escape-search-link").css("visibility", "visible"); | |||
//console.log(_tags); | |||
console.log(data); | |||
// console.log(data); | |||
if(data.indexOf(searchtext) > -1){ | |||
var btnString = "#" + searchtext.replace(/#/g, '') + " abonnieren"; | |||
$("#btn-text").text(btnString); | |||
$("#subscribe-btn").css("visibility", "visible"); | |||
btnString = searchtext + " abonnieren"; | |||
// $("#btn-text").text(btnString); | |||
// $("#subscribe-btn").css("visibility", "visible"); | |||
_isSubscripeButtonActiv = true; | |||
}else{ | |||
$("#subscribe-btn").css("visibility", "hidden"); | |||
// $("#subscribe-btn").css("visibility", "hidden"); | |||
_isSubscripeButtonActiv = false; | |||
} | |||
$.ajax({ | |||
url: "api/msg/search/" + searchtext.replace(/#/g, ''), | |||
method: "GET" | |||
}).done(jd => { | |||
// NICHT SO wg. Vue: _messagelist = jd; | |||
_messagelist.splice(0, _messagelist.length); | |||
_messagelist.push.apply(_messagelist, jd); | |||
//console.log("jd: "+jd); | |||
for (var e in jd) { | |||
if (!_messages[jd[e]]) { | |||
get_insert_message(jd[e]); | |||
if (searchtext !== '') { | |||
$.ajax({ | |||
url: "api/msg/search/" + searchtext.replace(/#/g, ''), | |||
method: "GET" | |||
}).done(jd => { | |||
// NICHT SO wg. Vue: _messagelist = jd; | |||
_messagelist.splice(0, _messagelist.length); | |||
_messagelist.push.apply(_messagelist, jd); | |||
//console.log("jd: "+jd); | |||
for (var e in jd) { | |||
if (!_messages[jd[e]]) { | |||
get_insert_message(jd[e]); | |||
} | |||
} | |||
} | |||
}).fail(function(e, f, g) { | |||
console.log("searching: err: " + e + f + g); | |||
}) | |||
}).fail(function(e, f, g) { | |||
console.log("searching: err: " + e + f + g); | |||
}) | |||
} | |||
return btnString; | |||
} | |||
function messages() { |
@@ -243,10 +243,10 @@ button.clearButton { | |||
} | |||
#subscribe-btn { | |||
float: right; | |||
visibility: hidden; | |||
-visibility: hidden; | |||
} | |||
#escape-search-link { | |||
visibility: hidden; | |||
-visibility: hidden; | |||
} | |||
#bockmark-not-active { | |||
visibility: visible; |
@@ -287,10 +287,10 @@ button.clearButton{ | |||
#subscribe-btn{ | |||
float: right; | |||
visibility: hidden; | |||
-visibility: hidden; | |||
} | |||
#escape-search-link{ | |||
visibility: hidden; | |||
-visibility: hidden; | |||
} | |||
#bockmark-not-active{ | |||
visibility: visible; |
@@ -64,7 +64,7 @@ app.use(session({ | |||
mongooseConnection: mong.connection, | |||
ttl: 30 * 24 * 3600, | |||
}), // mongoose + connect-mongo | |||
//store: new MemoryStore ({checkPeriod: 24*3600*1000}), // memorystore | |||
// store: new MemoryStore ({checkPeriod: 24*3600*1000}), // memorystore | |||
})); | |||
// Favicon for Desktop | |||
@@ -112,7 +112,7 @@ app.use('/api', api_routes); | |||
app.use(express.static(__dirname + '/public')); | |||
// Other stuff is NOT authorized unless logged in | |||
app.use (authorize.genCheckAuthorized ('user')); | |||
//app.use (authorize.genCheckAuthorized ('user')); | |||
// No error so far? Then it's a 404! | |||
app.use(function (req, res, next) { |
@@ -14,13 +14,13 @@ const clientVisibleSession = { user: true, name: true, type: true, mail: true, r | |||
// Return user role, query from found.mail | |||
function getUserRole(found) { | |||
var roles = "user"; | |||
var roles = "user:true"; | |||
var mail = found.mail; | |||
if (!/\d/.test(mail)) { | |||
// Mail contains no number | |||
roles += ',"author"'; | |||
roles += ',"author:true"'; | |||
} | |||
return roles; | |||
return ('{'+roles+'}'); | |||
} | |||
// Fill in session object | |||
@@ -37,6 +37,7 @@ function fillSession (req, user, roles, cb) { | |||
req.session.user = user._id; | |||
} | |||
req.session.roles = roles; | |||
console.info(req.session); | |||
} | |||
return cb (err); | |||
}); | |||
@@ -126,9 +127,9 @@ const authorization = { | |||
Users.findById (req.body.user) .exec (function (err, entry) { | |||
// If there is a local user AND it has a password associated, test against this, and only this | |||
if (entry != null && entry.pwd) { | |||
console.info(entry); | |||
if (crypto.checkLocalAuth (entry, req.body.pwd)) { | |||
console.info(entry.roles); | |||
return fillSession (req, entry, JSON.stringify(entry.roles), returnSession); | |||
return fillSession (req, entry, entry.roles, returnSession); | |||
} | |||
return returnError (); | |||
} | |||
@@ -150,7 +151,7 @@ const authorization = { | |||
entry.type = found.type; | |||
if (! entry.orclgender || entry.orclgender === "") | |||
entry.orclgender = found.orclgender; | |||
return fillSession (req, entry, entry.roles.length > 0 ? common.arrayToHash(entry.roles) : {user:true}, returnSession); | |||
return fillSession (req, entry, entry.roles.length > 0 ? entry.roles : {user:true}, returnSession); | |||
} | |||
// Otherwise create standard user entry |
@@ -81,35 +81,6 @@ const dbs = { | |||
}); | |||
}, | |||
}, | |||
"usr/bookmark/ids": { | |||
/* GET /api/usr/bookmark/ids [no args] | |||
* -> Array of message schema object ids | |||
* Get bookmark message ids | |||
*/ | |||
get: function (req, res) { | |||
model.Users.find({ | |||
}, | |||
function (err, result) { | |||
if (err) { | |||
return res.status(401).json(err.message); | |||
} else { | |||
var parsed = []; | |||
for (var i in result) { | |||
parsed.push(result[i].bookmarks); | |||
} | |||
console.log("bookmarks:" + JSON.stringify(parsed)); | |||
res.send(parsed); | |||
} | |||
if (result == null) { | |||
return res.status(500).json("Can save bookmark.") | |||
} | |||
}); | |||
}, | |||
}, | |||
"msg": { | |||
/* POST /api/msg | |||
* <- Message schema | |||
@@ -190,6 +161,32 @@ const dbs = { | |||
}); | |||
}, | |||
}, | |||
"usr/bookmark/ids": { | |||
/* GET /api/usr/bookmark/ids [no args] | |||
* -> Array of message schema object ids | |||
* Get bookmark message ids | |||
*/ | |||
get: function (req, res) { | |||
model.Users.find({ | |||
}, | |||
function (err, result) { | |||
if (err) { | |||
return res.status(401).json(err.message); | |||
} else { | |||
var parsed = []; | |||
for (var i in result) { | |||
parsed.push(result[i].bookmarks); | |||
} | |||
console.log("bookmarks:" + JSON.stringify(parsed)); | |||
res.send(parsed); | |||
} | |||
if (result == null) { | |||
return res.status(500).json("Can save bookmark.") | |||
} | |||
}); | |||
}, | |||
}, | |||
"usr/id": { | |||
params: ":id", | |||
/* GET /api/usr/[usr-id] | |||
@@ -308,7 +305,7 @@ const dbs = { | |||
* Local db: common.config.dbLocalConn | |||
* TH db: common.config.dbConn | |||
*/ | |||
common.mongoose.connect(common.config.dbLocalConn, { | |||
common.mongoose.connect(common.config.dbConn, { | |||
useNewUrlParser: true | |||
}).then(() => { | |||
console.log("Database connected successfully."); | |||
@@ -380,7 +377,7 @@ const dbs = { | |||
bookmarks: { type: [String], | |||
_comment: "" }, | |||
sessionid: { type: String }, | |||
roles: { type: [String], required: true, | |||
roles: { type: String, required: true, | |||
_comment: "" }, | |||
}); | |||
model.Users = common.mongoose.model('users', userSchema); | |||
@@ -389,18 +386,4 @@ const dbs = { | |||
models: model, | |||
}; | |||
/* | |||
app.get ("/api/msg/search/:phrase", function (req, res) { | |||
Message.find ({$text: {$search: req.params.phrase}) .then (function (err, results){ | |||
if (err) { | |||
console.log (err); | |||
res .status(404) .json (err); | |||
} else { | |||
console.log(JSON.stringify(results)); | |||
res.json(results); | |||
} | |||
}); | |||
}); | |||
*/ | |||
module.exports = dbs; |
@@ -1,5 +1,5 @@ | |||
{ | |||
"dbConn": "mongodb://127.0.0.1:27017/om", | |||
"dbConn": "mongodb://om:aeg1phuKeDaixese@127.0.0.1:27017/om", | |||
"dbLocalConn": "mongodb://localhost:27017/omdb", | |||
"dbUser": "om", | |||
"dbPwd": "aeg1phuKeDaixese", |