forked from vieter-v/vieter
				
			Updated routes for multi-repo setup (untested)
							parent
							
								
									a47cace296
								
							
						
					
					
						commit
						014ade5092
					
				| 
						 | 
				
			
			@ -70,8 +70,12 @@ fn (r &RepoGroupManager) add_pkg_in_repo(repo string, pkg &package.Pkg) ?bool {
 | 
			
		|||
	if pkg.info.arch == "any" {
 | 
			
		||||
		repo_dir := os.join_path_single(r.data_dir, repo)
 | 
			
		||||
 | 
			
		||||
		// We get a listing of all currently present arch-repos in the given repo
 | 
			
		||||
		mut arch_repos := os.ls(repo_dir) ?.filter(os.is_dir(os.join_path_single(repo_dir, it)))
 | 
			
		||||
		mut arch_repos := []string{}
 | 
			
		||||
 | 
			
		||||
		if os.exists(repo_dir) {
 | 
			
		||||
			// We get a listing of all currently present arch-repos in the given repo
 | 
			
		||||
			arch_repos = os.ls(repo_dir) ?.filter(os.is_dir(os.join_path_single(repo_dir, it)))
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if arch_repos.len == 0 {
 | 
			
		||||
			arch_repos << r.default_arch
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,8 +8,6 @@ import rand
 | 
			
		|||
import util
 | 
			
		||||
import net.http
 | 
			
		||||
 | 
			
		||||
const default_repo = "vieter"
 | 
			
		||||
 | 
			
		||||
// healthcheck just returns a string, but can be used to quickly check if the
 | 
			
		||||
// server is still responsive.
 | 
			
		||||
['/health'; get]
 | 
			
		||||
| 
						 | 
				
			
			@ -17,15 +15,20 @@ pub fn (mut app App) healthcheck() web.Result {
 | 
			
		|||
	return app.text('Healthy')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// get_root handles a GET request for a file on the root
 | 
			
		||||
['/:filename'; get; head]
 | 
			
		||||
fn (mut app App) get_root(filename string) web.Result {
 | 
			
		||||
['/:repo/:arch/:filename'; get; head]
 | 
			
		||||
fn (mut app App) get_repo_file(repo string, arch string, filename string) web.Result {
 | 
			
		||||
	mut full_path := ''
 | 
			
		||||
 | 
			
		||||
	if filename.ends_with('.db') || filename.ends_with('.files') {
 | 
			
		||||
		full_path = os.join_path_single(app.repo.data_dir, '${filename}.tar.gz')
 | 
			
		||||
	} else if filename.ends_with('.db.tar.gz') || filename.ends_with('.files.tar.gz') {
 | 
			
		||||
		full_path = os.join_path_single(app.repo.data_dir, '$filename')
 | 
			
		||||
	db_exts := ['.db', '.files', '.db.tar.gz', '.files.tar.gz']
 | 
			
		||||
 | 
			
		||||
	if db_exts.any(filename.ends_with(it)) {
 | 
			
		||||
		full_path = os.join_path(app.repo.data_dir, repo, arch, filename)
 | 
			
		||||
 | 
			
		||||
		// repo-add does this using symlinks, but we just change the requested
 | 
			
		||||
		// path
 | 
			
		||||
		if !full_path.ends_with('.tar.gz') {
 | 
			
		||||
			full_path += '.tar.gz'
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		full_path = os.join_path_single(app.repo.pkg_dir, filename)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -42,8 +45,8 @@ fn (mut app App) get_root(filename string) web.Result {
 | 
			
		|||
	return app.file(full_path)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
['/publish'; post]
 | 
			
		||||
fn (mut app App) put_package() web.Result {
 | 
			
		||||
['/:repo/publish'; post]
 | 
			
		||||
fn (mut app App) put_package(repo string) web.Result {
 | 
			
		||||
	if !app.is_authorized() {
 | 
			
		||||
		return app.text('Unauthorized.')
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +79,7 @@ fn (mut app App) put_package() web.Result {
 | 
			
		|||
		return app.text("Content-Type header isn't set.")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	res := app.repo.add_pkg_from_path(default_repo, pkg_path) or {
 | 
			
		||||
	res := app.repo.add_pkg_from_path(repo, pkg_path) or {
 | 
			
		||||
		app.lerror('Error while adding package: $err.msg')
 | 
			
		||||
 | 
			
		||||
		os.rm(pkg_path) or { app.lerror("Failed to remove download '$pkg_path': $err.msg") }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								test.py
								
								
								
								
							
							
						
						
									
										2
									
								
								test.py
								
								
								
								
							| 
						 | 
				
			
			@ -97,7 +97,7 @@ async def upload_random_package(tar_path, sem):
 | 
			
		|||
    async with sem:
 | 
			
		||||
        with open(tar_path, 'rb') as f:
 | 
			
		||||
            async with aiohttp.ClientSession() as s:
 | 
			
		||||
                async with s.post("http://localhost:8000/publish", data=f.read(), headers={"x-api-key": "test"}) as r:
 | 
			
		||||
                async with s.post("http://localhost:8000/vieter/publish", data=f.read(), headers={"x-api-key": "test"}) as r:
 | 
			
		||||
                    return await check_output(r)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue