void SG_user__set_user__repo( SG_context* pCtx, SG_repo* pRepo, const char* psz_email ) { SG_vhash* pvh_user = NULL; char* psz_admin_id = NULL; const char* psz_userid = NULL; SG_string* pstr_path = NULL; SG_ERR_CHECK( SG_STRING__ALLOC(pCtx, &pstr_path) ); if (pRepo) { SG_ERR_CHECK( SG_user__lookup_by_email(pCtx, pRepo, psz_email, &pvh_user) ); if (!pvh_user) { SG_ERR_THROW( SG_ERR_USER_NOT_FOUND ); } SG_ERR_CHECK( SG_vhash__get__sz(pCtx, pvh_user, SG_ZING_FIELD__RECID, &psz_userid) ); SG_ERR_CHECK( SG_repo__get_admin_id(pCtx, pRepo, &psz_admin_id) ); // we store this userid under the admin scope of the repo we were given SG_ERR_CHECK( SG_string__sprintf(pCtx, pstr_path, "%s/%s/%s", SG_LOCALSETTING__SCOPE__ADMIN, psz_admin_id, SG_LOCALSETTING__USERID ) ); SG_ERR_CHECK( SG_localsettings__update__sz(pCtx, SG_string__sz(pstr_path), psz_userid) ); } // AND we store this email address in machine scope for fallback lookups SG_ERR_CHECK( SG_string__sprintf(pCtx, pstr_path, "%s/%s", SG_LOCALSETTING__SCOPE__MACHINE, SG_LOCALSETTING__USEREMAIL ) ); SG_ERR_CHECK( SG_localsettings__update__sz(pCtx, SG_string__sz(pstr_path), psz_email) ); fail: SG_STRING_NULLFREE(pCtx, pstr_path); SG_NULLFREE(pCtx, psz_admin_id); SG_VHASH_NULLFREE(pCtx, pvh_user); }
void SetProfileSettings( SG_context* pCtx, const char* szProfile, const char* pszDest, const char* pszSrc, SG_int64 lSyncIntervalMinutes) { SG_string* pstrConfigPath = NULL; SG_ERR_CHECK( SG_string__alloc__format(pCtx, &pstrConfigPath, "%s/%s/%s", CONFIG_ROOT, szProfile, CONFIG_DEST) ); SG_ERR_CHECK( SG_localsettings__update__sz(pCtx, SG_string__sz(pstrConfigPath), pszDest) ); SG_ERR_CHECK( SG_string__clear(pCtx, pstrConfigPath) ); SG_ERR_CHECK( SG_string__append__format(pCtx, pstrConfigPath, "%s/%s/%s", CONFIG_ROOT, szProfile, CONFIG_SRC) ); SG_ERR_CHECK( SG_localsettings__update__sz(pCtx, SG_string__sz(pstrConfigPath), pszSrc) ); SG_ERR_CHECK( SG_string__clear(pCtx, pstrConfigPath) ); SG_ERR_CHECK( SG_string__append__format(pCtx, pstrConfigPath, "%s/%s/%s", CONFIG_ROOT, szProfile, CONFIG_INTERVAL) ); SG_ERR_CHECK( SG_localsettings__update__int64(pCtx, SG_string__sz(pstrConfigPath), lSyncIntervalMinutes) ); /* common cleanup */ fail: SG_STRING_NULLFREE(pCtx, pstrConfigPath); }