Added auth functionality, initial work with views and field types
This commit is contained in:
138
backend/scripts/create-tenant-user.ts
Normal file
138
backend/scripts/create-tenant-user.ts
Normal file
@@ -0,0 +1,138 @@
|
||||
import { PrismaClient as CentralPrismaClient } from '../node_modules/.prisma/central';
|
||||
import * as bcrypt from 'bcrypt';
|
||||
import { Knex, knex } from 'knex';
|
||||
|
||||
// Central database client
|
||||
const centralPrisma = new CentralPrismaClient();
|
||||
|
||||
async function createTenantUser() {
|
||||
const tenantSlug = 'tenant1';
|
||||
const email = 'user@example.com';
|
||||
const password = 'user123';
|
||||
const firstName = 'Test';
|
||||
const lastName = 'User';
|
||||
|
||||
try {
|
||||
// Get tenant database connection info
|
||||
const tenant = await centralPrisma.tenant.findFirst({
|
||||
where: { slug: tenantSlug },
|
||||
});
|
||||
|
||||
if (!tenant) {
|
||||
console.log(`Tenant ${tenantSlug} not found. Creating tenant...`);
|
||||
|
||||
// Create tenant in central database
|
||||
const newTenant = await centralPrisma.tenant.create({
|
||||
data: {
|
||||
name: 'Default Tenant',
|
||||
slug: tenantSlug,
|
||||
dbHost: 'db',
|
||||
dbPort: 3306,
|
||||
dbName: 'platform',
|
||||
dbUsername: 'platform',
|
||||
dbPassword: 'platform',
|
||||
status: 'active',
|
||||
},
|
||||
});
|
||||
|
||||
console.log('Tenant created:', newTenant.slug);
|
||||
} else {
|
||||
console.log('Tenant found:', tenant.slug);
|
||||
}
|
||||
|
||||
const tenantInfo = tenant || {
|
||||
dbHost: 'db',
|
||||
dbPort: 3306,
|
||||
dbName: 'platform',
|
||||
dbUsername: 'platform',
|
||||
dbPassword: 'platform',
|
||||
};
|
||||
|
||||
// Connect to tenant database (using root for now since tenant password is encrypted)
|
||||
const tenantDb: Knex = knex({
|
||||
client: 'mysql2',
|
||||
connection: {
|
||||
host: tenantInfo.dbHost,
|
||||
port: tenantInfo.dbPort,
|
||||
database: tenantInfo.dbName,
|
||||
user: 'root',
|
||||
password: 'asjdnfqTash37faggT',
|
||||
},
|
||||
});
|
||||
|
||||
// Check if user already exists
|
||||
const existingUser = await tenantDb('users')
|
||||
.where({ email })
|
||||
.first();
|
||||
|
||||
if (existingUser) {
|
||||
console.log(`User ${email} already exists in tenant ${tenantSlug}`);
|
||||
await tenantDb.destroy();
|
||||
return;
|
||||
}
|
||||
|
||||
// Hash password
|
||||
const hashedPassword = await bcrypt.hash(password, 10);
|
||||
|
||||
// Create user
|
||||
await tenantDb('users').insert({
|
||||
email,
|
||||
password: hashedPassword,
|
||||
firstName,
|
||||
lastName,
|
||||
isActive: true,
|
||||
created_at: new Date(),
|
||||
updated_at: new Date(),
|
||||
});
|
||||
|
||||
console.log(`\nUser created successfully in tenant ${tenantSlug}!`);
|
||||
console.log('Email:', email);
|
||||
console.log('Password:', password);
|
||||
|
||||
// Create admin role if it doesn't exist
|
||||
let adminRole = await tenantDb('roles')
|
||||
.where({ name: 'admin' })
|
||||
.first();
|
||||
|
||||
if (!adminRole) {
|
||||
await tenantDb('roles').insert({
|
||||
name: 'admin',
|
||||
guardName: 'api',
|
||||
description: 'Administrator role with full access',
|
||||
created_at: new Date(),
|
||||
updated_at: new Date(),
|
||||
});
|
||||
|
||||
adminRole = await tenantDb('roles')
|
||||
.where({ name: 'admin' })
|
||||
.first();
|
||||
|
||||
console.log('Admin role created');
|
||||
}
|
||||
|
||||
// Get the created user
|
||||
const user = await tenantDb('users')
|
||||
.where({ email })
|
||||
.first();
|
||||
|
||||
// Assign admin role to user
|
||||
if (adminRole && user) {
|
||||
await tenantDb('user_roles').insert({
|
||||
userId: user.id,
|
||||
roleId: adminRole.id,
|
||||
created_at: new Date(),
|
||||
updated_at: new Date(),
|
||||
});
|
||||
|
||||
console.log('Admin role assigned to user');
|
||||
}
|
||||
|
||||
await tenantDb.destroy();
|
||||
} catch (error) {
|
||||
console.error('Error creating tenant user:', error);
|
||||
} finally {
|
||||
await centralPrisma.$disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
createTenantUser();
|
||||
Reference in New Issue
Block a user