add fields for dms
This commit is contained in:
parent
2b27a98132
commit
2161fe11a2
|
@ -160,7 +160,7 @@ const Chat = ({
|
||||||
‣
|
‣
|
||||||
</button>
|
</button>
|
||||||
<select
|
<select
|
||||||
style={{ flexGrow: 0 }}
|
style={{ width: 50 }}
|
||||||
onChange={(evt) => {
|
onChange={(evt) => {
|
||||||
const sel = evt.target;
|
const sel = evt.target;
|
||||||
setChannel(sel.options[sel.selectedIndex].value);
|
setChannel(sel.options[sel.selectedIndex].value);
|
||||||
|
|
|
@ -30,10 +30,12 @@ export default async function getMe(user) {
|
||||||
delete userdata.mailVerified;
|
delete userdata.mailVerified;
|
||||||
delete userdata.mcVerified;
|
delete userdata.mcVerified;
|
||||||
|
|
||||||
const channels = [...chatProvider.defaultChannels];
|
userdata.channels = [
|
||||||
|
...chatProvider.defaultChannels,
|
||||||
|
...userdata.channels,
|
||||||
|
];
|
||||||
|
|
||||||
userdata.canvases = canvases;
|
userdata.canvases = canvases;
|
||||||
userdata.channels = channels;
|
|
||||||
|
|
||||||
return userdata;
|
return userdata;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,7 @@ class Minecraft {
|
||||||
user.minecraftname = minecraftname;
|
user.minecraftname = minecraftname;
|
||||||
const reguser = await RegUser.findOne({ where: { minecraftid } });
|
const reguser = await RegUser.findOne({ where: { minecraftid } });
|
||||||
if (reguser && reguser.mcVerified) {
|
if (reguser && reguser.mcVerified) {
|
||||||
user.id = reguser.id;
|
user.setRegUser(reguser);
|
||||||
user.regUser = reguser;
|
|
||||||
reguser.update({ minecraftname });
|
reguser.update({ minecraftname });
|
||||||
}
|
}
|
||||||
this.online[minecraftid] = user;
|
this.online[minecraftid] = user;
|
||||||
|
@ -86,7 +85,7 @@ class Minecraft {
|
||||||
if (reguser && reguser.mcVerified) {
|
if (reguser && reguser.mcVerified) {
|
||||||
user.id = reguser.id;
|
user.id = reguser.id;
|
||||||
user.minecraftname = reguser.minecraftname;
|
user.minecraftname = reguser.minecraftname;
|
||||||
user.regUser = reguser;
|
user.setRegUser(reguser);
|
||||||
} else {
|
} else {
|
||||||
user.minecraftname = minecraftid;
|
user.minecraftname = minecraftid;
|
||||||
}
|
}
|
||||||
|
@ -110,7 +109,7 @@ class Minecraft {
|
||||||
RegUser.findOne({ where: { minecraftname } }).then((reguser) => {
|
RegUser.findOne({ where: { minecraftname } }).then((reguser) => {
|
||||||
if (reguser && reguser.mcVerified) {
|
if (reguser && reguser.mcVerified) {
|
||||||
user.id = reguser.id;
|
user.id = reguser.id;
|
||||||
user.regUser = reguser;
|
user.setRegUser(reguser);
|
||||||
// this.online[reguser.minecraftid] = user;
|
// this.online[reguser.minecraftid] = user;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -35,11 +35,7 @@ passport.deserializeUser(async (req, id, done) => {
|
||||||
},
|
},
|
||||||
}).then((reguser) => {
|
}).then((reguser) => {
|
||||||
if (reguser) {
|
if (reguser) {
|
||||||
user.regUser = reguser;
|
user.setRegUser(reguser);
|
||||||
user.id = id;
|
|
||||||
for (let i = 0; i < reguser.channel.length; i += 1) {
|
|
||||||
user.channelIds.push(reguser.channel[i].id);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
user.id = null;
|
user.id = null;
|
||||||
}
|
}
|
||||||
|
@ -67,7 +63,13 @@ passport.use(new JsonStrategy({
|
||||||
const query = (nameoremail.indexOf('@') !== -1)
|
const query = (nameoremail.indexOf('@') !== -1)
|
||||||
? { email: nameoremail }
|
? { email: nameoremail }
|
||||||
: { name: nameoremail };
|
: { name: nameoremail };
|
||||||
RegUser.findOne({ where: query }).then((reguser) => {
|
RegUser.findOne({
|
||||||
|
include: {
|
||||||
|
model: Channel,
|
||||||
|
as: 'channel',
|
||||||
|
},
|
||||||
|
where: query,
|
||||||
|
}).then((reguser) => {
|
||||||
if (!reguser) {
|
if (!reguser) {
|
||||||
return done(null, false, { message: 'Name or Email does not exist!' });
|
return done(null, false, { message: 'Name or Email does not exist!' });
|
||||||
}
|
}
|
||||||
|
@ -75,7 +77,7 @@ passport.use(new JsonStrategy({
|
||||||
return done(null, false, { message: 'Incorrect password!' });
|
return done(null, false, { message: 'Incorrect password!' });
|
||||||
}
|
}
|
||||||
const user = new User(reguser.id);
|
const user = new User(reguser.id);
|
||||||
user.regUser = reguser;
|
user.setRegUser(reguser);
|
||||||
user.updateLogInTimestamp();
|
user.updateLogInTimestamp();
|
||||||
return done(null, user);
|
return done(null, user);
|
||||||
});
|
});
|
||||||
|
@ -93,15 +95,33 @@ async function oauthLogin(email, name, discordid = null) {
|
||||||
throw new Error('You don\'t have a mail set in your account.');
|
throw new Error('You don\'t have a mail set in your account.');
|
||||||
}
|
}
|
||||||
name = sanitizeName(name);
|
name = sanitizeName(name);
|
||||||
let reguser = await RegUser.findOne({ where: { email } });
|
let reguser = await RegUser.findOne({
|
||||||
|
include: {
|
||||||
|
model: Channel,
|
||||||
|
as: 'channel',
|
||||||
|
},
|
||||||
|
where: { email },
|
||||||
|
});
|
||||||
if (!reguser) {
|
if (!reguser) {
|
||||||
reguser = await RegUser.findOne({ where: { name } });
|
reguser = await RegUser.findOne({
|
||||||
|
include: {
|
||||||
|
model: Channel,
|
||||||
|
as: 'channel',
|
||||||
|
},
|
||||||
|
where: { name },
|
||||||
|
});
|
||||||
while (reguser) {
|
while (reguser) {
|
||||||
// name is taken by someone else
|
// name is taken by someone else
|
||||||
// eslint-disable-next-line max-len
|
// eslint-disable-next-line max-len
|
||||||
name = `${name.substring(0, 15)}-${Math.random().toString(36).substring(2, 10)}`;
|
name = `${name.substring(0, 15)}-${Math.random().toString(36).substring(2, 10)}`;
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
reguser = await RegUser.findOne({ where: { name } });
|
reguser = await RegUser.findOne({
|
||||||
|
include: {
|
||||||
|
model: Channel,
|
||||||
|
as: 'channel',
|
||||||
|
},
|
||||||
|
where: { name },
|
||||||
|
});
|
||||||
}
|
}
|
||||||
reguser = await RegUser.create({
|
reguser = await RegUser.create({
|
||||||
email,
|
email,
|
||||||
|
@ -114,7 +134,7 @@ async function oauthLogin(email, name, discordid = null) {
|
||||||
reguser.update({ discordid });
|
reguser.update({ discordid });
|
||||||
}
|
}
|
||||||
const user = new User(reguser.id);
|
const user = new User(reguser.id);
|
||||||
user.regUser = reguser;
|
user.setRegUser(reguser);
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,15 +213,33 @@ passport.use(new RedditStrategy({
|
||||||
let name = sanitizeName(profile.name);
|
let name = sanitizeName(profile.name);
|
||||||
// reddit needs an own login strategy based on its id,
|
// reddit needs an own login strategy based on its id,
|
||||||
// because we can not access it's mail
|
// because we can not access it's mail
|
||||||
let reguser = await RegUser.findOne({ where: { redditid } });
|
let reguser = await RegUser.findOne({
|
||||||
|
include: {
|
||||||
|
model: Channel,
|
||||||
|
as: 'channel',
|
||||||
|
},
|
||||||
|
where: { redditid },
|
||||||
|
});
|
||||||
if (!reguser) {
|
if (!reguser) {
|
||||||
reguser = await RegUser.findOne({ where: { name } });
|
reguser = await RegUser.findOne({
|
||||||
|
include: {
|
||||||
|
model: Channel,
|
||||||
|
as: 'channel',
|
||||||
|
},
|
||||||
|
where: { name },
|
||||||
|
});
|
||||||
while (reguser) {
|
while (reguser) {
|
||||||
// name is taken by someone else
|
// name is taken by someone else
|
||||||
// eslint-disable-next-line max-len
|
// eslint-disable-next-line max-len
|
||||||
name = `${name.substring(0, 15)}-${Math.random().toString(36).substring(2, 10)}`;
|
name = `${name.substring(0, 15)}-${Math.random().toString(36).substring(2, 10)}`;
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
reguser = await RegUser.findOne({ where: { name } });
|
reguser = await RegUser.findOne({
|
||||||
|
include: {
|
||||||
|
model: Channel,
|
||||||
|
as: 'channel',
|
||||||
|
},
|
||||||
|
where: { name },
|
||||||
|
});
|
||||||
}
|
}
|
||||||
reguser = await RegUser.create({
|
reguser = await RegUser.create({
|
||||||
name,
|
name,
|
||||||
|
@ -210,7 +248,7 @@ passport.use(new RedditStrategy({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const user = new User(reguser.id);
|
const user = new User(reguser.id);
|
||||||
user.regUser = reguser;
|
user.setRegUser(reguser);
|
||||||
done(null, user);
|
done(null, user);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
done(err);
|
done(err);
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
import DataType from 'sequelize';
|
import DataType from 'sequelize';
|
||||||
import Model from '../sequelize';
|
import Model from '../sequelize';
|
||||||
|
import RegUser from './RegUser';
|
||||||
|
|
||||||
const Channel = Model.define('Channel', {
|
const Channel = Model.define('Channel', {
|
||||||
// Channel ID
|
// Channel ID
|
||||||
|
@ -19,7 +20,19 @@ const Channel = Model.define('Channel', {
|
||||||
|
|
||||||
name: {
|
name: {
|
||||||
type: `${DataType.CHAR(32)} CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci`,
|
type: `${DataType.CHAR(32)} CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci`,
|
||||||
|
allowNull: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 0: public channel
|
||||||
|
* 1: DM
|
||||||
|
* 2: Group (not implemented)
|
||||||
|
* 3: faction (not implemented)
|
||||||
|
*/
|
||||||
|
type: {
|
||||||
|
type: DataType.TINYINT,
|
||||||
allowNull: false,
|
allowNull: false,
|
||||||
|
defaultValue: 0,
|
||||||
},
|
},
|
||||||
|
|
||||||
lastMessage: {
|
lastMessage: {
|
||||||
|
@ -30,4 +43,20 @@ const Channel = Model.define('Channel', {
|
||||||
updatedAt: false,
|
updatedAt: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Direct Message User id
|
||||||
|
* just set if channel is DM
|
||||||
|
* (associating it here allows us too
|
||||||
|
* keep track of users leaving and joining DMs and ending up
|
||||||
|
* in the same conversation)
|
||||||
|
*/
|
||||||
|
Channel.belongsTo(RegUser, {
|
||||||
|
as: 'dmu1',
|
||||||
|
foreignKey: 'dmu1id',
|
||||||
|
});
|
||||||
|
Channel.belongsTo(RegUser, {
|
||||||
|
as: 'dmu2',
|
||||||
|
foreignKey: 'dmu2id',
|
||||||
|
});
|
||||||
|
|
||||||
export default Channel;
|
export default Channel;
|
||||||
|
|
|
@ -23,11 +23,14 @@ class User {
|
||||||
ip: string;
|
ip: string;
|
||||||
wait: ?number;
|
wait: ?number;
|
||||||
regUser: Object;
|
regUser: Object;
|
||||||
|
channels: Array;
|
||||||
|
|
||||||
constructor(id: string = null, ip: string = '127.0.0.1') {
|
constructor(id: string = null, ip: string = '127.0.0.1') {
|
||||||
// id should stay null if unregistered
|
// id should stay null if unregistered
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.ip = ip;
|
this.ip = ip;
|
||||||
|
this.channels = [];
|
||||||
|
this.channelIds = [];
|
||||||
this.ipSub = getIPv6Subnet(ip);
|
this.ipSub = getIPv6Subnet(ip);
|
||||||
this.wait = null;
|
this.wait = null;
|
||||||
// following gets populated by passport
|
// following gets populated by passport
|
||||||
|
@ -50,6 +53,18 @@ class User {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setRegUser(reguser) {
|
||||||
|
this.regUser = reguser;
|
||||||
|
this.id = reguser.id;
|
||||||
|
for (let i = 0; i < reguser.channel.length; i += 1) {
|
||||||
|
this.channelIds.push(reguser.channel[i].id);
|
||||||
|
this.channels.push([
|
||||||
|
reguser.channel[i].id,
|
||||||
|
reguser.channel[i].name,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getName() {
|
getName() {
|
||||||
return (this.regUser) ? this.regUser.name : null;
|
return (this.regUser) ? this.regUser.name : null;
|
||||||
}
|
}
|
||||||
|
@ -149,6 +164,7 @@ class User {
|
||||||
if (this.regUser == null) {
|
if (this.regUser == null) {
|
||||||
return {
|
return {
|
||||||
name: null,
|
name: null,
|
||||||
|
channels: this.channels,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
const { regUser } = this;
|
const { regUser } = this;
|
||||||
|
@ -163,6 +179,7 @@ class User {
|
||||||
dailyRanking: regUser.dailyRanking,
|
dailyRanking: regUser.dailyRanking,
|
||||||
mailreg: !!(regUser.password),
|
mailreg: !!(regUser.password),
|
||||||
userlvl: this.isAdmin() ? 1 : 0,
|
userlvl: this.isAdmin() ? 1 : 0,
|
||||||
|
channels: this.channels,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,15 +22,7 @@ function sync(...args) {
|
||||||
return sequelize.sync(...args);
|
return sequelize.sync(...args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
export default { sync };
|
||||||
* makes sure that minimum required rows are present
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
function validateTables() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export default { sync, validateTables };
|
|
||||||
export {
|
export {
|
||||||
Whitelist, Blacklist, User, RegUser, Channel, UserChannel, Message,
|
Whitelist, Blacklist, User, RegUser, Channel, UserChannel, Message,
|
||||||
};
|
};
|
||||||
|
|
|
@ -66,8 +66,7 @@ export default async (req: Request, res: Response) => {
|
||||||
logger.info(`Created new user ${name} ${email} ${ip}`);
|
logger.info(`Created new user ${name} ${email} ${ip}`);
|
||||||
|
|
||||||
const { user } = req;
|
const { user } = req;
|
||||||
user.id = newuser.id;
|
user.setRegUser(newuser);
|
||||||
user.regUser = newuser;
|
|
||||||
const me = await getMe(user);
|
const me = await getMe(user);
|
||||||
|
|
||||||
await req.logIn(user, (err) => {
|
await req.logIn(user, (err) => {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user