Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix] Fix security issue by upgrading ansible version #598

Merged
merged 4 commits into from
Feb 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docker/testing_debian10.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ RUN apt-get update && apt-get install -y \
git python3-dev libpython3-dev libsmpeg0 libttspico-utils libsmpeg0 flac \
libffi-dev libffi-dev libssl-dev portaudio19-dev build-essential \
sox libatlas3-base mplayer wget vim sudo locales \
python3-pip pulseaudio-utils libasound2-plugins python3-pyaudio libasound-dev \
python3-distutils pulseaudio-utils libasound2-plugins python3-pyaudio libasound-dev \
libportaudio2 libportaudiocpp0 ffmpeg \
&& rm -rf /var/lib/apt/lists/*

RUN wget https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py
RUN pip3 install pyaudio "ansible==2.9.5"
#RUN pip3 install pyaudio

# add a standart user
Expand Down
6 changes: 4 additions & 2 deletions docker/testing_ubuntu_18_04.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ RUN apt-get update && apt-get install -y \
git python3-dev libsmpeg0 libttspico-utils libsmpeg0 flac \
libffi-dev libffi-dev libssl-dev portaudio19-dev build-essential \
sox libatlas3-base mplayer wget vim sudo locales alsa-base alsa-utils \
python3-pip pulseaudio-utils libasound2-plugins python3-pyaudio libasound-dev \
python3-distutils pulseaudio-utils libasound2-plugins python3-pyaudio libasound-dev \
libportaudio2 libportaudiocpp0 ffmpeg \
&& rm -rf /var/lib/apt/lists/*

RUN pip3 install pyaudio
RUN wget https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py

RUN pip3 install pyaudio "ansible==2.9.5"

# set UTF-8
ARG lang=en_US
Expand Down
68 changes: 68 additions & 0 deletions docs/brain/neurons/volume.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
Update the volume

## Input parameters

| parameter | required | type | default | choices | comment |
|:----------|:---------|:-------|:--------|:----------------|:-----------------------------------------------------------------------------------|
| level | yes | int | None | | The volume level to set or increase or decrease depending of the selected 'action' |
| action | no | string | set | set,raise,lower | The action to apply to the volume |

Action type:

- **set:** set the 'level' value as new volume level
- **raise:** increase the current volume level with the value provided in 'level'
- **lower:** decrease the current volume level with the value provided in 'level'

## Returned values

| name | description | type | sample |
|:--------------|:---------------------------------------|:-------|:-------|
| asked_level | The level variable sent to the neuron | int | 22 |
| asked_action | The action variable sent to the neuron | string | set |
| current_level | The current volume level on the system | int | 50 |


## Synapses example

Set the volume to 50%
```yaml
- name: "set-volume"
signals:
- order: "set the volume to 50"
neurons:
- volume:
level: "50"
```
Set the volume dynamically
```yaml
- name: "set-volume-dynamic"
signals:
- order: "set the volume to {{ volume }}"
neurons:
- volume:
level: "{{ volume }}"
```
>**Note:** Depending of your STT engine, the caught 'volume' variable can be a string. For example "twenty" instead of "20".
Raise the volume
```yaml
- name: "raise-volume"
signals:
- order: "raise the volume"
neurons:
- volume:
level: "10"
action: "raise"
```
Reduce the volume
```yaml
- name: "lower-volume"
signals:
- order: "reduce the volume"
neurons:
- volume:
level: "10"
action: "lower"
```
2 changes: 1 addition & 1 deletion docs/installation/ubuntu.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Install some required system libraries and software:

```bash
sudo apt update
sudo install -y \
sudo apt install -y \
git python3-dev python3.7-dev libsmpeg0 libttspico-utils flac \
libffi-dev libssl-dev portaudio19-dev build-essential \
sox libatlas3-base mplayer wget vim sudo locales alsa-base alsa-utils \
Expand Down
Empty file.
83 changes: 83 additions & 0 deletions kalliope/neurons/volume/volume.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import logging

from kalliope.core import NeuronModule
import alsaaudio

from kalliope.core.NeuronModule import InvalidParameterException

logging.basicConfig()
logger = logging.getLogger("kalliope")


class SoundManager(object):

try:
m = alsaaudio.Mixer()
except alsaaudio.ALSAAudioError:
# no master, we are on a Rpi
try:
m = alsaaudio.Mixer("PCM")
except alsaaudio.ALSAAudioError:
# no audio config at all
m = None

@classmethod
def set_volume(cls, volume_level):
if cls.m is not None:
cls.m.setvolume(int(volume_level))

@classmethod
def get_volume(cls):
if cls.m is not None:
vol = cls.m.getvolume()
return int(vol[0])
return None


class Volume(NeuronModule):

def __init__(self, **kwargs):
super(Volume, self).__init__(**kwargs)

self.level = kwargs.get('level', None)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Level expects an int and the default value isNone. it can lead to type incompatibility in the next linesm such as self.level - current_level.
Maybe we could replace the default value to 0

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry i merged before answering. I saw that you approved.
Anyway, the level is tested in the method below. It will fail if it's not an integer. And this parameter is mandatory.

self.action = kwargs.get('action', "set") # can be set, raise or lower

# check parameters
if self._is_parameters_ok():
if self.action == "set":
logger.debug("[Volume] set volume to: {}".format(self.level))
SoundManager.set_volume(self.level)
if self.action == "raise":
current_level = SoundManager.get_volume()
level_to_set = self.level + current_level
if level_to_set > 100:
level_to_set = 100
logger.debug("[Volume] set volume to: {}".format(level_to_set))
SoundManager.set_volume(level_to_set)
if self.action == "lower":
current_level = SoundManager.get_volume()
level_to_set = self.level - current_level
if level_to_set < 0:
level_to_set = 0
logger.debug("[Volume] set volume to: {}".format(level_to_set))
SoundManager.set_volume(level_to_set)

message = {
"asked_level": self.level,
"asked_action": self.action,
"current_level": SoundManager.get_volume()
}
self.say(message)

def _is_parameters_ok(self):
if self.level is None:
raise InvalidParameterException("[Volume] level need to be set")
try:
self.level = int(self.level)
except ValueError:
raise InvalidParameterException("[Volume] level '{}' is not a valid integer".format(self.level))
if self.level < 0 or self.level > 100:
raise InvalidParameterException("[Volume] level need to be placed between 0 and 100")
if self.action not in ["set", "raise", "lower"]:
raise InvalidParameterException("[Volume] action can be 'set', 'raise' or 'lower'")
return True
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ pages:
- sleep: "brain/neurons/sleep.md"
- systemdate: "brain/neurons/systemdate.md"
- uri: "brain/neurons/uri.md"
- volume: "brain/neurons/volume.md"
- Community modules: "brain/community_modules.md"
- CLI: "cli.md"
- API:
Expand Down
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,14 @@ def package_files(directory):
python_requires=">=3.6",
# required libs
install_requires=[
'Werkzeug==0.16.1',
'pyyaml>=5.1',
'six>=1.12.0',
'SpeechRecognition>=3.8.1',
'markupsafe>=1.1.1',
'pyaudio>=0.2.11',
'pyasn1>=0.4.5',
'ansible>=2.8.1,<2.9',
'ansible>=2.9.5',
'jinja2>=2.10.1',
'cffi>=1.12.3',
'ipaddress>=1.0.17',
Expand Down