forked from engineering/cloudservices
add account utilities class and rework of util class
parent
cae4c9c2cd
commit
cf465b01c8
|
@ -0,0 +1,73 @@
|
||||||
|
import { AccountInterface } from '../models';
|
||||||
|
import { Client } from '..';
|
||||||
|
|
||||||
|
export default class AccountUtil {
|
||||||
|
public client: Client;
|
||||||
|
|
||||||
|
constructor(client: Client) {
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function creates a new user account.
|
||||||
|
* @param data Data/information on the new user account to create.
|
||||||
|
* @param data.userID The Discord ID for the user.
|
||||||
|
* @param data.username The username for the new user, this will also be their username on the machine.
|
||||||
|
* @param data.emailAddress The user's email address.
|
||||||
|
* @param moderator The Discord user ID for the Staff member that created the account.
|
||||||
|
*/
|
||||||
|
public async createAccount(data: { userID: string, username: string, emailAddress: string }, moderator: string): Promise<{ account: AccountInterface, tempPass: string }> {
|
||||||
|
const moderatorMember = this.client.guilds.get('446067825673633794').members.get(moderator);
|
||||||
|
const tempPass = this.client.util.randomPassword();
|
||||||
|
let passHash = await this.client.util.createHash(tempPass); passHash = passHash.replace(/[$]/g, '\\$').replace('\n', '');
|
||||||
|
const acctName = this.client.users.get(data.userID).username.replace(/[!@#$%^&*(),.?":{}|<>]/g, '-').replace(/\s/g, '-');
|
||||||
|
const etcPasswd = `${acctName},${data.userID},,`;
|
||||||
|
|
||||||
|
const accountInterface = await this.client.util.createAccount(passHash, etcPasswd, data.username, data.userID, data.emailAddress, moderator);
|
||||||
|
await this.client.util.createModerationLog(data.userID, moderatorMember, 0);
|
||||||
|
|
||||||
|
this.client.util.transport.sendMail({
|
||||||
|
to: data.emailAddress,
|
||||||
|
from: 'Library of Code sp-us | Cloud Services <help@libraryofcode.org>',
|
||||||
|
subject: 'Your account has been created',
|
||||||
|
html: `
|
||||||
|
<body>
|
||||||
|
<style>* {font-family: 'Calibri';}</style>
|
||||||
|
<h1>Library of Code | Cloud Services</h1>
|
||||||
|
<h2>Your Cloud Account has been created, welcome! Please see below for some details regarding your account and our services</h2>
|
||||||
|
<p><b>Username:</b> ${data.username}</p>
|
||||||
|
<p><b>SSH Login:</b> <pre><code style="font-family: Courier;">ssh ${data.username}@cloud.libraryofcode.org</code></pre>
|
||||||
|
<h2>Useful information</h2>
|
||||||
|
<h3>How to log in:</h3>
|
||||||
|
<ol>
|
||||||
|
<li>Open your desired terminal application - we recommend using <a target="_blank" href="https://git-scm.com/downloads">Bash</a>, but you can use your computer's default</li>
|
||||||
|
<li>Type in your SSH Login as above</li>
|
||||||
|
<li>When prompted, enter your password <em>Please note that inputs will be blank, so be careful not to type in your password incorrectly</em></li>
|
||||||
|
</ol>
|
||||||
|
<p>If you fail to authenticate yourself too many times, you will be IP banned and will fail to connect. If this is the case, feel free to DM Ramirez with your <a target="_blank" href="https://whatismyip.com">public IPv4 address</a>.
|
||||||
|
|
||||||
|
<h3>Channels and Links</h3>
|
||||||
|
<ul>
|
||||||
|
<li><a target="_blank" href="https://discordapp.com/channels/446067825673633794/622856541325885453">#status</a> - You can find the status of all our services, including the cloud machine, here</li>
|
||||||
|
<li><a target="_blank" href="https://discordapp.com/channels/446067825673633794/620355063088414769">#cloud-announcements</a> - Announcements regarding the cloud machine will be here. These include planned maintenance, updates to preinstalled services etc.</li>
|
||||||
|
<li><a target="_blank" href="https://discordapp.com/channels/446067825673633794/620349128295186472">#cloud-info</a> - Important information you will need to, or should, know to a certain extent. These include our infractions system and Tier limits</li>
|
||||||
|
<li><a target="_blank" href="https://discordapp.com/channels/446067825673633794/546457788184789013">#cloud-support</a> - A support channel specifically for the cloud machine, you can use this to ask how to renew your certificates, for example</li>
|
||||||
|
<li><a target="_blank" href="https://support.libraryofcode.org">Library of Code Support Desk</a> - Our Support desk, you can contact Staff here.</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Want to support us?</h3>
|
||||||
|
<p>You can support us on Patreon! Head to <a target="_blank" href="https://www.patreon.com/libraryofcode">our Patreon page</a> and feel free to donate as much or as little as you want!<br>Donating $5 or more will grant you Tier 3, which means we will manage your account at your request, longer certificates, increased Tier limits as well as some roles in the server!</p>
|
||||||
|
<b><i>Library of Code sp-us | Support Team</i></b>
|
||||||
|
</body>
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
|
||||||
|
const dmChannel = await this.client.getDMChannel(data.userID).catch();
|
||||||
|
dmChannel.createMessage('<:loc:607695848612167700> **Thank you for creating an account with us!** <:loc:607695848612167700>\n'
|
||||||
|
+ `Please log into your account by running \`ssh ${data.username}@cloud.libraryofcode.org\` in your terminal, then use the password \`${tempPass}\` to log in.\n`
|
||||||
|
+ `You will be asked to change your password, \`(current) UNIX password\` is \`${tempPass}\`, then create a password that is at least 12 characters long, with at least one number, special character, and an uppercase letter\n`
|
||||||
|
+ 'Bear in mind that when you enter your password, it will be blank, so be careful not to type in your password incorrectly.\n'
|
||||||
|
+ 'You may now return to Modmail, and continue setting up your account from there.\n\n'
|
||||||
|
+ 'An email containing some useful information has also been sent').catch();
|
||||||
|
return { account: accountInterface, tempPass };
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,14 +6,15 @@ import { Message, PrivateChannel, GroupChannel, Member, User } from 'eris';
|
||||||
import uuid from 'uuid/v4';
|
import uuid from 'uuid/v4';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import os from 'os';
|
|
||||||
import { Client } from '..';
|
import { Client } from '..';
|
||||||
import { Command, RichEmbed } from '.';
|
import { AccountUtil, Command, RichEmbed } from '.';
|
||||||
import { ModerationInterface, AccountInterface } from '../models';
|
import { ModerationInterface, AccountInterface, Account } from '../models';
|
||||||
|
|
||||||
export default class Util {
|
export default class Util {
|
||||||
public client: Client;
|
public client: Client;
|
||||||
|
|
||||||
|
public accounts: AccountUtil;
|
||||||
|
|
||||||
public transport: nodemailer.Transporter;
|
public transport: nodemailer.Transporter;
|
||||||
|
|
||||||
constructor(client: Client) {
|
constructor(client: Client) {
|
||||||
|
@ -22,6 +23,7 @@ export default class Util {
|
||||||
host: 'staff.libraryofcode.org',
|
host: 'staff.libraryofcode.org',
|
||||||
auth: { user: 'support', pass: this.client.config.emailPass },
|
auth: { user: 'support', pass: this.client.config.emailPass },
|
||||||
});
|
});
|
||||||
|
this.accounts = new AccountUtil(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
export { default as AccountUtil } from './AccountUtil';
|
||||||
export { default as Command } from './Command';
|
export { default as Command } from './Command';
|
||||||
export { default as RichEmbed } from './RichEmbed';
|
export { default as RichEmbed } from './RichEmbed';
|
||||||
export { default as Util } from './Util';
|
export { default as Util } from './Util';
|
||||||
|
|
Loading…
Reference in New Issue