Enhancements

Add independent option for adding/removing Emojis in URL argument.
Add support for reading API_MODE/API_TOKEN/MANAGED_PREFIX from environment variables.
Optimize codes.
This commit is contained in:
Tindy X
2020-06-15 13:50:54 +08:00
parent 0a7e1cac97
commit ee6de60223
5 changed files with 37 additions and 13 deletions

View File

@@ -1180,7 +1180,7 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS)
std::string ext_rename = UrlDecode(getUrlArg(argument, "rename"));
/// switches with default value
tribool upload = getUrlArg(argument, "upload"), emoji = getUrlArg(argument, "emoji");
tribool upload = getUrlArg(argument, "upload"), emoji = getUrlArg(argument, "emoji"), emoji_add = getUrlArg(argument, "add_emoji"), emoji_remove = getUrlArg(argument, "remove_emoji");
tribool append_type = getUrlArg(argument, "append_type"), tfo = getUrlArg(argument, "tfo"), udp = getUrlArg(argument, "udp"), nodelist = getUrlArg(argument, "list");
tribool sort_flag = getUrlArg(argument, "sort"), use_sort_script = getUrlArg(argument, "sort_script");
tribool clash_new_field = getUrlArg(argument, "new_name"), clash_script = getUrlArg(argument, "script"), add_insert = getUrlArg(argument, "insert");
@@ -1251,21 +1251,17 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS)
}
else
{
ext.add_emoji = add_emoji;
ext.remove_emoji = remove_old_emoji;
ext.add_emoji = emoji_add.get(add_emoji);
ext.remove_emoji = emoji_remove.get(remove_old_emoji);
}
ext.append_proxy_type = append_type.get(append_proxy_type);
if((target == "clash" || target == "clashr") && clash_script.is_undef())
expand.define(true);
/// read preference from argument
ext.tfo = tfo;
ext.udp = udp;
ext.skip_cert_verify = scv;
/// assign global var if not in argument
ext.tfo.define(tfo_flag);
ext.udp.define(udp_flag);
ext.skip_cert_verify.define(scv_flag);
/// read preference from argument, assign global var if not in argument
ext.tfo.read(tfo).read(tfo_flag);
ext.udp.read(udp).read(udp_flag);
ext.skip_cert_verify.read(scv).read(scv_flag);
ext.sort_flag = sort_flag.get(do_sort);
use_sort_script.define(sort_script.size() != 0);

View File

@@ -10,7 +10,7 @@
#include "webget.h"
#include "logger.h"
extern std::string pref_path, access_token, listen_address, gen_profile;
extern std::string pref_path, access_token, listen_address, gen_profile, managed_config_prefix;
extern bool api_mode, generator_mode, cfw_child_process, update_ruleset_on_request;
extern int listen_port, max_concurrent_threads, max_pending_connections;
extern string_array rulesets;
@@ -134,6 +134,13 @@ int main(int argc, char *argv[])
refreshRulesets(rulesets, ruleset_content_array);
generateBase();
std::string env_api_mode = GetEnv("API_MODE"), env_managed_prefix = GetEnv("MANAGED_PREFIX"), env_token = GetEnv("API_TOKEN");
api_mode = tribool().read(toLower(env_api_mode)).get(api_mode);
if(env_managed_prefix.size())
managed_config_prefix = env_managed_prefix;
if(env_token.size())
access_token = env_token;
if(generator_mode)
return simpleGenerator();

View File

@@ -1139,3 +1139,17 @@ std::string UTF8ToCodePoint(const std::string &data)
}
return ss.str();
}
std::string toLower(const std::string &str)
{
std::string result;
std::transform(str.begin(), str.end(), std::back_inserter(result), [](unsigned char c) { return std::tolower(c); });
return result;
}
std::string toUpper(const std::string &str)
{
std::string result;
std::transform(str.begin(), str.end(), std::back_inserter(result), [](unsigned char c) { return std::toupper(c); });
return result;
}

View File

@@ -72,6 +72,12 @@ public:
*this = value;
}
template <typename T> tribool read(const T &value)
{
define(value);
return *this;
}
bool get(const bool &def_value = false)
{
if(_M_VALUE == -1)
@@ -144,6 +150,8 @@ int shortAssemble(unsigned short num_a, unsigned short num_b);
void shortDisassemble(int source, unsigned short &num_a, unsigned short &num_b);
std::string UTF8ToCodePoint(const std::string &data);
std::string GetEnv(const std::string &name);
std::string toLower(const std::string &str);
std::string toUpper(const std::string &str);
std::string fileGet(const std::string &path, bool scope_limit = false);
int fileWrite(const std::string &path, const std::string &content, bool overwrite);

View File

@@ -59,7 +59,6 @@ duk_ret_t cb_resolve_module(duk_context *ctx)
resolved_id = foldPathString(resolved_id);
/* Arrive at the canonical module ID somehow. */
std::cout<<resolved_id<<std::endl;
if(!fileExist(resolved_id))
duk_push_undefined(ctx);
else