2020-03-29 04:32:17 -04:00
import { randomBytes } from 'crypto' ;
2020-03-28 04:57:08 -04:00
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 } ,, ` ;
2020-03-29 04:32:17 -04:00
const code = randomBytes ( 3 ) . toString ( 'hex' ) . toUpperCase ( ) ;
2020-03-28 04:57:08 -04:00
2020-03-29 04:32:17 -04:00
const accountInterface = await this . client . util . createAccount ( passHash , etcPasswd , data . username , data . userID , data . emailAddress , moderator , code ) ;
2020-03-28 04:57:08 -04:00
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>' ,
2020-03-29 04:32:17 -04:00
subject : 'Your account has been created!' ,
2020-03-28 04:57:08 -04:00
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 >
2020-03-29 04:32:17 -04:00
< p > < b > Support Key : < / b > $ { code } || < i > You may be asked for this support key when contacting Library of Code , please keep the code in a safe area . < / i > < / p >
2020-03-28 04:57:08 -04:00
< 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 >
` ,
} ) ;
2020-03-29 06:19:32 -04:00
this . client . guilds . get ( '446067825673633794' ) . members . get ( data . userID ) . addRole ( '546457886440685578' ) ;
2020-03-28 04:57:08 -04:00
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'
2020-03-29 04:32:17 -04:00
+ 'An email containing some useful information has also been sent.\n'
+ ` Your support key is \` ${ code } \` . Pin this message, you may need this key to contact Library of Code in the future. ` ) . catch ( ) ;
2020-03-28 04:57:08 -04:00
return { account : accountInterface , tempPass } ;
}
}