rpc-git: fix function calls

Signed-off-by: dzdidi <deniszalessky@gmail.com>
This commit is contained in:
dzdidi
2024-02-11 17:00:16 +00:00
parent b09615b1cf
commit 76dca8b5e6

View File

@@ -1,6 +1,7 @@
const ACL = require('../acl')
async getReposHandler (publicKey, req) { async function getReposHandler (publicKey, req) {
const { branch, url, userId } = await this.parseReq(publicKey, req) const { branch, url, userId } = await parseReq.bind(this)(publicKey, req)
const res = {} const res = {}
for (const repoName in this.repositories) { for (const repoName in this.repositories) {
@@ -14,8 +15,8 @@ async getReposHandler (publicKey, req) {
return Buffer.from(JSON.stringify(res)) return Buffer.from(JSON.stringify(res))
} }
async getRefsHandler (publicKey, req) { async function getRefsHandler (publicKey, req) {
const { repoName, branch, url, userId } = await this.parseReq(publicKey, req) const { repoName, branch, url, userId } = await parseReq.bind(this)(publicKey, req)
const res = this.repositories[repoName] const res = this.repositories[repoName]
const isPublic = (ACL.getACL(repoName).visibility === 'public') const isPublic = (ACL.getACL(repoName).visibility === 'public')
@@ -26,8 +27,8 @@ async getRefsHandler (publicKey, req) {
} }
} }
async pushHandler (publicKey, req) { async function pushHandler (publicKey, req) {
const { url, repoName, branch, userId } = await this.parseReq(publicKey, req) const { url, repoName, branch, userId } = await parseReq.bind(this)(publicKey, req)
const isContributor = ACL.getContributors(repoName).includes(userId) const isContributor = ACL.getContributors(repoName).includes(userId)
if (!isContributor) throw new Error('You are not allowed to push to this repo') if (!isContributor) throw new Error('You are not allowed to push to this repo')
@@ -51,8 +52,8 @@ async pushHandler (publicKey, req) {
}) })
} }
async forcePushHandler (publicKey, req) { async function forcePushHandler (publicKey, req) {
const { url, repoName, branch, userId } = await this.parseReq(publicKey, req) const { url, repoName, branch, userId } = await parseReq.bind(this)(publicKey, req)
const isContributor = ACL.getContributors(repoName).includes(userId) const isContributor = ACL.getContributors(repoName).includes(userId)
if (!isContributor) throw new Error('You are not allowed to push to this repo') if (!isContributor) throw new Error('You are not allowed to push to this repo')
@@ -76,33 +77,32 @@ async forcePushHandler (publicKey, req) {
}) })
} }
async deleteBranchHandler (publicKey, req) { async function deleteBranchHandler (publicKey, req) {
const { url, repoName, branch, userId } = await this.parseReq(publicKey, req) const { url, repoName, branch, userId } = await parseReq.bind(this)(publicKey, req)
const isContributor = ACL.getContributors(repoName).includes(userId) const isContributor = ACL.getContributors(repoName).includes(userId)
if (!isContributor) throw new Error('You are not allowed to push to this repo') if (!isContributor) throw new Error('You are not allowed to push to this repo')
const isProtectedBranch = ACL.getACL(repoName).protectedBranches.includes(branch) const isProtectedBranch = ACL.getACL(repoName).protectedBranches.includes(branch)
const isAdmin = ACL.getAdmins(repoName).includes(userId) const isAdmin = ACL.getAdmins(repoName).includes(userId)
if (isProtectedBranch && !isAdmin) throw new Error('You are not allowed to push to this branch') if (isProtectedBranch && !isAdmin) throw new Error('You are not allowed to push to this branch')
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {
const env = { ...process.env, GIT_DIR: home.getCodePath(repoName) } const env = { ...process.env, GIT_DIR: home.getCodePath(repoName) }
const child = spawn('git', ['branch', '-D', branch], { env }) const child = spawn('git', ['branch', '-D', branch], { env })
let errBuffer = Buffer.from('') let errBuffer = Buffer.from('')
child.stderr.on('data', data => { child.stderr.on('data', data => {
errBuffer = Buffer.concat([errBuffer, data]) errBuffer = Buffer.concat([errBuffer, data])
})
child.on('close', code => {
return code === 0 ? resolve(errBuffer) : reject(errBuffer)
})
}) })
}
child.on('close', code => {
return code === 0 ? resolve(errBuffer) : reject(errBuffer)
})
})
}
async parseReq(publicKey, req) { async function parseReq(publicKey, req) {
if (!req) throw new Error('Request is empty') if (!req) throw new Error('Request is empty')
const request = JSON.parse(req.toString()) const request = JSON.parse(req.toString())
const parsed = { const parsed = {