Browse Source

Merge remote-tracking branch 'origin/developer' into developer

# Conflicts:
#	public/routes/home.js
#	public/style/style.css
#	public/style/style.less
master
Xenia Gruenzinger 5 years ago
parent
commit
bac8786ab4

+ 2
- 4
mong_usr.js View File

db.users.insert([ db.users.insert([
// author,OHMNEWS2019 // author,OHMNEWS2019
{"_id":"author","name":"Test Author","type":"author","roles":["user","author"],"hash":"sha256","salt":"cy5CkPrplcEze6o4psURhw==","pwd":"Gc8ozlxjEGITkS+fW9tz2xLROzws44s04EOCWuP04qE=","abos":["wichtig","th"],"bookmarks":["th"],},
{"_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 // admin,oZuse1
{"_id":"admin","name":"Test Admin","type":"admin","roles":["user","author","admin"],"hash":"sha256","salt":"PoIUHbDp7tP34ji31iQ0zw==","pwd":"mJpIfIksYs6LJJwYRBemFKqR6TacsSl2E0ZtpO1GMuk=","abos":["wichtig","th"],"bookmarks":["wichtig"],},
{"_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"],},
]) ])


db.users.insert({"name":"mustermannmax", "roles":["user"],"abos":[],"bookmarks":[]})

//var c = require('./server/crypto.js'), //var c = require('./server/crypto.js'),
// e = {"_id":"writer","hash":"sha256"}; // e = {"_id":"writer","hash":"sha256"};
//c.fillLocalAuth(e,"pwd"); //c.fillLocalAuth(e,"pwd");

+ 2
- 13
public/index.html View File

<div class="om-content"> <div class="om-content">
<div id=xxx></div> <div id=xxx></div>
<nav-router></nav-router> <nav-router></nav-router>
<router-view :key="auth.user"></router-view>
<router-view :key="vueRender.key"></router-view>
</div> </div>
</div> </div>


<script> <script>

new Vue({ new Vue({
router, router,
el: '#api', el: '#api',
components: {
// Locally registered components
},
data: { data: {
// Locally registered variables // Locally registered variables
auth: auth,
},

computed:{
// Methods to change data appearance, does cache results
},
methods: {
// Methods to change data content, run always again
vueRender : vueRender,
}, },
}); });
</script> </script>

+ 3
- 5
public/routes/auth.js View File

function successful_login(resData) { function successful_login(resData) {
fillAuthState(resData); fillAuthState(resData);
// updateUserInDB(); // updateUserInDB();
auth.abos = [];
auth.bookmarks = [];
console.info("Correct credentials"); console.info("Correct credentials");
this.closeLoginPanel; this.closeLoginPanel;


function successful_login(res) { function successful_login(res) {
console.info("Re-Auth: Correct credentials"); console.info("Re-Auth: Correct credentials");
this.closeLoginPanel; this.closeLoginPanel;
vueForceRender();


//console.log(res); //console.log(res);
router.push('/home') router.push('/home')
console.log(err); console.log(err);
} }
}, },
logout: function() {
clearAuthState();
$.ajax({ url: "api/logout", method: "POST" });
this.closeLoginPanel;
},
}, },
}); });

+ 16
- 2
public/routes/bookmark.js View File



}, },
getMessages: function(){ getMessages: function(){
var _usrid = "5d360f06b8f3ce67d12ccc92";
var arr = auth.bookmarks;
console.log("arr: "+arr+" auth.bookmarks: "+auth.bookmarks);
_messagelist.splice(0, _messagelist.length);
_messagelist.push.apply(_messagelist, arr);
for (var e in arr) {
if (!_messages[arr[e]]) {
//arr[e] =arr[e].replace(/\[/g, '').replace(/\"/g, '').replace(/\]/g, '')
console.log("getinsertmessage: "+ arr[e]);
get_insert_message(arr[e]);
}
}



/*var _usrid = auth.user;
$.ajax({ $.ajax({
url: "api/usr/id/" + _usrid, url: "api/usr/id/" + _usrid,
method: "GET" method: "GET"
function have_error(err) { function have_error(err) {
console.log("error: " + err.responseText); console.log("error: " + err.responseText);
console.log(err); console.log(err);
}
}*/
} }
}, },
mounted: function (){ mounted: function (){

+ 4
- 1
public/routes/home.js View File

v-for="id in messagelist.slice().reverse()" v-for="id in messagelist.slice().reverse()"
:key="id" :key="id"
:msg="messages[id] || {}" :msg="messages[id] || {}"
:isBookmark="bookmarkArray[id]"
></MsgCard> ></MsgCard>
</div> </div>
</div>`, </div>`,
messagelist: _messagelist, messagelist: _messagelist,
messages: _messages, messages: _messages,
isSearchActiv: _isSearchActiv, isSearchActiv: _isSearchActiv,
isSubscripeButtonActiv: _isSubscripeButtonActiv
isSubscripeButtonActiv: _isSubscripeButtonActiv,
bookmarkArray: auth.bookmarks,
}; };
}, },
methods: { methods: {


} }
} }

}, },
mounted: function () { mounted: function () {
this.list_messages(); this.list_messages();

+ 12
- 1
public/routes/initGlobals.js View File

_isSearchActiv = false, _isSearchActiv = false,
_isSubscripeButtonActiv = true, _isSubscripeButtonActiv = true,
data = [], data = [],
search_data = []
search_data = [],


// Vue Rerender Key
vueRender = { key:0 };


const authorRole = 'author';

// Global Functions
function vueForceRender() {
if (vueRender.key >= 10) {
vueRender.key = 0;
}
vueRender.key++;
}

+ 53
- 24
public/routes/msgCard.js View File

Vue.component('MsgCard', { Vue.component('MsgCard', {
template: `<div class="om-card card">
<h6 class="msg-head">
template: `
<div class="om-card card">
<h6 class="msg-head">
<b>{{ msg.subject }}</b> <b>{{ msg.subject }}</b>
<div id="msgid">{{msg._id}}</div>
<div id="msgid" >{{msg._id}}</div>
<img src="favicon.ico" width=20px height=20px> <img src="favicon.ico" width=20px height=20px>
</h6>
{{ msg.message }}<br>
<a v-for="tag in msg.tag" @click="filterForTag(tag)">#{{ tag }} </a>
<br>
</p>
<div class="om-card-footer"> <div class="om-user-line">
<i class="material-icons">account_circle</i>
Erstellt von {{ msg.user }}</div>
<i class="material-icons" @click="myFilter(msg._id)" v-if="!isActive">bookmark_border</i>
<i class="material-icons" @click="myFilter(msg._id)" v-else="isActive">bookmark</i>
</div></div>`,
props: ['msg'],
</h6>
{{ msg.message }}<br>
<a v-for="tag in msg.tag" @click="filterForTag(tag)">#{{ tag }} </a>
<br>
<div class="om-card-footer">
<div class="om-user-line">
<i class="material-icons">account_circle</i>
Erstellt von {{ msg.user }}
</div>
<i id="bockmark-not-active" class="material-icons" :key="isActive" @click="myFilter(msg._id)" v-if="!isActive">bookmark_border</i>
<i id="bockmark-active" class="material-icons" :key="isActive" @click="myFilter(msg._id)" v-else>bookmark</i>
</div>
</div>`,
props: ['msg', 'isBookmark'],


data: function () { data: function () {
return { return {
isActive: false,
isActive: this.isBookmark,
isActive_: 0,
msgid: this.msg._id,
bookmarkArray: auth.bookmarks,
}; };
}, },


methods: { methods: {
myFilter: function(_messageid) {
myFilter: function (_messageid) {
//var _messageid = $("#msgid").text(); //var _messageid = $("#msgid").text();
if (this.isActive == true) {
var index = this.bookmarkArray.indexOf(_messageid);


var _bookmark = auth.bookmarks;
_bookmark.push(_messageid);
console.log("msgid"+_bookmark);
var _userid = "5d360f06b8f3ce67d12ccc92";
if (index > -1) {
this.bookmarkArray.splice(index, 1);
}
this.isActive = false;
} else {
console.log("_messsageid: "+_messageid+" bookmarks: "+this.bookmarkArray);
this.bookmarkArray.push(_messageid);
this.isActive =true;
}
/*console.log("msgid"+_bookmark);
var _userid = auth.user;
this.isActive = !this.isActive; this.isActive = !this.isActive;
if(this.isActive){ if(this.isActive){
$.ajax({ $.ajax({
console.log("error: " + err.responseText); console.log("error: " + err.responseText);
console.log(err); console.log(err);
} }
}
}*/
}, },
filterForTag: function(tag) {
console.log("link: " +tag);
filterForTag: function (tag) {
console.log("link: " + tag);
searching(tag); searching(tag);
}, },
isBookmarkActive: function (msgid) {
//console.log("isBookmarkActive(): " + msgid);
if (this.bookmarkArray.indexOf(msgid) > -1) {
// $("#bockmark-not-active").css("visibility","hidden");
// $("#bockmark-active").css("visibility","visible");
this.isActive = true;
//console.log("isBookmarkActive(): " + this.isActive);
this.isActive_ = 1;

}
}
},
beforeMount: function () {
//this.isBookmarkActive();
} }
}); });

+ 16
- 2
public/routes/navRoutes.js View File

<i class="material-icons">search</i> <i class="material-icons">search</i>
</router-link> </router-link>


<router-link to="/createMessage" class="navbar-item is-primary is-expanded is-hidden-desktop">
<router-link v-if="isAuthor" to="/createMessage" class="navbar-item is-primary is-expanded is-hidden-desktop">
<i class="material-icons">add_circle</i> <i class="material-icons">add_circle</i>
</router-link> </router-link>


<i class="material-icons">search</i> Search <i class="material-icons">search</i> Search
</router-link></li> </router-link></li>


<li><router-link to="/createMessage">
<li><router-link v-if="isAuthor" to="/createMessage">
<i class="material-icons">add_circle</i> Create Message <i class="material-icons">add_circle</i> Create Message
</router-link></li> </router-link></li>


</div> </div>
</div> </div>
</div>`, </div>`,
data: function() {
return {
isAuthor: this.isAuthorCheck(),
};
},
methods: {
isAuthorCheck: function() {
console.info(auth.roles.author === authorRole);
return (auth.roles.author === authorRole);
},
},
updated: function() {
this.isAuthorChecked();
}
}); });


const routes = [ const routes = [

+ 15
- 15
public/routes/profil.js View File

template: ` template: `
<div> <div>
<div class="column pull-right-sm is-four-fifths-desktop"> <div class="column pull-right-sm is-four-fifths-desktop">
<div v-if="isAuth">
<profil-card></profil-card>
</div>
<div v-else>
<button class="button is-primary is-medium"
@click="isLPVisible = true">
Login
</button>
<div v-if="isAuth">
<profil-card></profil-card>
</div>
<div v-else>
<button class="button is-primary is-medium"
@click="isLPVisible = true">
Login
</button>


<b-modal :active.sync="isLPVisible"
@close-login-panel="closeLoginPanel"
@show-login-panel="showLoginPanel"
has-modal-card>
<login-panel></login-panel>
</b-modal>
</div>
<b-modal :active.sync="isLPVisible"
@close-login-panel="closeLoginPanel"
@show-login-panel="showLoginPanel"
has-modal-card>
<login-panel></login-panel>
</b-modal>
</div>
</div> </div>
</div>`, </div>`,
data: function () { data: function () {

+ 6
- 5
public/routes/profilCard.js View File

<hr class="first"> <hr class="first">


<div class="btnprofil"> <div class="btnprofil">
<button @click="isCardModalActive = true"><b>Abonniert: <br/>{{ abo }}</b> <br/></button>
<button @click="$router.push('/bookmark')"><b>Gespeichert:<br/> {{ saved }}</b><br/></button>
<button @click="isCardModalActive = true"><b>Abonniert: <br/>{{ abos }}</b> <br/></button>
<button @click="$router.push('/bookmark')"><b>Gespeichert:<br/> {{ bookmarks }}</b><br/></button>
</div> </div>


<section> <section>
<b-modal :active.sync="isCardModalActive" :width="600" scroll="keep"> <b-modal :active.sync="isCardModalActive" :width="600" scroll="keep">
<div class="card"> <div class="card">
<header class="modal-card-head"> <header class="modal-card-head">
<p class="modal-card-title">Abonnierte Kanäle</p>
<p class="modal-card-title">Abonnierte Tags</p>
</header> </header>
<div class="card-content"> <div class="card-content">
<div class="content"> <div class="content">
data: function () { data: function () {
return { return {
auth: auth, auth: auth,
abo: 7,
saved: 3,
abos: auth.abos ? auth.abos.length : '-',
bookmarks: auth.bookmarks ? auth.bookmarks.length : '-',
isCardModalActive: false, isCardModalActive: false,
}; };
}, },
logout: function() { logout: function() {
clearAuthState(); clearAuthState();
$.ajax({ url: "api/logout", method: "POST" }); $.ajax({ url: "api/logout", method: "POST" });
vueForceRender();
router.push('/profil'); router.push('/profil');
}, },
} }

+ 5
- 0
public/style/style.css View File

float: right; float: right;
} }
} }
<<<<<<< HEAD
#subscribe-btn { #subscribe-btn {
float: right; float: right;
visibility: hidden; visibility: hidden;
} }
#escape-search-link { #escape-search-link {
visibility: hidden; visibility: hidden;
=======
#bockmark-not-active {
visibility: visible;
>>>>>>> origin/developer
} }

+ 6
- 0
public/style/style.less View File

} }
#escape-search-link{ #escape-search-link{
visibility: hidden; visibility: hidden;

#bockmark-not-active{
visibility: visible;
}
#bockmark-active{
//visibility: hidden;
} }

+ 17
- 7
server/authorization.js View File

const serverVisibleSession = { user: true, name: true, type: true, mail: true, roles: true, gender: true, deactivated: true, host: true }; const serverVisibleSession = { user: true, name: true, type: true, mail: true, roles: true, gender: true, deactivated: true, host: true };
const clientVisibleSession = { user: true, name: true, type: true, mail: true, roles: true, gender: true }; const clientVisibleSession = { user: true, name: true, type: true, mail: true, roles: true, gender: true };


// Return user role, query from found.mail
function getUserRole(found) {
var roles = "user";
var mail = found.mail;
if (!/\d/.test(mail)) {
// Mail contains no number
roles += ',"author"';
}
return roles;
}


// Fill in session object // Fill in session object
function fillSession (req, user, roles, cb) { function fillSession (req, user, roles, cb) {
req.session.regenerate (function (err) { req.session.regenerate (function (err) {
if (user !== undefined && ! err) { if (user !== undefined && ! err) {
common.shallowCopy (user, serverVisibleSession, {roles: true}, req.session); common.shallowCopy (user, serverVisibleSession, {roles: true}, req.session);
console.info(req.session);
// console.info(req.session);
if (user._id) { if (user._id) {
req.session.user = user._id; req.session.user = user._id;
} }


// Save found user into DB, if not already exists // Save found user into DB, if not already exists
function saveFoundToDB(found, cb) { function saveFoundToDB(found, cb) {
console.info(found);
// console.info(found);
Users.findById(found.user) Users.findById(found.user)
.exec(function(err, result){ .exec(function(err, result){
if (err) { if (err) {
mail: found.mail, mail: found.mail,
type: found.type, type: found.type,
gender: found.gender, gender: found.gender,
// abos: '',
// bookmarks: '',
roles: 'user',
abos: '',
bookmarks: '',
roles: getUserRole(found),
}, function(err, done) { }, function(err, done) {
if (err) { if (err) {
console.error("User creation: Failed"); console.error("User creation: Failed");
console.error(err); console.error(err);
} else { } else {
console.info("New User created!");
console.info("User created: "+ found.user);
} }
if (done == null) { if (done == null) {
console.error("Can not create user."); console.error("Can not create user.");
console.error(err); console.error(err);
} }
}); });
console.info(req.session);
// console.info(req.session);
return res.json ({}); return res.json ({});
}); });
}, },

Loading…
Cancel
Save