int goahead_main(int argc, char **argv) { char *argp, *home, *documents, *endpoints, *endpoint, *route, *auth, *tok, *lspec; int argind; #if WINDOWS if (windowsInit() < 0) { return 0; } #endif route = "/nand/route.txt"; auth = "/nand/auth.txt"; for (argind = 1; argind < argc; argind++) { argp = argv[argind]; if (*argp != '-') { break; } else if (smatch(argp, "--auth") || smatch(argp, "-a")) { auth = argv[++argind]; #if ME_UNIX_LIKE && !MACOSX } else if (smatch(argp, "--background") || smatch(argp, "-b")) { websSetBackground(1); #endif } else if (smatch(argp, "--debugger") || smatch(argp, "-d") || smatch(argp, "-D")) { websSetDebug(1); } else if (smatch(argp, "--home")) { if (argind >= argc) usage(); home = argv[++argind]; if (chdir(home) < 0) { error("Can't change directory to %s", home); exit(-1); } } else if (smatch(argp, "--log") || smatch(argp, "-l")) { if (argind >= argc) usage(); logSetPath(argv[++argind]); } else if (smatch(argp, "--verbose") || smatch(argp, "-v")) { logSetPath("stdout:2"); } else if (smatch(argp, "--route") || smatch(argp, "-r")) { route = argv[++argind]; } else if (smatch(argp, "--version") || smatch(argp, "-V")) { printf("%s\n", ME_VERSION); exit(0); } else if (*argp == '-' && isdigit((uchar) argp[1])) { lspec = sfmt("stdout:%s", &argp[1]); logSetPath(lspec); wfree(lspec); } else { usage(); } } documents = ME_GOAHEAD_DOCUMENTS; if (argc > argind) { documents = argv[argind++]; } initPlatform(); if (websOpen(documents, route) < 0) { error("Can't initialize server. Exiting."); return -1; } if (websLoad(auth) < 0) { error("Can't load %s", auth); return -1; } logHeader(); if (argind < argc) { while (argind < argc) { endpoint = argv[argind++]; if (websListen(endpoint) < 0) { return -1; } } } else { endpoints = sclone(ME_GOAHEAD_LISTEN); for (endpoint = stok(endpoints, ", \t", &tok); endpoint; endpoint = stok(NULL, ", \t,", &tok)) { #if !ME_COM_SSL if (strstr(endpoint, "https")) continue; #endif if (websListen(endpoint) < 0) { return -1; } } wfree(endpoints); } #if ME_ROM && KEEP /* If not using a route/auth config files, then manually create the routes like this: If custom matching is required, use websSetRouteMatch. If authentication is required, use websSetRouteAuth. */ websAddRoute("/", "file", 0); #endif #if ME_UNIX_LIKE && !MACOSX /* Service events till terminated */ if (websGetBackground()) { if (daemon(0, 0) < 0) { error("Can't run as daemon"); return -1; } } #endif websServiceEvents(&finished); logmsg(1, "Instructed to exit"); websClose(); #if WINDOWS windowsClose(); #endif return 0; }
int main(int argc, char *argv[]) { WebsBuf buf; char *password, *authFile, *username, *encodedPassword, *realm, *cp, *roles; int i, errflg, create, nextArg; username = 0; create = errflg = 0; password = 0; for (i = 1; i < argc && !errflg; i++) { if (argv[i][0] != '-') { break; } for (cp = &argv[i][1]; *cp && !errflg; cp++) { if (*cp == 'c') { create++; } else if (*cp == 'p') { if (++i == argc) { errflg++; } else { password = argv[i]; break; } } else { errflg++; } } } nextArg = i; if ((nextArg + 3) > argc) { errflg++; } if (errflg) { printUsage(); exit(2); } authFile = argv[nextArg++]; realm = argv[nextArg++]; username = argv[nextArg++]; bufCreate(&buf, 0, 0); for (i = nextArg; i < argc; ) { bufPutStr(&buf, argv[i]); if (++i < argc) { bufPutc(&buf, ','); } } roles = sclone(buf.servp); websOpenAuth(1); if (!create) { if (websLoad(authFile) < 0) { exit(2); } if (access(authFile, W_OK) < 0) { error("Can't write to %s", authFile); exit(4); } } else if (access(authFile, R_OK) < 0) { error("Can't create %s, already exists", authFile); exit(5); } if (!password && (password = getPassword()) == 0) { exit(1); } encodedPassword = websMD5(sfmt("%s:%s:%s", username, realm, password)); websRemoveUser(username); if (websAddUser(username, encodedPassword, roles) < 0) { exit(7); } if (writeAuthFile(authFile) < 0) { exit(6); } websCloseAuth(); return 0; }
MAIN(goahead, int argc, char **argv, char **envp) { char *argp, *auth, *home, *documents, *endpoints, *endpoint, *route, *tok; int argind; route = "route.txt"; auth = "auth.txt"; for (argind = 1; argind < argc; argind++) { argp = argv[argind]; if (*argp != '-') { break; } else if (smatch(argp, "--auth") || smatch(argp, "-a")) { if (argind >= argc) usage(); auth = argv[++argind]; } else if (smatch(argp, "--background") || smatch(argp, "-b")) { websSetBackground(1); } else if (smatch(argp, "--debugger") || smatch(argp, "-d") || smatch(argp, "-D")) { websSetDebug(1); } else if (smatch(argp, "--home")) { if (argind >= argc) usage(); home = argv[++argind]; if (chdir(home) < 0) { error("Can't change directory to %s", home); exit(-1); } } else if (smatch(argp, "--log") || smatch(argp, "-l")) { if (argind >= argc) usage(); logSetPath(argv[++argind]); } else if (smatch(argp, "--verbose") || smatch(argp, "-v")) { logSetPath("stdout:2"); } else if (smatch(argp, "--route") || smatch(argp, "-r")) { route = argv[++argind]; } else if (smatch(argp, "--version") || smatch(argp, "-V")) { printf("%s: %s-%s\n", BIT_PRODUCT, BIT_VERSION, BIT_BUILD_NUMBER); exit(0); } else { usage(); } } documents = BIT_GOAHEAD_DOCUMENTS; if (argc > argind) { documents = argv[argind++]; } initPlatform(); if (websOpen(documents, route) < 0) { error("Can't initialize server. Exiting."); return -1; } logHeader(); if (websLoad(auth) < 0) { error("Can't load %s", auth); return -1; } if (argind < argc) { while (argind < argc) { endpoint = argv[argind++]; if (websListen(endpoint) < 0) { return -1; } } } else { endpoints = sclone(BIT_GOAHEAD_LISTEN); for (endpoint = stok(endpoints, ", \t", &tok); endpoint; endpoint = stok(NULL, ", \t,", &tok)) { if (websListen(endpoint) < 0) { return -1; } } wfree(endpoints); } websDefineHandler("test", testHandler, 0, 0); websAddRoute("/test", "test", 0); #if BIT_GOAHEAD_LEGACY websUrlHandlerDefine("/legacy/", 0, 0, legacyTest, 0); #endif #if BIT_GOAHEAD_JAVASCRIPT websDefineJst("aspTest", aspTest); websDefineJst("bigTest", bigTest); #endif websDefineAction("test", actionTest); websDefineAction("sessionTest", sessionTest); websDefineAction("showTest", showTest); #if BIT_GOAHEAD_UPLOAD websDefineAction("uploadTest", uploadTest); #endif #if BIT_UNIX_LIKE /* Service events till terminated */ if (websGetBackground()) { if (daemon(0, 0) < 0) { error("Can't run as daemon"); return -1; } } #endif websServiceEvents(&finished); trace(1, "Instructed to exit\n"); websClose(); return 0; }
MAIN(goahead, int argc, char **argv, char **envp) { char *argp, *auth, *home, *documents, *endpoints, *endpoint, *route, *tok, *lspec; int argind, duration; route = "route.txt"; auth = "auth.txt"; duration = 0; for (argind = 1; argind < argc; argind++) { argp = argv[argind]; if (*argp != '-') { break; } else if (smatch(argp, "--auth") || smatch(argp, "-a")) { if (argind >= argc) usage(); auth = argv[++argind]; #if ME_UNIX_LIKE && !MACOSX } else if (smatch(argp, "--background") || smatch(argp, "-b")) { websSetBackground(1); #endif } else if (smatch(argp, "--debugger") || smatch(argp, "-d") || smatch(argp, "-D")) { websSetDebug(1); } else if (smatch(argp, "--duration")) { if (argind >= argc) usage(); duration = atoi(argv[++argind]); } else if (smatch(argp, "--home")) { if (argind >= argc) usage(); home = argv[++argind]; if (chdir(home) < 0) { error("Cannot change directory to %s", home); exit(-1); } } else if (smatch(argp, "--log") || smatch(argp, "-l")) { if (argind >= argc) usage(); logSetPath(argv[++argind]); } else if (smatch(argp, "--verbose") || smatch(argp, "-v")) { logSetPath("stdout:2"); } else if (smatch(argp, "--route") || smatch(argp, "-r")) { route = argv[++argind]; } else if (smatch(argp, "--version") || smatch(argp, "-V")) { printf("%s\n", ME_VERSION); exit(0); } else if (*argp == '-' && isdigit((uchar) argp[1])) { lspec = sfmt("stdout:%s", &argp[1]); logSetPath(lspec); wfree(lspec); } else { usage(); } } documents = ME_GOAHEAD_DOCUMENTS; if (argc > argind) { documents = argv[argind++]; } initPlatform(); if (websOpen(documents, route) < 0) { error("Cannot initialize server. Exiting."); return -1; } logHeader(); if (websLoad(auth) < 0) { error("Cannot load %s", auth); return -1; } if (argind < argc) { while (argind < argc) { endpoint = argv[argind++]; if (websListen(endpoint) < 0) { return -1; } } } else { endpoints = sclone(ME_GOAHEAD_LISTEN); for (endpoint = stok(endpoints, ", \t", &tok); endpoint; endpoint = stok(NULL, ", \t,", &tok)) { if (websListen(endpoint) < 0) { return -1; } } wfree(endpoints); } websDefineHandler("test", testHandler, 0, 0, 0); websAddRoute("/test", "test", 0); #if ME_GOAHEAD_LEGACY websUrlHandlerDefine("/legacy/", 0, 0, legacyTest, 0); #endif #if ME_GOAHEAD_JAVASCRIPT websDefineJst("aspTest", aspTest); websDefineJst("bigTest", bigTest); #endif websDefineAction("test", actionTest); websDefineAction("sessionTest", sessionTest); websDefineAction("showTest", showTest); #if ME_GOAHEAD_UPLOAD && !ME_ROM websDefineAction("uploadTest", uploadTest); #endif #if ME_UNIX_LIKE && !MACOSX /* Service events till terminated */ if (websGetBackground()) { if (daemon(0, 0) < 0) { error("Cannot run as daemon"); return -1; } } #endif if (duration) { printf("Running for %d secs\n", duration); websStartEvent(duration * 1000, (WebsEventProc) exitProc, 0); } websServiceEvents(&finished); logmsg(1, "Instructed to exit\n"); websClose(); return 0; }