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 }