Skip to content
This repository has been archived by the owner on May 6, 2022. It is now read-only.

Commit

Permalink
Merge pull request #61 from Tolfix/dev
Browse files Browse the repository at this point in the history
v1.3
  • Loading branch information
Tolfx authored Jan 5, 2022
2 parents db5dba1 + 1c62a32 commit 93dfe68
Show file tree
Hide file tree
Showing 69 changed files with 709 additions and 173 deletions.
5 changes: 5 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"@types/request": "^2.48.7",
"@types/supertest": "^2.0.11",
"ac-osticket": "^3.0.2",
"apollo-server-express": "^3.6.1",
"aws-sdk": "^2.1018.0",
"bcryptjs": "^2.4.3",
"colors": "^1.4.0",
Expand All @@ -29,6 +30,9 @@
"express-fileupload": "^1.2.1",
"express-session": "^1.17.2",
"express-swagger-generator": "github:Tolfix/express-swagger-generator",
"graphql-compose": "^9.0.6",
"graphql-compose-mongoose": "^9.7.1",
"graphql-resolvers": "^0.4.2",
"jsonwebtoken": "^8.5.1",
"mongoose": "^6.1.4",
"mongoose-auto-increment": "^5.0.1",
Expand Down Expand Up @@ -67,6 +71,7 @@
"@types/express": "^4.17.13",
"@types/express-fileupload": "^1.1.7",
"@types/express-session": "^1.17.4",
"@types/graphql-resolvers": "^0.3.1",
"@types/jest": "^27.0.1",
"@types/method-override": "^0.0.32",
"@types/mongoose-auto-increment": "^5.0.34",
Expand Down
6 changes: 3 additions & 3 deletions src/Admin/AdminHandler.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { stripIndent } from "common-tags";
import prompt from "prompt";
import { CacheAdmin } from "../Cache/CacheAdmin";
import AdminModel from "../Database/Schemas/Administrators";
import ConfigModel from "../Database/Schemas/Configs";
import AdminModel from "../Database/Models/Administrators";
import ConfigModel from "../Database/Models/Configs";
import Logger from "../Lib/Logger";
import createAdmin from "./CreateAdmin";
import updateSMTP from "./updateSMTP";
Expand Down Expand Up @@ -309,7 +309,7 @@ export default class AdminHandler
const config = (await ConfigModel.find())[0];

// Remove webhook
config.webhooks_urls = config.webhooks_urls.filter(e => e !== url);
config.webhooks_urls = config.webhooks_urls.filter((e: any) => e !== url);

// Save our config
await config.save();
Expand Down
2 changes: 1 addition & 1 deletion src/Admin/CreateAdmin.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import bcrypt from "bcryptjs";
import { CacheAdmin, getAdminByUsername } from "../Cache/CacheAdmin";
import AdminModel from "../Database/Schemas/Administrators";
import AdminModel from "../Database/Models/Administrators";
import { idAdmin } from "../Lib/Generator";
import Logger from "../Lib/Logger";

Expand Down
2 changes: 1 addition & 1 deletion src/Admin/updateSMTP.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import ConfigModel from "../Database/Schemas/Configs";
import ConfigModel from "../Database/Models/Configs";
import { IConfigs } from "../Interfaces/Admin/Configs";

export default async function updateSMTP(smtp: IConfigs["smtp"]): Promise<void>
Expand Down
18 changes: 9 additions & 9 deletions src/Cache/reCache.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import AdminModel from "../Database/Schemas/Administrators";
import CategoryModel from "../Database/Schemas/Category";
import CustomerModel from "../Database/Schemas/Customers/Customer";
import ImageModel from "../Database/Schemas/Images";
import OrderModel from "../Database/Schemas/Orders";
import ProductModel from "../Database/Schemas/Products";
import TransactionsModel from "../Database/Schemas/Transactions";
import AdminModel from "../Database/Models/Administrators";
import CategoryModel from "../Database/Models/Category";
import CustomerModel from "../Database/Models/Customers/Customer";
import ImageModel from "../Database/Models/Images";
import OrderModel from "../Database/Models/Orders";
import ProductModel from "../Database/Models/Products";
import TransactionsModel from "../Database/Models/Transactions";
import Logger from "../Lib/Logger";
import { CacheAdmin } from "./CacheAdmin";
import { CacheCategories } from "./CacheCategories";
Expand All @@ -13,9 +13,9 @@ import { CacheOrder } from "./CacheOrder";
import { CacheProduct } from "./CacheProduct";
import { CacheTransactions } from "./CacheTransactions";
import { CacheImages } from "./CacheImage";
import ConfigModel from "../Database/Schemas/Configs";
import ConfigModel from "../Database/Models/Configs";
import { CacheConfig } from "./CacheConfigs";
import InvoiceModel from "../Database/Schemas/Invoices";
import InvoiceModel from "../Database/Models/Invoices";
import { CacheInvoice } from "./CacheInvoices";

/**
Expand Down
2 changes: 1 addition & 1 deletion src/Config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import ConfigModel from "./Database/Schemas/Configs";
import ConfigModel from "./Database/Models/Configs";
import { IConfigs } from "./Interfaces/Admin/Configs";

/**
Expand Down
4 changes: 2 additions & 2 deletions src/Cron/CronInvoices.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { CronJob } from "cron";
import InvoiceModel from "../Database/Schemas/Invoices";
import InvoiceModel from "../Database/Models/Invoices";
import Logger from "../Lib/Logger";
import dateFormat from "date-and-time";
import CustomerModel from "../Database/Schemas/Customers/Customer";
import CustomerModel from "../Database/Models/Customers/Customer";
import { d_Days } from "../Config";
import { sendInvoiceEmail, sendLateInvoiceEmail } from "../Lib/Invoices/SendEmail";
import { InvoiceNotifiedReport } from "../Email/Reports/InvoiceReport";
Expand Down
2 changes: 1 addition & 1 deletion src/Cron/CronOrders.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { CronJob } from "cron";
import OrderModel from "../Database/Schemas/Orders";
import OrderModel from "../Database/Models/Orders";
import Logger from "../Lib/Logger";
import dateFormat from "date-and-time";
import { createInvoiceFromOrder } from "../Lib/Orders/newInvoice";
Expand Down
84 changes: 84 additions & 0 deletions src/Database/GraphQL/ApolloServer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import { ApolloServer } from 'apollo-server-express';
import { JWT_Access_Token } from '../../Config';
import SchemaPoser from './SchemaPoser';
import jwt from "jsonwebtoken";
import bcrypt from "bcryptjs";
import { CacheAdmin, getAdminByUsername } from '../../Cache/CacheAdmin';

export default async (server: any) =>
{

const apolloServer = new ApolloServer({
schema: SchemaPoser,
context: async ({ req, res }) => {

const authHeader = req.headers['authorization'];
if(!authHeader)
return {
isAuth: false,
}

const b64auth = (authHeader).split(' ');

if(!b64auth[0].toLocaleLowerCase().match(/basic|bearer/g))
return {
isAuth: false,
}

if(!b64auth[1])
return {
isAuth: false,
}

if(b64auth[0].toLocaleLowerCase() === "basic")
{
// Check if buffer, or base64
let [login, password] = (Buffer.isBuffer(b64auth[1]) ? Buffer.from(b64auth[1], 'base64') : b64auth[1]).toString().split(':');
if(login.includes("==") || password.includes("=="))
{
login = atob(login);
password = login.split(":")[1];
login = login.split(":")[0];
}

// Check if admin
if(CacheAdmin.has(getAdminByUsername(login) ?? "ADM_"))
{
let succeed = await bcrypt.compare(password, (CacheAdmin.get(getAdminByUsername(login) ?? "ADM_")?.["password"] ?? ""));

if(!succeed)
return {
isAuth: false,
}
}
}

if(b64auth[0].toLocaleLowerCase() === "bearer")
{
const token = (Buffer.isBuffer(b64auth[1]) ? Buffer.from(b64auth[1], 'base64') : b64auth[1]).toString();
jwt.verify(token, JWT_Access_Token, (err, payload) => {
if(err || !payload)
return {
isAuth: false,
}


return {
isAuth: true,
}
});
}

return {
isAuth: false,
}
},
});

await apolloServer.start();

apolloServer.applyMiddleware({
app: server,
path: "/graphql",
});
}
36 changes: 36 additions & 0 deletions src/Database/GraphQL/SchemaPoser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { SchemaComposer } from 'graphql-compose';
import fs from "fs";
import { HomeDir } from '../../Config';
import Logger from '../../Lib/Logger';

const schemaComposer = new SchemaComposer();

// Go through each in ./Schemas/*.js files and add them to schemaComposer
Logger.info("Loading GraphQL schemas...");
let schemaDir = HomeDir+"/build/Database/GraphQL/Schemas";
const files = fs.readdirSync(`${schemaDir}`).filter((f) => f.endsWith('.js'));
for(let f of files)
{

// Now we require the file.
const schema = require(`${schemaDir}/${f}`);
// Get the schema.startsWith
const name = schema.startsWith;
if(!name)
continue;

// Now get schame[`${name}Query`] and schema[`${name}Mutation`]
const query = schema[`${name}Query`];
const mutation = schema[`${name}Mutation`];

// Add the query and mutation to the schemaComposer
if(query)
schemaComposer.Query.addFields(query);
if(mutation)
schemaComposer.Mutation.addFields(mutation);

continue;
}

// Lets create the schema
export default schemaComposer.buildSchema();
25 changes: 25 additions & 0 deletions src/Database/GraphQL/Schemas/Categories.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { composeWithMongoose } from "graphql-compose-mongoose";
import CategoryModel from "../../Models/Category";

const CategoriesGraphQL = composeWithMongoose(CategoryModel);
export const startsWith = "Categories";
export const CategoriesQuery = {
categoryById: CategoriesGraphQL.getResolver("findById"),
categoryByIds: CategoriesGraphQL.getResolver("findByIds"),
categoryOne: CategoriesGraphQL.getResolver("findOne"),
categoryMany: CategoriesGraphQL.getResolver("findMany"),
categoryCount: CategoriesGraphQL.getResolver("count"),
categoryConnection: CategoriesGraphQL.getResolver("connection"),
categoryPagination: CategoriesGraphQL.getResolver("pagination"),
}

export const CategoriesMutation = {
categoryCreateOne: CategoriesGraphQL.getResolver("createOne"),
categoryCreateMany: CategoriesGraphQL.getResolver("createMany"),
categoryUpdateById: CategoriesGraphQL.getResolver("updateById"),
categoryUpdateOne: CategoriesGraphQL.getResolver("updateOne"),
categoryUpdateMany: CategoriesGraphQL.getResolver("updateMany"),
categoryRemoveById: CategoriesGraphQL.getResolver("removeById"),
categoryRemoveOne: CategoriesGraphQL.getResolver("removeOne"),
categoryRemoveMany: CategoriesGraphQL.getResolver("removeMany"),
};
25 changes: 25 additions & 0 deletions src/Database/GraphQL/Schemas/ConfigurableOptions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { composeWithMongoose } from "graphql-compose-mongoose";
import ConfigurableOptionsModel from "../../Models/ConfigurableOptions";

const ConfigurableOptionsGraphQL = composeWithMongoose(ConfigurableOptionsModel);
export const startsWith = "ConfigurableOptions";
export const ConfigurableOptionsQuery = {
configurableOptionsById: ConfigurableOptionsGraphQL.getResolver("findById"),
configurableOptionsByIds: ConfigurableOptionsGraphQL.getResolver("findByIds"),
configurableOptionsOne: ConfigurableOptionsGraphQL.getResolver("findOne"),
configurableOptionsMany: ConfigurableOptionsGraphQL.getResolver("findMany"),
configurableOptionsCount: ConfigurableOptionsGraphQL.getResolver("count"),
configurableOptionsConnection: ConfigurableOptionsGraphQL.getResolver("connection"),
configurableOptionsPagination: ConfigurableOptionsGraphQL.getResolver("pagination"),
}

export const ConfigurableOptionsMutation = {
configurableOptionsCreateOne: ConfigurableOptionsGraphQL.getResolver("createOne"),
configurableOptionsCreateMany: ConfigurableOptionsGraphQL.getResolver("createMany"),
configurableOptionsUpdateById: ConfigurableOptionsGraphQL.getResolver("updateById"),
configurableOptionsUpdateOne: ConfigurableOptionsGraphQL.getResolver("updateOne"),
configurableOptionsUpdateMany: ConfigurableOptionsGraphQL.getResolver("updateMany"),
configurableOptionsRemoveById: ConfigurableOptionsGraphQL.getResolver("removeById"),
configurableOptionsRemoveOne: ConfigurableOptionsGraphQL.getResolver("removeOne"),
configurableOptionsRemoveMany: ConfigurableOptionsGraphQL.getResolver("removeMany"),
};
25 changes: 25 additions & 0 deletions src/Database/GraphQL/Schemas/Customer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { composeWithMongoose } from "graphql-compose-mongoose";
import CustomerModel from "../../Models/Customers/Customer";

const CustomersGraphQL = composeWithMongoose(CustomerModel);
export const startsWith = "Customers";
export const CustomersQuery = {
customerById: CustomersGraphQL.getResolver("findById"),
customerByIds: CustomersGraphQL.getResolver("findByIds"),
customerOne: CustomersGraphQL.getResolver("findOne"),
customerMany: CustomersGraphQL.getResolver("findMany"),
customerCount: CustomersGraphQL.getResolver("count"),
customerConnection: CustomersGraphQL.getResolver("connection"),
customerPagination: CustomersGraphQL.getResolver("pagination"),
}

export const CustomersMutation = {
customerCreateOne: CustomersGraphQL.getResolver("createOne"),
customerCreateMany: CustomersGraphQL.getResolver("createMany"),
customerUpdateById: CustomersGraphQL.getResolver("updateById"),
customerUpdateOne: CustomersGraphQL.getResolver("updateOne"),
customerUpdateMany: CustomersGraphQL.getResolver("updateMany"),
customerRemoveById: CustomersGraphQL.getResolver("removeById"),
customerRemoveOne: CustomersGraphQL.getResolver("removeOne"),
customerRemoveMany: CustomersGraphQL.getResolver("removeMany"),
};
25 changes: 25 additions & 0 deletions src/Database/GraphQL/Schemas/Invoices.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { composeWithMongoose } from "graphql-compose-mongoose";
import invoiceModel from "../../Models/Invoices";

const InvoicesGraphQL = composeWithMongoose(invoiceModel);
export const startsWith = "Invoices";
export const InvoicesQuery = {
invoiceById: InvoicesGraphQL.getResolver("findById"),
invoiceByIds: InvoicesGraphQL.getResolver("findByIds"),
invoiceOne: InvoicesGraphQL.getResolver("findOne"),
invoiceMany: InvoicesGraphQL.getResolver("findMany"),
invoiceCount: InvoicesGraphQL.getResolver("count"),
invoiceConnection: InvoicesGraphQL.getResolver("connection"),
invoicePagination: InvoicesGraphQL.getResolver("pagination"),
}

export const InvoicesMutation = {
invoiceCreateOne: InvoicesGraphQL.getResolver("createOne"),
invoiceCreateMany: InvoicesGraphQL.getResolver("createMany"),
invoiceUpdateById: InvoicesGraphQL.getResolver("updateById"),
invoiceUpdateOne: InvoicesGraphQL.getResolver("updateOne"),
invoiceUpdateMany: InvoicesGraphQL.getResolver("updateMany"),
invoiceRemoveById: InvoicesGraphQL.getResolver("removeById"),
invoiceRemoveOne: InvoicesGraphQL.getResolver("removeOne"),
invoiceRemoveMany: InvoicesGraphQL.getResolver("removeMany"),
};
25 changes: 25 additions & 0 deletions src/Database/GraphQL/Schemas/Order.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { composeWithMongoose } from "graphql-compose-mongoose";
import OrdersModel from "../../Models/Orders";

const OrderGraphQL = composeWithMongoose(OrdersModel);
export const startsWith = "Order";
export const OrderQuery = {
ordersById: OrderGraphQL.getResolver("findById"),
ordersByIds: OrderGraphQL.getResolver("findByIds"),
ordersOne: OrderGraphQL.getResolver("findOne"),
ordersMany: OrderGraphQL.getResolver("findMany"),
ordersCount: OrderGraphQL.getResolver("count"),
ordersConnection: OrderGraphQL.getResolver("connection"),
ordersPagination: OrderGraphQL.getResolver("pagination"),
}

export const OrderMutation = {
ordersCreateOne: OrderGraphQL.getResolver("createOne"),
ordersCreateMany: OrderGraphQL.getResolver("createMany"),
ordersUpdateById: OrderGraphQL.getResolver("updateById"),
ordersUpdateOne: OrderGraphQL.getResolver("updateOne"),
ordersUpdateMany: OrderGraphQL.getResolver("updateMany"),
ordersRemoveById: OrderGraphQL.getResolver("removeById"),
ordersRemoveOne: OrderGraphQL.getResolver("removeOne"),
ordersRemoveMany: OrderGraphQL.getResolver("removeMany"),
};
25 changes: 25 additions & 0 deletions src/Database/GraphQL/Schemas/Products.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { composeWithMongoose } from "graphql-compose-mongoose";
import ProductsModel from "../../Models/Products";

const ProductsGraphQL = composeWithMongoose(ProductsModel);
export const startsWith = "Products";
export const ProductsQuery = {
productById: ProductsGraphQL.getResolver("findById"),
productByIds: ProductsGraphQL.getResolver("findByIds"),
productOne: ProductsGraphQL.getResolver("findOne"),
productMany: ProductsGraphQL.getResolver("findMany"),
productCount: ProductsGraphQL.getResolver("count"),
productConnection: ProductsGraphQL.getResolver("connection"),
productPagination: ProductsGraphQL.getResolver("pagination"),
}

export const ProductsMutation = {
productCreateOne: ProductsGraphQL.getResolver("createOne"),
productCreateMany: ProductsGraphQL.getResolver("createMany"),
productUpdateById: ProductsGraphQL.getResolver("updateById"),
productUpdateOne: ProductsGraphQL.getResolver("updateOne"),
productUpdateMany: ProductsGraphQL.getResolver("updateMany"),
productRemoveById: ProductsGraphQL.getResolver("removeById"),
productRemoveOne: ProductsGraphQL.getResolver("removeOne"),
productRemoveMany: ProductsGraphQL.getResolver("removeMany"),
};
Loading

0 comments on commit 93dfe68

Please sign in to comment.