Skip to content

Commit

Permalink
Support adding admins by email domain
Browse files Browse the repository at this point in the history
  • Loading branch information
petschekr committed Mar 22, 2019
1 parent 3300b3e commit add5a4c
Show file tree
Hide file tree
Showing 10 changed files with 65 additions and 72 deletions.
8 changes: 6 additions & 2 deletions client/admin.html
Original file line number Diff line number Diff line change
Expand Up @@ -359,14 +359,18 @@ <h4><code>config.json</code> options</h4>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="col-4">
<label>Upload directory (from <code>config.json</code>):</label>
<input type="text" value="{{config.uploadDirectoryRaw}}" disabled />
</div>
<div class="col-6">
<div class="col-4">
<label>Upload directory (resolved):</label>
<input type="text" value="{{config.uploadDirectoryResolved}}" disabled />
</div>
<div class="col-4">
<label>Preconfigured admins:</label>
<input type="text" value="{{config.admins}}" disabled />
</div>
</div>
<div class="row">
<div class="col-12">
Expand Down
2 changes: 1 addition & 1 deletion client/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"noUnusedLocals": true,
"plugins": [
{
"name": "tslint-language-service",
"name": "tslint-language-service-ts3",
"alwaysShowRuleFailuresAsWarnings": false,
"ignoreDefinitionFiles": true,
"configFile": "../tslint.json"
Expand Down
82 changes: 24 additions & 58 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@
"chai": "^4.0.0",
"mocha": "^5.2.0",
"supertest": "^3.1.0",
"tslint": "^5.10.0",
"tslint-language-service": "^0.9.9",
"tslint": "^5.14.0",
"tslint-language-service-ts3": "^1.0.0",
"typescript": "^3.3.0"
}
}
20 changes: 17 additions & 3 deletions server/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,10 @@ class Config implements IConfig.Main {
passwordResetExpiration: 1000 * 60 * 60, // 1 hour
defaultTimezone: "America/New_York"
};
public admins: string[] = [];
public admins = {
domains: ["hack.gt"],
emails: [] as string[]
};
public eventName: string = "Untitled Event";
public storageEngine = {
"name": "disk",
Expand Down Expand Up @@ -66,7 +69,7 @@ class Config implements IConfig.Main {
}
protected loadFromJSON(fileName: string): void {
// tslint:disable-next-line:no-shadowed-variable
let config: IConfig.Main | null = null;
let config: Partial<IConfig.Main> | null = null;
try {
config = JSON.parse(fs.readFileSync(path.resolve(__dirname, "./config", fileName), "utf8"));
}
Expand All @@ -93,6 +96,14 @@ class Config implements IConfig.Main {
this.server[key] = config.server[key];
}
}
if (config.admins) {
if (config.admins.domains) {
this.admins.domains = config.admins.domains;
}
if (config.admins.emails) {
this.admins.emails = config.admins.emails;
}
}
if (config.eventName) {
this.eventName = config.eventName;
}
Expand Down Expand Up @@ -189,7 +200,10 @@ class Config implements IConfig.Main {
}
// Admins
if (process.env.ADMIN_EMAILS) {
this.admins = JSON.parse(process.env.ADMIN_EMAILS!);
this.admins.emails = JSON.parse(process.env.ADMIN_EMAILS!);
}
if (process.env.ADMIN_DOMAINS) {
this.admins.domains = JSON.parse(process.env.ADMIN_DOMAINS);
}
// Event name
if (process.env.EVENT_NAME) {
Expand Down
7 changes: 6 additions & 1 deletion server/routes/strategies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,12 @@ export class GroundTruthStrategy extends OAuthStrategy {
else {
user.token = accessToken;
}
if (config.admins.includes(profile.email) && !user.admin) {

let domain = user.email.split("@").pop();
if (domain && config.admins.domains.includes(domain)) {
user.admin = true;
}
if (config.admins.emails.includes(profile.email)) {
user.admin = true;
}
await user.save();
Expand Down
4 changes: 3 additions & 1 deletion server/routes/templates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,8 @@ templateRoutes.route("/admin").get(authenticateWithRedirect, async (request, res
teamIDNameMap[team._id.toString()] = team.teamName;
});

let preconfiguredAdmins = config.admins.emails.concat(config.admins.domains.map(domain => `*@${domain}`));

let templateData: IAdminTemplate = {
siteTitle: config.eventName,
user,
Expand Down Expand Up @@ -650,7 +652,7 @@ templateRoutes.route("/admin").get(authenticateWithRedirect, async (request, res
apiKey: config.secrets.adminKey
},
config: {
admins: config.admins.join(", "),
admins: preconfiguredAdmins.join(", "),
eventName: config.eventName,
storageEngine: config.storageEngine.name,
uploadDirectoryRaw: config.storageEngine.options.uploadDirectory,
Expand Down
4 changes: 4 additions & 0 deletions server/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ export namespace IConfig {
email: Email;
server: Server;
style: Style;
admins: {
domains: string[];
emails: string[];
};
eventName: string;
questionsLocation: string;
storageEngine: {
Expand Down
4 changes: 1 addition & 3 deletions server/storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,7 @@ class S3StorageEngine implements IStorageEngine {
}

interface IStorageEngines {
[name: string]: {
new(options: ICommonOptions): IStorageEngine;
};
[name: string]: new(options: ICommonOptions) => IStorageEngine;
}
export const storageEngines: IStorageEngines = {
"disk": DiskStorageEngine,
Expand Down
2 changes: 1 addition & 1 deletion server/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"noUnusedLocals": true,
"plugins": [
{
"name": "tslint-language-service",
"name": "tslint-language-service-ts3",
"alwaysShowRuleFailuresAsWarnings": false,
"ignoreDefinitionFiles": true,
"configFile": "../tslint.json"
Expand Down

0 comments on commit add5a4c

Please sign in to comment.