1 /**
2 	Copyright: © 2013 rejectedsoftware e.K.
3 	License: Subject to the terms of the GNU GPLv3 license, as written in the included LICENSE.txt file.
4 	Authors: Sönke Ludwig
5 */
6 module app;
7 
8 import dubregistry.dbcontroller;
9 import dubregistry.repositories.bitbucket;
10 import dubregistry.repositories.github;
11 import dubregistry.registry;
12 import dubregistry.web;
13 import dubregistry.api;
14 
15 import std.algorithm : sort;
16 import std.file;
17 import std.path;
18 import userman.web;
19 import vibe.d;
20 
21 
22 Task s_checkTask;
23 DubRegistry s_registry;
24 DubRegistryWebFrontend s_web;
25 
26 void startMonitoring()
27 {
28 	void monitorNewVersions()
29 	{
30 		while(true){
31 			s_registry.checkForNewVersions();
32 			sleep(30.minutes());
33 		}
34 	}
35 	s_checkTask = runTask(&monitorNewVersions);
36 }
37 
38 shared static this()
39 {
40 	setLogFile("log.txt", LogLevel.diagnostic);
41 
42 	import dub.internal.utils : jsonFromFile;
43 	auto regsettingsjson = jsonFromFile(Path("settings.json"), true);
44 	auto ghuser = regsettingsjson["github-user"].opt!string;
45 	auto ghpassword = regsettingsjson["github-password"].opt!string;
46 
47 	GithubRepository.register(ghuser, ghpassword);
48 	BitbucketRepository.register();
49 
50 	auto router = new URLRouter;
51 	router.get("*", (req, res) { if (!s_checkTask.running) startMonitoring(); });
52 
53 	// user management
54 	auto udbsettings = new UserManSettings;
55 	udbsettings.serviceName = "DUB - The D package registry";
56 	udbsettings.serviceUrl = URL("http://code.dlang.org/");
57 	udbsettings.serviceEmail = "noreply@vibed.org";
58 	udbsettings.databaseURL = "mongodb://127.0.0.1:27017/vpmreg";
59 	udbsettings.requireAccountValidation = false;
60 	auto userdb = createUserManController(udbsettings);
61 
62 	// VPM registry
63 	auto regsettings = new DubRegistrySettings;
64 	s_registry = new DubRegistry(regsettings);
65 
66 	// web front end
67 	s_web = router.registerDubRegistryWebFrontend(s_registry, userdb);
68 	router.registerDubRegistryWebApi(s_registry);
69 
70 	// start the web server
71  	auto settings = new HTTPServerSettings;
72 	settings.hostName = "code.dlang.org";
73 	settings.bindAddresses = ["127.0.0.1"];
74 	settings.port = 8005;
75 	settings.sessionStore = new MemorySessionStore;
76 
77 	listenHTTP(settings, router);
78 
79 	// poll github for new project versions
80 	startMonitoring();
81 }