Example #1
0
static char *set_eval_away_status( set_t *set, char *value )
{
	bee_t *bee = set->data;
	account_t *a;
	
	g_free( set->value );
	set->value = g_strdup( value );
	
	for( a = bee->accounts; a; a = a->next )
	{
		struct im_connection *ic = a->ic;
		
		if( ic && ic->flags & OPT_LOGGED_IN )
			imc_away_send_update( ic );
	}
	
	return value;
}
Example #2
0
char *set_eval_account( set_t *set, char *value )
{
    account_t *acc = set->data;

    /* Double-check: We refuse to edit on-line accounts. */
    if( set->flags & ACC_SET_OFFLINE_ONLY && acc->ic )
        return SET_INVALID;

    if( strcmp( set->key, "server" ) == 0 )
    {
        g_free( acc->server );
        if( value && *value )
        {
            acc->server = g_strdup( value );
            return value;
        }
        else
        {
            acc->server = g_strdup( set->def );
            return g_strdup( set->def );
        }
    }
    else if( strcmp( set->key, "username" ) == 0 )
    {
        g_free( acc->user );
        acc->user = g_strdup( value );
        return value;
    }
    else if( strcmp( set->key, "password" ) == 0 )
    {
        /* set -del should be allowed now, but I don't want to have any
           NULL pointers to have to deal with. */
        if( !value )
            value = "";

        g_free( acc->pass );
        acc->pass = g_strdup( value );
        return NULL;	/* password shouldn't be visible in plaintext! */
    }
    else if( strcmp( set->key, "tag" ) == 0 )
    {
        account_t *oa;

        /* Enforce uniqueness. */
        if( ( oa = account_by_tag( acc->bee, value ) ) && oa != acc )
            return SET_INVALID;

        g_free( acc->tag );
        acc->tag = g_strdup( value );
        return value;
    }
    else if( strcmp( set->key, "auto_connect" ) == 0 )
    {
        if( !is_bool( value ) )
            return SET_INVALID;

        acc->auto_connect = bool2int( value );
        return value;
    }
    else if( strcmp( set->key, "away" ) == 0 ||
             strcmp( set->key, "status" ) == 0 )
    {
        if( acc->ic && acc->ic->flags & OPT_LOGGED_IN )
        {
            /* If we're currently on-line, set the var now already
               (bit of a hack) and send an update. */
            g_free( set->value );
            set->value = g_strdup( value );

            imc_away_send_update( acc->ic );
        }

        return value;
    }

    return SET_INVALID;
}
Example #3
0
char *set_eval_account(set_t *set, char *value)
{
	account_t *acc = set->data;

	/* Double-check: We refuse to edit on-line accounts. */
	if (set->flags & ACC_SET_OFFLINE_ONLY && acc->ic) {
		return SET_INVALID;
	}

	if (strcmp(set->key, "server") == 0) {
		g_free(acc->server);
		if (value && *value) {
			acc->server = g_strdup(value);
			return value;
		} else {
			acc->server = g_strdup(set->def);
			return g_strdup(set->def);
		}
	} else if (strcmp(set->key, "username") == 0) {
		g_free(acc->user);
		acc->user = g_strdup(value);
		return value;
	} else if (strcmp(set->key, "password") == 0) {
		/* set -del allows /oper to be used to change the password or,
		   iff oauth is enabled, reset the oauth credential magic.
		*/
		if (!value) {
			if (set_getbool(&(acc->set), "oauth")) {
				value = "";
			} else {
				value = PASSWORD_PENDING;
				((irc_t *) acc->bee->ui_data)->status |= OPER_HACK_ACCOUNT_PASSWORD;
				irc_rootmsg((irc_t *) acc->bee->ui_data, "You may now use /OPER to set the password");
			}
		}

		g_free(acc->pass);
		acc->pass = g_strdup(value);
		return NULL;    /* password shouldn't be visible in plaintext! */
	} else if (strcmp(set->key, "tag") == 0) {
		account_t *oa;

		/* Enforce uniqueness. */
		if ((oa = account_by_tag(acc->bee, value)) && oa != acc) {
			return SET_INVALID;
		}

		g_free(acc->tag);
		acc->tag = g_strdup(value);
		return value;
	} else if (strcmp(set->key, "auto_connect") == 0) {
		if (!is_bool(value)) {
			return SET_INVALID;
		}

		acc->auto_connect = bool2int(value);
		return value;
	} else if (strcmp(set->key, "away") == 0 ||
	           strcmp(set->key, "status") == 0) {
		if (acc->ic && acc->ic->flags & OPT_LOGGED_IN) {
			/* If we're currently on-line, set the var now already
			   (bit of a hack) and send an update. */
			g_free(set->value);
			set->value = g_strdup(value);

			imc_away_send_update(acc->ic);
		}

		return value;
	}

	return SET_INVALID;
}