From 8972b5c8216fc46cb7534213412dff1a6d74a7b8 Mon Sep 17 00:00:00 2001 From: Stefan-5422 <32109571+Stefan-5422@users.noreply.github.com> Date: Wed, 25 Jan 2023 11:20:08 +0100 Subject: [PATCH 01/85] =?UTF-8?q?Microsoft=20is=20dead=20=F0=9F=A6=80?= =?UTF-8?q?=F0=9F=A6=80=F0=9F=A6=80=F0=9F=A6=80=F0=9F=A6=80=F0=9F=A6=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Elektrifikatsiya/Elektrifikatsiya.sln | 8 +- .../Elektrifikatsiya/Elektrifikatsiya.csproj | 1 + src/Elektrifikatsiya/docker-compose.dcproj | 18 + .../docker-compose.override.yml | 13 + src/Elektrifikatsiya/docker-compose.yml | 33 + .../host/mqtt/mosquitto/config/mosquitto.conf | 904 ++++++++++++++++++ .../host/mqtt/mqtt2prom/config.yaml | 62 ++ .../host/prometheus/prometheus.yml | 15 + 8 files changed, 1053 insertions(+), 1 deletion(-) create mode 100644 src/Elektrifikatsiya/docker-compose.dcproj create mode 100644 src/Elektrifikatsiya/docker-compose.override.yml create mode 100644 src/Elektrifikatsiya/docker-compose.yml create mode 100644 src/Elektrifikatsiya/host/mqtt/mosquitto/config/mosquitto.conf create mode 100644 src/Elektrifikatsiya/host/mqtt/mqtt2prom/config.yaml create mode 100644 src/Elektrifikatsiya/host/prometheus/prometheus.yml diff --git a/src/Elektrifikatsiya/Elektrifikatsiya.sln b/src/Elektrifikatsiya/Elektrifikatsiya.sln index 7b2638d..3257144 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya.sln +++ b/src/Elektrifikatsiya/Elektrifikatsiya.sln @@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33205.214 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elektrifikatsiya", "Elektrifikatsiya\Elektrifikatsiya.csproj", "{B35B4694-ACC4-4CD6-9518-B338F30111A0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elektrifikatsiya", "Elektrifikatsiya\Elektrifikatsiya.csproj", "{B35B4694-ACC4-4CD6-9518-B338F30111A0}" +EndProject +Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{7350C55E-0EAD-47DE-A1E0-2A2EA3291D0B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -15,6 +17,10 @@ Global {B35B4694-ACC4-4CD6-9518-B338F30111A0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B35B4694-ACC4-4CD6-9518-B338F30111A0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B35B4694-ACC4-4CD6-9518-B338F30111A0}.Release|Any CPU.Build.0 = Release|Any CPU + {7350C55E-0EAD-47DE-A1E0-2A2EA3291D0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7350C55E-0EAD-47DE-A1E0-2A2EA3291D0B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7350C55E-0EAD-47DE-A1E0-2A2EA3291D0B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7350C55E-0EAD-47DE-A1E0-2A2EA3291D0B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 6b1a00c..7653e0e 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -14,6 +14,7 @@ Copyright 2018-2022 Megabit bd144edc-e5c5-4b97-84d6-38c6b1edcbf9 Linux + ..\docker-compose.dcproj diff --git a/src/Elektrifikatsiya/docker-compose.dcproj b/src/Elektrifikatsiya/docker-compose.dcproj new file mode 100644 index 0000000..8ee605c --- /dev/null +++ b/src/Elektrifikatsiya/docker-compose.dcproj @@ -0,0 +1,18 @@ + + + + 2.1 + Linux + 7350c55e-0ead-47de-a1e0-2a2ea3291d0b + LaunchBrowser + {Scheme}://localhost:{ServicePort} + elektrifikatsiya + + + + docker-compose.yml + + + + + \ No newline at end of file diff --git a/src/Elektrifikatsiya/docker-compose.override.yml b/src/Elektrifikatsiya/docker-compose.override.yml new file mode 100644 index 0000000..42bf3e9 --- /dev/null +++ b/src/Elektrifikatsiya/docker-compose.override.yml @@ -0,0 +1,13 @@ +version: '3.4' + +services: + elektrifikatsiya: + environment: + - ASPNETCORE_ENVIRONMENT=Development + - ASPNETCORE_URLS=https://+:443;http://+:80 + ports: + - "80" + - "443" + volumes: + - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro + - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro \ No newline at end of file diff --git a/src/Elektrifikatsiya/docker-compose.yml b/src/Elektrifikatsiya/docker-compose.yml new file mode 100644 index 0000000..dc7c374 --- /dev/null +++ b/src/Elektrifikatsiya/docker-compose.yml @@ -0,0 +1,33 @@ +version: '3.4' + +services: + elektrifikatsiya: + build: + context: . + dockerfile: Elektrifikatsiya/Dockerfile + prometheus: + image: prom/prometheus:latest + volumes: + - ./host/prometheus/:/etc/prometheus/ + - prometheus_data:/prometheus + ports: + - 9090:9090 + mqtt2prom: + image: ghcr.io/hikhvar/mqtt2prometheus:latest + volumes: + - ./host/mqtt/mqtt2prom/config.yaml:/config.yaml + ports: + - 9641:9641 + mosquitto: + image: eclipse-mosquitto:2 + volumes: + - ./host/mqtt/mosquitto/config/:/mosquitto/config/:ro + - ./host/log/mqtt/mosquitto/:/mosquitto/log/ + - mosquitto_data:/mosquitto/data/ + ports: + - 1883:1883 + - 9001:9001 + +volumes: + mosquitto_data: + prometheus_data: \ No newline at end of file diff --git a/src/Elektrifikatsiya/host/mqtt/mosquitto/config/mosquitto.conf b/src/Elektrifikatsiya/host/mqtt/mosquitto/config/mosquitto.conf new file mode 100644 index 0000000..9ddba6a --- /dev/null +++ b/src/Elektrifikatsiya/host/mqtt/mosquitto/config/mosquitto.conf @@ -0,0 +1,904 @@ +# Config file for mosquitto +# +# See mosquitto.conf(5) for more information. +# +# Default values are shown, uncomment to change. +# +# Use the # character to indicate a comment, but only if it is the +# very first character on the line. + +# ================================================================= +# General configuration +# ================================================================= + +# Use per listener security settings. +# +# It is recommended this option be set before any other options. +# +# If this option is set to true, then all authentication and access control +# options are controlled on a per listener basis. The following options are +# affected: +# +# acl_file +# allow_anonymous +# allow_zero_length_clientid +# auto_id_prefix +# password_file +# plugin +# plugin_opt_* +# psk_file +# +# Note that if set to true, then a durable client (i.e. with clean session set +# to false) that has disconnected will use the ACL settings defined for the +# listener that it was most recently connected to. +# +# The default behaviour is for this to be set to false, which maintains the +# setting behaviour from previous versions of mosquitto. +#per_listener_settings false + + +# This option controls whether a client is allowed to connect with a zero +# length client id or not. This option only affects clients using MQTT v3.1.1 +# and later. If set to false, clients connecting with a zero length client id +# are disconnected. If set to true, clients will be allocated a client id by +# the broker. This means it is only useful for clients with clean session set +# to true. +#allow_zero_length_clientid true + +# If allow_zero_length_clientid is true, this option allows you to set a prefix +# to automatically generated client ids to aid visibility in logs. +# Defaults to 'auto-' +#auto_id_prefix auto- + +# This option affects the scenario when a client subscribes to a topic that has +# retained messages. It is possible that the client that published the retained +# message to the topic had access at the time they published, but that access +# has been subsequently removed. If check_retain_source is set to true, the +# default, the source of a retained message will be checked for access rights +# before it is republished. When set to false, no check will be made and the +# retained message will always be published. This affects all listeners. +#check_retain_source true + +# QoS 1 and 2 messages will be allowed inflight per client until this limit +# is exceeded. Defaults to 0. (No maximum) +# See also max_inflight_messages +#max_inflight_bytes 0 + +# The maximum number of QoS 1 and 2 messages currently inflight per +# client. +# This includes messages that are partway through handshakes and +# those that are being retried. Defaults to 20. Set to 0 for no +# maximum. Setting to 1 will guarantee in-order delivery of QoS 1 +# and 2 messages. +#max_inflight_messages 20 + +# For MQTT v5 clients, it is possible to have the server send a "server +# keepalive" value that will override the keepalive value set by the client. +# This is intended to be used as a mechanism to say that the server will +# disconnect the client earlier than it anticipated, and that the client should +# use the new keepalive value. The max_keepalive option allows you to specify +# that clients may only connect with keepalive less than or equal to this +# value, otherwise they will be sent a server keepalive telling them to use +# max_keepalive. This only applies to MQTT v5 clients. The default, and maximum +# value allowable, is 65535. +# +# Set to 0 to allow clients to set keepalive = 0, which means no keepalive +# checks are made and the client will never be disconnected by the broker if no +# messages are received. You should be very sure this is the behaviour that you +# want. +# +# For MQTT v3.1.1 and v3.1 clients, there is no mechanism to tell the client +# what keepalive value they should use. If an MQTT v3.1.1 or v3.1 client +# specifies a keepalive time greater than max_keepalive they will be sent a +# CONNACK message with the "identifier rejected" reason code, and disconnected. +# +#max_keepalive 65535 + +# For MQTT v5 clients, it is possible to have the server send a "maximum packet +# size" value that will instruct the client it will not accept MQTT packets +# with size greater than max_packet_size bytes. This applies to the full MQTT +# packet, not just the payload. Setting this option to a positive value will +# set the maximum packet size to that number of bytes. If a client sends a +# packet which is larger than this value, it will be disconnected. This applies +# to all clients regardless of the protocol version they are using, but v3.1.1 +# and earlier clients will of course not have received the maximum packet size +# information. Defaults to no limit. Setting below 20 bytes is forbidden +# because it is likely to interfere with ordinary client operation, even with +# very small payloads. +#max_packet_size 0 + +# QoS 1 and 2 messages above those currently in-flight will be queued per +# client until this limit is exceeded. Defaults to 0. (No maximum) +# See also max_queued_messages. +# If both max_queued_messages and max_queued_bytes are specified, packets will +# be queued until the first limit is reached. +#max_queued_bytes 0 + +# Set the maximum QoS supported. Clients publishing at a QoS higher than +# specified here will be disconnected. +#max_qos 2 + +# The maximum number of QoS 1 and 2 messages to hold in a queue per client +# above those that are currently in-flight. Defaults to 1000. Set +# to 0 for no maximum (not recommended). +# See also queue_qos0_messages. +# See also max_queued_bytes. +#max_queued_messages 1000 +# +# This option sets the maximum number of heap memory bytes that the broker will +# allocate, and hence sets a hard limit on memory use by the broker. Memory +# requests that exceed this value will be denied. The effect will vary +# depending on what has been denied. If an incoming message is being processed, +# then the message will be dropped and the publishing client will be +# disconnected. If an outgoing message is being sent, then the individual +# message will be dropped and the receiving client will be disconnected. +# Defaults to no limit. +#memory_limit 0 + +# This option sets the maximum publish payload size that the broker will allow. +# Received messages that exceed this size will not be accepted by the broker. +# The default value is 0, which means that all valid MQTT messages are +# accepted. MQTT imposes a maximum payload size of 268435455 bytes. +#message_size_limit 0 + +# This option allows the session of persistent clients (those with clean +# session set to false) that are not currently connected to be removed if they +# do not reconnect within a certain time frame. This is a non-standard option +# in MQTT v3.1. MQTT v3.1.1 and v5.0 allow brokers to remove client sessions. +# +# Badly designed clients may set clean session to false whilst using a randomly +# generated client id. This leads to persistent clients that connect once and +# never reconnect. This option allows these clients to be removed. This option +# allows persistent clients (those with clean session set to false) to be +# removed if they do not reconnect within a certain time frame. +# +# The expiration period should be an integer followed by one of h d w m y for +# hour, day, week, month and year respectively. For example +# +# persistent_client_expiration 2m +# persistent_client_expiration 14d +# persistent_client_expiration 1y +# +# The default if not set is to never expire persistent clients. +#persistent_client_expiration + +# Write process id to a file. Default is a blank string which means +# a pid file shouldn't be written. +# This should be set to /var/run/mosquitto/mosquitto.pid if mosquitto is +# being run automatically on boot with an init script and +# start-stop-daemon or similar. +#pid_file + +# Set to true to queue messages with QoS 0 when a persistent client is +# disconnected. These messages are included in the limit imposed by +# max_queued_messages and max_queued_bytes +# Defaults to false. +# This is a non-standard option for the MQTT v3.1 spec but is allowed in +# v3.1.1. +#queue_qos0_messages false + +# Set to false to disable retained message support. If a client publishes a +# message with the retain bit set, it will be disconnected if this is set to +# false. +#retain_available true + +# Disable Nagle's algorithm on client sockets. This has the effect of reducing +# latency of individual messages at the potential cost of increasing the number +# of packets being sent. +#set_tcp_nodelay false + +# Time in seconds between updates of the $SYS tree. +# Set to 0 to disable the publishing of the $SYS tree. +#sys_interval 10 + +# The MQTT specification requires that the QoS of a message delivered to a +# subscriber is never upgraded to match the QoS of the subscription. Enabling +# this option changes this behaviour. If upgrade_outgoing_qos is set true, +# messages sent to a subscriber will always match the QoS of its subscription. +# This is a non-standard option explicitly disallowed by the spec. +#upgrade_outgoing_qos false + +# When run as root, drop privileges to this user and its primary +# group. +# Set to root to stay as root, but this is not recommended. +# If set to "mosquitto", or left unset, and the "mosquitto" user does not exist +# then it will drop privileges to the "nobody" user instead. +# If run as a non-root user, this setting has no effect. +# Note that on Windows this has no effect and so mosquitto should be started by +# the user you wish it to run as. +#user mosquitto + +# ================================================================= +# Listeners +# ================================================================= + +# Listen on a port/ip address combination. By using this variable +# multiple times, mosquitto can listen on more than one port. If +# this variable is used and neither bind_address nor port given, +# then the default listener will not be started. +# The port number to listen on must be given. Optionally, an ip +# address or host name may be supplied as a second argument. In +# this case, mosquitto will attempt to bind the listener to that +# address and so restrict access to the associated network and +# interface. By default, mosquitto will listen on all interfaces. +# Note that for a websockets listener it is not possible to bind to a host +# name. +# +# On systems that support Unix Domain Sockets, it is also possible +# to create a # Unix socket rather than opening a TCP socket. In +# this case, the port number should be set to 0 and a unix socket +# path must be provided, e.g. +# listener 0 /tmp/mosquitto.sock +# +# listener port-number [ip address/host name/unix socket path] +listener 1883 + +# By default, a listener will attempt to listen on all supported IP protocol +# versions. If you do not have an IPv4 or IPv6 interface you may wish to +# disable support for either of those protocol versions. In particular, note +# that due to the limitations of the websockets library, it will only ever +# attempt to open IPv6 sockets if IPv6 support is compiled in, and so will fail +# if IPv6 is not available. +# +# Set to `ipv4` to force the listener to only use IPv4, or set to `ipv6` to +# force the listener to only use IPv6. If you want support for both IPv4 and +# IPv6, then do not use the socket_domain option. +# +#socket_domain + +# Bind the listener to a specific interface. This is similar to +# the [ip address/host name] part of the listener definition, but is useful +# when an interface has multiple addresses or the address may change. If used +# with the [ip address/host name] part of the listener definition, then the +# bind_interface option will take priority. +# Not available on Windows. +# +# Example: bind_interface eth0 +#bind_interface + +# When a listener is using the websockets protocol, it is possible to serve +# http data as well. Set http_dir to a directory which contains the files you +# wish to serve. If this option is not specified, then no normal http +# connections will be possible. +#http_dir + +# The maximum number of client connections to allow. This is +# a per listener setting. +# Default is -1, which means unlimited connections. +# Note that other process limits mean that unlimited connections +# are not really possible. Typically the default maximum number of +# connections possible is around 1024. +#max_connections -1 + +# The listener can be restricted to operating within a topic hierarchy using +# the mount_point option. This is achieved be prefixing the mount_point string +# to all topics for any clients connected to this listener. This prefixing only +# happens internally to the broker; the client will not see the prefix. +#mount_point + +# Choose the protocol to use when listening. +# This can be either mqtt or websockets. +# Certificate based TLS may be used with websockets, except that only the +# cafile, certfile, keyfile, ciphers, and ciphers_tls13 options are supported. +#protocol mqtt + +# Set use_username_as_clientid to true to replace the clientid that a client +# connected with with its username. This allows authentication to be tied to +# the clientid, which means that it is possible to prevent one client +# disconnecting another by using the same clientid. +# If a client connects with no username it will be disconnected as not +# authorised when this option is set to true. +# Do not use in conjunction with clientid_prefixes. +# See also use_identity_as_username. +# This does not apply globally, but on a per-listener basis. +#use_username_as_clientid + +# Change the websockets headers size. This is a global option, it is not +# possible to set per listener. This option sets the size of the buffer used in +# the libwebsockets library when reading HTTP headers. If you are passing large +# header data such as cookies then you may need to increase this value. If left +# unset, or set to 0, then the default of 1024 bytes will be used. +#websockets_headers_size + +# ----------------------------------------------------------------- +# Certificate based SSL/TLS support +# ----------------------------------------------------------------- +# The following options can be used to enable certificate based SSL/TLS support +# for this listener. Note that the recommended port for MQTT over TLS is 8883, +# but this must be set manually. +# +# See also the mosquitto-tls man page and the "Pre-shared-key based SSL/TLS +# support" section. Only one of certificate or PSK encryption support can be +# enabled for any listener. + +# Both of certfile and keyfile must be defined to enable certificate based +# TLS encryption. + +# Path to the PEM encoded server certificate. +#certfile + +# Path to the PEM encoded keyfile. +#keyfile + +# If you wish to control which encryption ciphers are used, use the ciphers +# option. The list of available ciphers can be optained using the "openssl +# ciphers" command and should be provided in the same format as the output of +# that command. This applies to TLS 1.2 and earlier versions only. Use +# ciphers_tls1.3 for TLS v1.3. +#ciphers + +# Choose which TLS v1.3 ciphersuites are used for this listener. +# Defaults to "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256" +#ciphers_tls1.3 + +# If you have require_certificate set to true, you can create a certificate +# revocation list file to revoke access to particular client certificates. If +# you have done this, use crlfile to point to the PEM encoded revocation file. +#crlfile + +# To allow the use of ephemeral DH key exchange, which provides forward +# security, the listener must load DH parameters. This can be specified with +# the dhparamfile option. The dhparamfile can be generated with the command +# e.g. "openssl dhparam -out dhparam.pem 2048" +#dhparamfile + +# By default an TLS enabled listener will operate in a similar fashion to a +# https enabled web server, in that the server has a certificate signed by a CA +# and the client will verify that it is a trusted certificate. The overall aim +# is encryption of the network traffic. By setting require_certificate to true, +# the client must provide a valid certificate in order for the network +# connection to proceed. This allows access to the broker to be controlled +# outside of the mechanisms provided by MQTT. +#require_certificate false + +# cafile and capath define methods of accessing the PEM encoded +# Certificate Authority certificates that will be considered trusted when +# checking incoming client certificates. +# cafile defines the path to a file containing the CA certificates. +# capath defines a directory that will be searched for files +# containing the CA certificates. For capath to work correctly, the +# certificate files must have ".crt" as the file ending and you must run +# "openssl rehash " each time you add/remove a certificate. +#cafile +#capath + + +# If require_certificate is true, you may set use_identity_as_username to true +# to use the CN value from the client certificate as a username. If this is +# true, the password_file option will not be used for this listener. +#use_identity_as_username false + +# ----------------------------------------------------------------- +# Pre-shared-key based SSL/TLS support +# ----------------------------------------------------------------- +# The following options can be used to enable PSK based SSL/TLS support for +# this listener. Note that the recommended port for MQTT over TLS is 8883, but +# this must be set manually. +# +# See also the mosquitto-tls man page and the "Certificate based SSL/TLS +# support" section. Only one of certificate or PSK encryption support can be +# enabled for any listener. + +# The psk_hint option enables pre-shared-key support for this listener and also +# acts as an identifier for this listener. The hint is sent to clients and may +# be used locally to aid authentication. The hint is a free form string that +# doesn't have much meaning in itself, so feel free to be creative. +# If this option is provided, see psk_file to define the pre-shared keys to be +# used or create a security plugin to handle them. +#psk_hint + +# When using PSK, the encryption ciphers used will be chosen from the list of +# available PSK ciphers. If you want to control which ciphers are available, +# use the "ciphers" option. The list of available ciphers can be optained +# using the "openssl ciphers" command and should be provided in the same format +# as the output of that command. +#ciphers + +# Set use_identity_as_username to have the psk identity sent by the client used +# as its username. Authentication will be carried out using the PSK rather than +# the MQTT username/password and so password_file will not be used for this +# listener. +#use_identity_as_username false + + +# ================================================================= +# Persistence +# ================================================================= + +# If persistence is enabled, save the in-memory database to disk +# every autosave_interval seconds. If set to 0, the persistence +# database will only be written when mosquitto exits. See also +# autosave_on_changes. +# Note that writing of the persistence database can be forced by +# sending mosquitto a SIGUSR1 signal. +#autosave_interval 1800 + +# If true, mosquitto will count the number of subscription changes, retained +# messages received and queued messages and if the total exceeds +# autosave_interval then the in-memory database will be saved to disk. +# If false, mosquitto will save the in-memory database to disk by treating +# autosave_interval as a time in seconds. +#autosave_on_changes false + +# Save persistent message data to disk (true/false). +# This saves information about all messages, including +# subscriptions, currently in-flight messages and retained +# messages. +# retained_persistence is a synonym for this option. +#persistence false + +# The filename to use for the persistent database, not including +# the path. +#persistence_file mosquitto.db + +# Location for persistent database. +# Default is an empty string (current directory). +# Set to e.g. /var/lib/mosquitto if running as a proper service on Linux or +# similar. +#persistence_location + + +# ================================================================= +# Logging +# ================================================================= + +# Places to log to. Use multiple log_dest lines for multiple +# logging destinations. +# Possible destinations are: stdout stderr syslog topic file dlt +# +# stdout and stderr log to the console on the named output. +# +# syslog uses the userspace syslog facility which usually ends up +# in /var/log/messages or similar. +# +# topic logs to the broker topic '$SYS/broker/log/', +# where severity is one of D, E, W, N, I, M which are debug, error, +# warning, notice, information and message. Message type severity is used by +# the subscribe/unsubscribe log_types and publishes log messages to +# $SYS/broker/log/M/susbcribe or $SYS/broker/log/M/unsubscribe. +# +# The file destination requires an additional parameter which is the file to be +# logged to, e.g. "log_dest file /var/log/mosquitto.log". The file will be +# closed and reopened when the broker receives a HUP signal. Only a single file +# destination may be configured. +# +# The dlt destination is for the automotive `Diagnostic Log and Trace` tool. +# This requires that Mosquitto has been compiled with DLT support. +# +# Note that if the broker is running as a Windows service it will default to +# "log_dest none" and neither stdout nor stderr logging is available. +# Use "log_dest none" if you wish to disable logging. +#log_dest stderr + +# Types of messages to log. Use multiple log_type lines for logging +# multiple types of messages. +# Possible types are: debug, error, warning, notice, information, +# none, subscribe, unsubscribe, websockets, all. +# Note that debug type messages are for decoding the incoming/outgoing +# network packets. They are not logged in "topics". +#log_type error +#log_type warning +#log_type notice +#log_type information + + +# If set to true, client connection and disconnection messages will be included +# in the log. +#connection_messages true + +# If using syslog logging (not on Windows), messages will be logged to the +# "daemon" facility by default. Use the log_facility option to choose which of +# local0 to local7 to log to instead. The option value should be an integer +# value, e.g. "log_facility 5" to use local5. +#log_facility + +# If set to true, add a timestamp value to each log message. +#log_timestamp true + +# Set the format of the log timestamp. If left unset, this is the number of +# seconds since the Unix epoch. +# This is a free text string which will be passed to the strftime function. To +# get an ISO 8601 datetime, for example: +# log_timestamp_format %Y-%m-%dT%H:%M:%S +#log_timestamp_format + +# Change the websockets logging level. This is a global option, it is not +# possible to set per listener. This is an integer that is interpreted by +# libwebsockets as a bit mask for its lws_log_levels enum. See the +# libwebsockets documentation for more details. "log_type websockets" must also +# be enabled. +#websockets_log_level 0 + + +# ================================================================= +# Security +# ================================================================= + +# If set, only clients that have a matching prefix on their +# clientid will be allowed to connect to the broker. By default, +# all clients may connect. +# For example, setting "secure-" here would mean a client "secure- +# client" could connect but another with clientid "mqtt" couldn't. +#clientid_prefixes + +# Boolean value that determines whether clients that connect +# without providing a username are allowed to connect. If set to +# false then a password file should be created (see the +# password_file option) to control authenticated client access. +# +# Defaults to false, unless there are no listeners defined in the configuration +# file, in which case it is set to true, but connections are only allowed from +# the local machine. +allow_anonymous true + +# ----------------------------------------------------------------- +# Default authentication and topic access control +# ----------------------------------------------------------------- + +# Control access to the broker using a password file. This file can be +# generated using the mosquitto_passwd utility. If TLS support is not compiled +# into mosquitto (it is recommended that TLS support should be included) then +# plain text passwords are used, in which case the file should be a text file +# with lines in the format: +# username:password +# The password (and colon) may be omitted if desired, although this +# offers very little in the way of security. +# +# See the TLS client require_certificate and use_identity_as_username options +# for alternative authentication options. If a plugin is used as well as +# password_file, the plugin check will be made first. +#password_file + +# Access may also be controlled using a pre-shared-key file. This requires +# TLS-PSK support and a listener configured to use it. The file should be text +# lines in the format: +# identity:key +# The key should be in hexadecimal format without a leading "0x". +# If an plugin is used as well, the plugin check will be made first. +#psk_file + +# Control access to topics on the broker using an access control list +# file. If this parameter is defined then only the topics listed will +# have access. +# If the first character of a line of the ACL file is a # it is treated as a +# comment. +# Topic access is added with lines of the format: +# +# topic [read|write|readwrite|deny] +# +# The access type is controlled using "read", "write", "readwrite" or "deny". +# This parameter is optional (unless contains a space character) - if +# not given then the access is read/write. can contain the + or # +# wildcards as in subscriptions. +# +# The "deny" option can used to explicity deny access to a topic that would +# otherwise be granted by a broader read/write/readwrite statement. Any "deny" +# topics are handled before topics that grant read/write access. +# +# The first set of topics are applied to anonymous clients, assuming +# allow_anonymous is true. User specific topic ACLs are added after a +# user line as follows: +# +# user +# +# The username referred to here is the same as in password_file. It is +# not the clientid. +# +# +# If is also possible to define ACLs based on pattern substitution within the +# topic. The patterns available for substition are: +# +# %c to match the client id of the client +# %u to match the username of the client +# +# The substitution pattern must be the only text for that level of hierarchy. +# +# The form is the same as for the topic keyword, but using pattern as the +# keyword. +# Pattern ACLs apply to all users even if the "user" keyword has previously +# been given. +# +# If using bridges with usernames and ACLs, connection messages can be allowed +# with the following pattern: +# pattern write $SYS/broker/connection/%c/state +# +# pattern [read|write|readwrite] +# +# Example: +# +# pattern write sensor/%u/data +# +# If an plugin is used as well as acl_file, the plugin check will be +# made first. +#acl_file + +# ----------------------------------------------------------------- +# External authentication and topic access plugin options +# ----------------------------------------------------------------- + +# External authentication and access control can be supported with the +# plugin option. This is a path to a loadable plugin. See also the +# plugin_opt_* options described below. +# +# The plugin option can be specified multiple times to load multiple +# plugins. The plugins will be processed in the order that they are specified +# here. If the plugin option is specified alongside either of +# password_file or acl_file then the plugin checks will be made first. +# +# If the per_listener_settings option is false, the plugin will be apply to all +# listeners. If per_listener_settings is true, then the plugin will apply to +# the current listener being defined only. +# +# This option is also available as `auth_plugin`, but this use is deprecated +# and will be removed in the future. +# +#plugin + +# If the plugin option above is used, define options to pass to the +# plugin here as described by the plugin instructions. All options named +# using the format plugin_opt_* will be passed to the plugin, for example: +# +# This option is also available as `auth_opt_*`, but this use is deprecated +# and will be removed in the future. +# +# plugin_opt_db_host +# plugin_opt_db_port +# plugin_opt_db_username +# plugin_opt_db_password + + +# ================================================================= +# Bridges +# ================================================================= + +# A bridge is a way of connecting multiple MQTT brokers together. +# Create a new bridge using the "connection" option as described below. Set +# options for the bridges using the remaining parameters. You must specify the +# address and at least one topic to subscribe to. +# +# Each connection must have a unique name. +# +# The address line may have multiple host address and ports specified. See +# below in the round_robin description for more details on bridge behaviour if +# multiple addresses are used. Note that if you use an IPv6 address, then you +# are required to specify a port. +# +# The direction that the topic will be shared can be chosen by +# specifying out, in or both, where the default value is out. +# The QoS level of the bridged communication can be specified with the next +# topic option. The default QoS level is 0, to change the QoS the topic +# direction must also be given. +# +# The local and remote prefix options allow a topic to be remapped when it is +# bridged to/from the remote broker. This provides the ability to place a topic +# tree in an appropriate location. +# +# For more details see the mosquitto.conf man page. +# +# Multiple topics can be specified per connection, but be careful +# not to create any loops. +# +# If you are using bridges with cleansession set to false (the default), then +# you may get unexpected behaviour from incoming topics if you change what +# topics you are subscribing to. This is because the remote broker keeps the +# subscription for the old topic. If you have this problem, connect your bridge +# with cleansession set to true, then reconnect with cleansession set to false +# as normal. +#connection +#address [:] [[:]] +#topic [[[out | in | both] qos-level] local-prefix remote-prefix] + +# If you need to have the bridge connect over a particular network interface, +# use bridge_bind_address to tell the bridge which local IP address the socket +# should bind to, e.g. `bridge_bind_address 192.168.1.10` +#bridge_bind_address + +# If a bridge has topics that have "out" direction, the default behaviour is to +# send an unsubscribe request to the remote broker on that topic. This means +# that changing a topic direction from "in" to "out" will not keep receiving +# incoming messages. Sending these unsubscribe requests is not always +# desirable, setting bridge_attempt_unsubscribe to false will disable sending +# the unsubscribe request. +#bridge_attempt_unsubscribe true + +# Set the version of the MQTT protocol to use with for this bridge. Can be one +# of mqttv50, mqttv311 or mqttv31. Defaults to mqttv311. +#bridge_protocol_version mqttv311 + +# Set the clean session variable for this bridge. +# When set to true, when the bridge disconnects for any reason, all +# messages and subscriptions will be cleaned up on the remote +# broker. Note that with cleansession set to true, there may be a +# significant amount of retained messages sent when the bridge +# reconnects after losing its connection. +# When set to false, the subscriptions and messages are kept on the +# remote broker, and delivered when the bridge reconnects. +#cleansession false + +# Set the amount of time a bridge using the lazy start type must be idle before +# it will be stopped. Defaults to 60 seconds. +#idle_timeout 60 + +# Set the keepalive interval for this bridge connection, in +# seconds. +#keepalive_interval 60 + +# Set the clientid to use on the local broker. If not defined, this defaults to +# 'local.'. If you are bridging a broker to itself, it is important +# that local_clientid and clientid do not match. +#local_clientid + +# If set to true, publish notification messages to the local and remote brokers +# giving information about the state of the bridge connection. Retained +# messages are published to the topic $SYS/broker/connection//state +# unless the notification_topic option is used. +# If the message is 1 then the connection is active, or 0 if the connection has +# failed. +# This uses the last will and testament feature. +#notifications true + +# Choose the topic on which notification messages for this bridge are +# published. If not set, messages are published on the topic +# $SYS/broker/connection//state +#notification_topic + +# Set the client id to use on the remote end of this bridge connection. If not +# defined, this defaults to 'name.hostname' where name is the connection name +# and hostname is the hostname of this computer. +# This replaces the old "clientid" option to avoid confusion. "clientid" +# remains valid for the time being. +#remote_clientid + +# Set the password to use when connecting to a broker that requires +# authentication. This option is only used if remote_username is also set. +# This replaces the old "password" option to avoid confusion. "password" +# remains valid for the time being. +#remote_password + +# Set the username to use when connecting to a broker that requires +# authentication. +# This replaces the old "username" option to avoid confusion. "username" +# remains valid for the time being. +#remote_username + +# Set the amount of time a bridge using the automatic start type will wait +# until attempting to reconnect. +# This option can be configured to use a constant delay time in seconds, or to +# use a backoff mechanism based on "Decorrelated Jitter", which adds a degree +# of randomness to when the restart occurs. +# +# Set a constant timeout of 20 seconds: +# restart_timeout 20 +# +# Set backoff with a base (start value) of 10 seconds and a cap (upper limit) of +# 60 seconds: +# restart_timeout 10 30 +# +# Defaults to jitter with a base of 5 and cap of 30 +#restart_timeout 5 30 + +# If the bridge has more than one address given in the address/addresses +# configuration, the round_robin option defines the behaviour of the bridge on +# a failure of the bridge connection. If round_robin is false, the default +# value, then the first address is treated as the main bridge connection. If +# the connection fails, the other secondary addresses will be attempted in +# turn. Whilst connected to a secondary bridge, the bridge will periodically +# attempt to reconnect to the main bridge until successful. +# If round_robin is true, then all addresses are treated as equals. If a +# connection fails, the next address will be tried and if successful will +# remain connected until it fails +#round_robin false + +# Set the start type of the bridge. This controls how the bridge starts and +# can be one of three types: automatic, lazy and once. Note that RSMB provides +# a fourth start type "manual" which isn't currently supported by mosquitto. +# +# "automatic" is the default start type and means that the bridge connection +# will be started automatically when the broker starts and also restarted +# after a short delay (30 seconds) if the connection fails. +# +# Bridges using the "lazy" start type will be started automatically when the +# number of queued messages exceeds the number set with the "threshold" +# parameter. It will be stopped automatically after the time set by the +# "idle_timeout" parameter. Use this start type if you wish the connection to +# only be active when it is needed. +# +# A bridge using the "once" start type will be started automatically when the +# broker starts but will not be restarted if the connection fails. +#start_type automatic + +# Set the number of messages that need to be queued for a bridge with lazy +# start type to be restarted. Defaults to 10 messages. +# Must be less than max_queued_messages. +#threshold 10 + +# If try_private is set to true, the bridge will attempt to indicate to the +# remote broker that it is a bridge not an ordinary client. If successful, this +# means that loop detection will be more effective and that retained messages +# will be propagated correctly. Not all brokers support this feature so it may +# be necessary to set try_private to false if your bridge does not connect +# properly. +#try_private true + +# Some MQTT brokers do not allow retained messages. MQTT v5 gives a mechanism +# for brokers to tell clients that they do not support retained messages, but +# this is not possible for MQTT v3.1.1 or v3.1. If you need to bridge to a +# v3.1.1 or v3.1 broker that does not support retained messages, set the +# bridge_outgoing_retain option to false. This will remove the retain bit on +# all outgoing messages to that bridge, regardless of any other setting. +#bridge_outgoing_retain true + +# If you wish to restrict the size of messages sent to a remote bridge, use the +# bridge_max_packet_size option. This sets the maximum number of bytes for +# the total message, including headers and payload. +# Note that MQTT v5 brokers may provide their own maximum-packet-size property. +# In this case, the smaller of the two limits will be used. +# Set to 0 for "unlimited". +#bridge_max_packet_size 0 + + +# ----------------------------------------------------------------- +# Certificate based SSL/TLS support +# ----------------------------------------------------------------- +# Either bridge_cafile or bridge_capath must be defined to enable TLS support +# for this bridge. +# bridge_cafile defines the path to a file containing the +# Certificate Authority certificates that have signed the remote broker +# certificate. +# bridge_capath defines a directory that will be searched for files containing +# the CA certificates. For bridge_capath to work correctly, the certificate +# files must have ".crt" as the file ending and you must run "openssl rehash +# " each time you add/remove a certificate. +#bridge_cafile +#bridge_capath + + +# If the remote broker has more than one protocol available on its port, e.g. +# MQTT and WebSockets, then use bridge_alpn to configure which protocol is +# requested. Note that WebSockets support for bridges is not yet available. +#bridge_alpn + +# When using certificate based encryption, bridge_insecure disables +# verification of the server hostname in the server certificate. This can be +# useful when testing initial server configurations, but makes it possible for +# a malicious third party to impersonate your server through DNS spoofing, for +# example. Use this option in testing only. If you need to resort to using this +# option in a production environment, your setup is at fault and there is no +# point using encryption. +#bridge_insecure false + +# Path to the PEM encoded client certificate, if required by the remote broker. +#bridge_certfile + +# Path to the PEM encoded client private key, if required by the remote broker. +#bridge_keyfile + +# ----------------------------------------------------------------- +# PSK based SSL/TLS support +# ----------------------------------------------------------------- +# Pre-shared-key encryption provides an alternative to certificate based +# encryption. A bridge can be configured to use PSK with the bridge_identity +# and bridge_psk options. These are the client PSK identity, and pre-shared-key +# in hexadecimal format with no "0x". Only one of certificate and PSK based +# encryption can be used on one +# bridge at once. +#bridge_identity +#bridge_psk + + +# ================================================================= +# External config files +# ================================================================= + +# External configuration files may be included by using the +# include_dir option. This defines a directory that will be searched +# for config files. All files that end in '.conf' will be loaded as +# a configuration file. It is best to have this as the last option +# in the main file. This option will only be processed from the main +# configuration file. The directory specified must not contain the +# main configuration file. +# Files within include_dir will be loaded sorted in case-sensitive +# alphabetical order, with capital letters ordered first. If this option is +# given multiple times, all of the files from the first instance will be +# processed before the next instance. See the man page for examples. +#include_dir diff --git a/src/Elektrifikatsiya/host/mqtt/mqtt2prom/config.yaml b/src/Elektrifikatsiya/host/mqtt/mqtt2prom/config.yaml new file mode 100644 index 0000000..3c2b49c --- /dev/null +++ b/src/Elektrifikatsiya/host/mqtt/mqtt2prom/config.yaml @@ -0,0 +1,62 @@ +mqtt: + # The MQTT broker to connect to + server: mqtt://mosquitto:1883 + # Optional: Username and Password for authenticating with the MQTT Server + # Optional: for TLS client certificates + # Optional: Used to specify ClientID. The default is - + # The Topic path to subscribe to. Be aware that you have to specify the wildcard, if you want to follow topics for multiple sensors. + topic_path: shellies/+/# + device_id_regex: "shellies/(?P.*)/.*" + metric_per_topic_config: + metric_name_regex: "shellies/(?P.*)/(?P.*)" + # Optional: Regular expression to extract the device ID from the topic path. The default regular expression, assumes + # that the last "element" of the topic_path is the device id. + # The regular expression must contain a named capture group with the name deviceid + # For example the expression for tasamota based sensors is "tele/(?P.*)/.*" + # device_id_regex: "(.*/)?(shelly-(?P.*?)/)" + # The MQTT QoS level + qos: 0 + # NOTE: Only one of metric_per_topic_config or object_per_topic_config should be specified in the configuration + # Optional: Configures mqtt2prometheus to expect a single metric to be published as the value on an mqtt topic. + #metric_per_topic_config: + # A regex used for extracting the metric name from the topic. Must contain a named group for `metricname`. + #metric_name_regex: "(.*/)?(?P.*)" + # Optional: Configures mqtt2prometheus to expect an object containing multiple metrics to be published as the value on an mqtt topic. + # This is the default. + #object_per_topic_config: + # The encoding of the object, currently only json is supported + # encoding: json +cache: + # Timeout. Each received metric will be presented for this time if no update is send via MQTT. + # Set the timeout to -1 to disable the deletion of metrics from the cache. The exporter presents the ingest timestamp + # to prometheus. + timeout: 24h +json_parsing: + # Separator. Used to split path to elements when accessing json fields. + # You can access json fields with dots in it. F.E. {"key.name": {"nested": "value"}} + # Just set separator to -> and use key.name->nested as mqtt_name + separator: . +# This is a list of valid metrics. Only metrics listed here will be exported +metrics: + # The name of the metric in prometheus + - prom_name: temperature + # The name of the metric in a MQTT JSON message + mqtt_name: temperature + # The prometheus help text for this metric + help: DHT22 temperature reading + # The prometheus type for this metric. Valid values are: "gauge" and "counter" + type: gauge + # A map of string to string for constant labels. This labels will be attached to every prometheus metric + const_labels: + sensor_type: shelly + - prom_name: power + # The name of the metric in a MQTT JSON message + mqtt_name: power + # The scale of the metric in a MQTT JSON message (prom_value = mqtt_value * scale) + # The prometheus help text for this metric + help: DHT22 humidity reading + # The prometheus type for this metric. Valid values are: "gauge" and "counter" + type: gauge + const_labels: + sensor_type: shelly + #A map of string to string for constant labels. This labels will be attached to every prometheus metric diff --git a/src/Elektrifikatsiya/host/prometheus/prometheus.yml b/src/Elektrifikatsiya/host/prometheus/prometheus.yml new file mode 100644 index 0000000..ea003f0 --- /dev/null +++ b/src/Elektrifikatsiya/host/prometheus/prometheus.yml @@ -0,0 +1,15 @@ +global: + scrape_interval: 15s + evaluation_interval: 15s + +rule_files: + # - "first.rules" + # - "second.rules" + +scrape_configs: + - job_name: prometheus + static_configs: + - targets: ['localhost:9090'] + - job_name: shellies + static_configs: + - targets: ['mqtt2prom:9641'] From a1b6f61e8c5594aaafc90441ca6658728d767768 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed, 25 Jan 2023 11:22:28 +0100 Subject: [PATCH 02/85] Add models and interfaces for auth --- .../Database/UserDatabaseContext.cs | 10 ++++ .../Elektrifikatsiya/Elektrifikatsiya.csproj | 6 +++ .../Elektrifikatsiya/Models/Role.cs | 7 +++ .../Elektrifikatsiya/Models/User.cs | 22 ++++++++ .../Elektrifikatsiya/Program.cs | 8 +-- .../Services/IAuthenticationService.cs | 53 +++++++++++++++++++ .../Services/IAuthorizationService.cs | 13 +++++ 7 files changed, 113 insertions(+), 6 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Models/Role.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthorizationService.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs new file mode 100644 index 0000000..917764f --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs @@ -0,0 +1,10 @@ +using Elektrifikatsiya.Models; + +using Microsoft.EntityFrameworkCore; + +namespace Elektrifikatsiya.Database; + +public class UserDatabaseContext : DbContext +{ + public DbSet Users { get; set; } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 6b1a00c..e04bc06 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -20,7 +20,13 @@ + + + + + + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Role.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Role.cs new file mode 100644 index 0000000..f2afd89 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Role.cs @@ -0,0 +1,7 @@ +namespace Elektrifikatsiya.Models; + +public enum Role +{ + Admin, + User +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs new file mode 100644 index 0000000..99fc256 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs @@ -0,0 +1,22 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Elektrifikatsiya.Models; + +public class User +{ + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Key] + public int Id { get; private set; } + + public string Name { get; private set; } + public string PasswordHash { get; private set; } + public string? SessionToken { get; set; } + public DateTime LastLoginDate { get; set; } + + public User(string name, string passwordHash) + { + Name = name; + PasswordHash = passwordHash; + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 44ecc11..d9004c1 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -25,12 +25,8 @@ app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); - -app.UseEndpoints(endpoints => -{ - _ = endpoints.MapBlazorHub(); - _ = endpoints.MapFallbackToPage("/_Host"); -}); +app.MapBlazorHub(); +app.MapFallbackToPage("/_Host"); app.Run(); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs new file mode 100644 index 0000000..ac34b36 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs @@ -0,0 +1,53 @@ +using Elektrifikatsiya.Models; + +namespace Elektrifikatsiya.Services; + +public interface IAuthenticationService +{ + /// + /// Gets the current user. + /// + /// to and the currently authenticated user. + Task GetUserAsync(); + + /// + /// Registers a new user. + /// + /// The E-mail address of the user. + /// A to . + + Task RegisterUserAsync(string name, string password); + + /// + /// Logs a user in. + /// + /// The E-mail address of the user. + /// A to . + Task<(bool Success, string? Message)> LoginUserAsync(string name, string password); + + /// + /// Logs the user out. + /// + /// A to . + Task LogoutUserAsync(); + + /// + /// Deletes the current user. + /// + /// The deletion token. + /// A to and a that indicates if the operation was successful. + Task DeleteUserAsync(string deletionToken); + + /// + /// Checks if a user exists. + /// + /// The E-mail address of the user. + /// A to and a that indicates if the user exists. + Task UserExistsAsync(string name); + + /// + /// Check if the current user is authenticated. + /// + /// A to and a that indicates if the user is authenticated. + Task IsAuthenticated(); +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthorizationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthorizationService.cs new file mode 100644 index 0000000..223d9c8 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthorizationService.cs @@ -0,0 +1,13 @@ +using Elektrifikatsiya.Models; + +namespace Elektrifikatsiya.Services; + +public interface IAuthorizationService +{ + /// + /// Check if the current user is authorized. + /// + /// The minimum required role. + /// A to and a that indicates if the user is authorized. + Task IsAuthorized(Role requiredRole); +} \ No newline at end of file From 8e24bd7c5324dd06064ca11351811f3937ed3803 Mon Sep 17 00:00:00 2001 From: Stefan-5422 <32109571+Stefan-5422@users.noreply.github.com> Date: Thu, 26 Jan 2023 16:25:58 +0100 Subject: [PATCH 03/85] Finish configuration of gathering Service --- .../host/mqtt/mqtt2prom/config.yaml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Elektrifikatsiya/host/mqtt/mqtt2prom/config.yaml b/src/Elektrifikatsiya/host/mqtt/mqtt2prom/config.yaml index 3c2b49c..225e946 100644 --- a/src/Elektrifikatsiya/host/mqtt/mqtt2prom/config.yaml +++ b/src/Elektrifikatsiya/host/mqtt/mqtt2prom/config.yaml @@ -43,7 +43,7 @@ metrics: # The name of the metric in a MQTT JSON message mqtt_name: temperature # The prometheus help text for this metric - help: DHT22 temperature reading + help: The temperature of the Shelly sensor # The prometheus type for this metric. Valid values are: "gauge" and "counter" type: gauge # A map of string to string for constant labels. This labels will be attached to every prometheus metric @@ -54,9 +54,20 @@ metrics: mqtt_name: power # The scale of the metric in a MQTT JSON message (prom_value = mqtt_value * scale) # The prometheus help text for this metric - help: DHT22 humidity reading + help: The current power draw of the attached device # The prometheus type for this metric. Valid values are: "gauge" and "counter" type: gauge const_labels: sensor_type: shelly #A map of string to string for constant labels. This labels will be attached to every prometheus metric + - prom_name: state + mqtt_name: 0 + help: The current state the relay is in + type: gauge + const_labels: + sensor_type: shelly + string_value_mapping: + map: + off: 0 + on: 1 + error_value: 0 \ No newline at end of file From a10f89237520272fbccce17d695e06b0a6c7b395 Mon Sep 17 00:00:00 2001 From: Stefan-5422 <32109571+Stefan-5422@users.noreply.github.com> Date: Thu, 26 Jan 2023 16:39:54 +0100 Subject: [PATCH 04/85] =?UTF-8?q?Added=20Translation=20Database=20?= =?UTF-8?q?=F0=9F=A6=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeviceManagementDatabaseContext.cs | 10 ++++++++++ .../Elektrifikatsiya/Elektrifikatsiya.csproj | 5 +++++ .../Elektrifikatsiya/Model/Device.cs | 20 +++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Model/Device.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs new file mode 100644 index 0000000..f182b24 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs @@ -0,0 +1,10 @@ +using Elektrifikatsiya.Model; +using Microsoft.EntityFrameworkCore; + +namespace Elektrifikatsiya.Database +{ + public class DeviceManagmentDatabaseContext : DbContext + { + public DbSet Devices { get; set; } + } +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 7653e0e..ff8eb7c 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -21,7 +21,12 @@ + + + + + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Model/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Model/Device.cs new file mode 100644 index 0000000..65cdf34 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Model/Device.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; +using System.Net; + +namespace Elektrifikatsiya.Model; + +public class Device +{ + [Key] + public string Key { get; private set; } + [Required] + public string Name { get; private set; } = string.Empty; + [Required] + public IPAddress Address { get; private set; } + + public Device(string key, IPAddress address) + { + Key = key; + Address = address; + } +} \ No newline at end of file From 85cc9d56ba8b060e3888afcac557ddb6a4825e88 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 26 Jan 2023 16:43:37 +0100 Subject: [PATCH 05/85] Implement auth services --- .../Elektrifikatsiya/Models/Role.cs | 2 + .../Elektrifikatsiya/Models/User.cs | 4 +- .../Services/IAuthenticationService.cs | 16 ++++--- .../Services/IAuthorizationService.cs | 4 +- .../Implementations/AuthenticationService.cs | 43 +++++++++++++++++++ .../Implementations/AuthorizationService.cs | 29 +++++++++++++ 6 files changed, 89 insertions(+), 9 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthorizationService.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Role.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Role.cs index f2afd89..08e4fb4 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Role.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Role.cs @@ -1,5 +1,7 @@ namespace Elektrifikatsiya.Models; +// Higher up = Higher permission +// Or you can set the priority manually = public enum Role { Admin, diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs index 99fc256..175c25d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs @@ -13,10 +13,12 @@ public class User public string PasswordHash { get; private set; } public string? SessionToken { get; set; } public DateTime LastLoginDate { get; set; } + public Role Role { get; set; } - public User(string name, string passwordHash) + public User(string name, string passwordHash, Role role) { Name = name; PasswordHash = passwordHash; + Role = role; } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs index ac34b36..84b1adf 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs @@ -1,5 +1,7 @@ using Elektrifikatsiya.Models; +using FluentResults; + namespace Elektrifikatsiya.Services; public interface IAuthenticationService @@ -8,7 +10,7 @@ public interface IAuthenticationService /// Gets the current user. /// /// to and the currently authenticated user. - Task GetUserAsync(); + Task> GetUserAsync(); /// /// Registers a new user. @@ -16,38 +18,38 @@ public interface IAuthenticationService /// The E-mail address of the user. /// A to . - Task RegisterUserAsync(string name, string password); + Task RegisterUserAsync(string name, string password); /// /// Logs a user in. /// /// The E-mail address of the user. /// A to . - Task<(bool Success, string? Message)> LoginUserAsync(string name, string password); + Task LoginUserAsync(string name, string password); /// /// Logs the user out. /// /// A to . - Task LogoutUserAsync(); + Task LogoutUserAsync(); /// /// Deletes the current user. /// /// The deletion token. /// A to and a that indicates if the operation was successful. - Task DeleteUserAsync(string deletionToken); + Task DeleteUserAsync(string deletionToken); /// /// Checks if a user exists. /// /// The E-mail address of the user. /// A to and a that indicates if the user exists. - Task UserExistsAsync(string name); + Task> UserExistsAsync(string name); /// /// Check if the current user is authenticated. /// /// A to and a that indicates if the user is authenticated. - Task IsAuthenticated(); + Task> IsAuthenticated(); } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthorizationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthorizationService.cs index 223d9c8..30be3d0 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthorizationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthorizationService.cs @@ -1,5 +1,7 @@ using Elektrifikatsiya.Models; +using FluentResults; + namespace Elektrifikatsiya.Services; public interface IAuthorizationService @@ -9,5 +11,5 @@ public interface IAuthorizationService /// /// The minimum required role. /// A to and a that indicates if the user is authorized. - Task IsAuthorized(Role requiredRole); + Task> IsAuthorized(Role requiredRole); } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs new file mode 100644 index 0000000..1a3c2ae --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs @@ -0,0 +1,43 @@ +using Elektrifikatsiya.Models; + +using FluentResults; + +namespace Elektrifikatsiya.Services.Implementations; + +public class AuthenticationService : IAuthenticationService +{ + public Task DeleteUserAsync(string deletionToken) + { + throw new NotImplementedException(); + } + + public Task> GetUserAsync() + { + throw new NotImplementedException(); + } + + public Task> IsAuthenticated() + { + throw new NotImplementedException(); + } + + public Task LoginUserAsync(string name, string password) + { + throw new NotImplementedException(); + } + + public Task LogoutUserAsync() + { + throw new NotImplementedException(); + } + + public Task RegisterUserAsync(string name, string password) + { + throw new NotImplementedException(); + } + + public Task> UserExistsAsync(string name) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthorizationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthorizationService.cs new file mode 100644 index 0000000..3a2f4c4 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthorizationService.cs @@ -0,0 +1,29 @@ +using Elektrifikatsiya.Models; + +using FluentResults; + +namespace Elektrifikatsiya.Services.Implementations; + +public class AuthorizationService : IAuthorizationService +{ + private readonly IAuthenticationService authenticationService; + + public AuthorizationService(IAuthenticationService authenticationService) + { + this.authenticationService = authenticationService; + } + + public async Task> IsAuthorized(Role requiredRole) + { + Result userResult = await authenticationService.GetUserAsync(); + + if (userResult.IsSuccess && userResult.Value.Role <= requiredRole) + { + return Result.Ok(true); + } + else + { + return Result.Fail("Use doesn't have the required role!"); + } + } +} \ No newline at end of file From 96a0d710c43c0b18a0ce3e1b9248863b266b81cb Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 26 Jan 2023 16:44:53 +0100 Subject: [PATCH 06/85] Add FluentResults NuGet --- src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index e04bc06..4272c7b 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -20,6 +20,7 @@ + From cf057e3a2caa0f668887d680a3fb7ff1ae860dbf Mon Sep 17 00:00:00 2001 From: Aldin296 <99395958+Aldin296@users.noreply.github.com> Date: Wed, 1 Feb 2023 07:30:38 +0100 Subject: [PATCH 07/85] =?UTF-8?q?Sidebar=20angepasst=20und=20im=20Dashboar?= =?UTF-8?q?d=20die=20Plug=20Liste=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Layout/SideMenu.razor | 34 +++++----- .../Elektrifikatsiya/Pages/Dashboard.razor | 63 ++++++++++--------- .../Elektrifikatsiya/Pages/Dashboard.razor.cs | 28 +++++++++ 3 files changed, 77 insertions(+), 48 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor index 7450e71..9c3955f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor @@ -15,33 +15,27 @@ Dashboard + + + + + + Admin - - - - Pages - - - Simple Form - - + + + Add Plug + - - - - Apps - - - - Todo - - - + + + Setting + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index d918c4b..102f6ba 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -1,31 +1,38 @@ @page "/" @inject IVersionProvider VersionProvider -Blazorise + + + + @for (int i = 0; i < 3; i++) + { + + + + + + Plug #@i + + + 60W + + + + + User: .... +
+ Room: .... +
+
+
+ + + +
+
+ } +
+
+
- - Blazorise is a component library built on top of Blazor and CSS frameworks like Bootstrap, Bulma, Ant Design, and Material. It can be used to build responsive, single-page web applications. - - - - - This is a Blazorise Starting Template allowing you to quickly get started building your project! - - - - The bare minimum has been installed for you: -
    -
  • Blazorise @($"v{VersionProvider.MilestoneVersion}")
  • -
  • The Blazorise Provider you have selected
  • -
  • The corresponding icon provider
  • -
- However Blazorise has many more extensions at your disposal. - You can find them here. -
- - - Please visit the official Blazorise Demo for component examples. - - - Please visit the official Blazorise Documentation to learn more about the available components. - -
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs new file mode 100644 index 0000000..ed25e93 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using System.Net.Http; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Components.Forms; +using Microsoft.AspNetCore.Components.Routing; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.Web.Virtualization; +using Microsoft.JSInterop; +using Elektrifikatsiya; +using Blazorise; + +namespace Elektrifikatsiya.Pages +{ + public partial class Dashboard + { + string bgcolor { get; set; } = "00f"; // (starting value) + void SetColor() + { + bgcolor = "#fd7"; + StateHasChanged(); // may not be required, but I'm at work right now, so can't check + } + } +} \ No newline at end of file From 5d6db0b5c1490512bc6218d850d07c8844214f4c Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed, 1 Feb 2023 10:17:53 +0100 Subject: [PATCH 08/85] =?UTF-8?q?=F0=9F=94=91=20Login=20Stuff=20ya'=20know?= =?UTF-8?q?=20=F0=9F=94=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Database/UserDatabaseContext.cs | 4 + .../Elektrifikatsiya/Program.cs | 5 + .../Services/IAuthenticationService.cs | 4 +- .../Services/ICookieService.cs | 13 ++ .../Implementations/AuthenticationService.cs | 119 +++++++++++++++--- .../Implementations/AuthorizationService.cs | 2 +- .../Services/Implementations/CookieService.cs | 18 +++ .../Utilities/SecureStringGenerator.cs | 20 +++ .../Utilities/TokenGenerator.cs | 19 +++ 9 files changed, 187 insertions(+), 17 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/ICookieService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/CookieService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Utilities/SecureStringGenerator.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Utilities/TokenGenerator.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs index 917764f..b3a6730 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs @@ -6,5 +6,9 @@ namespace Elektrifikatsiya.Database; public class UserDatabaseContext : DbContext { + public UserDatabaseContext(DbContextOptions dbContextOptions) : base(dbContextOptions) + { + } + public DbSet Users { get; set; } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index d9004c1..fb58465 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -2,11 +2,16 @@ using Blazorise; using Blazorise.Icons.Material; using Blazorise.Material; +using Elektrifikatsiya.Database; + +using Microsoft.EntityFrameworkCore; + WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); +builder.Services.AddDbContext(options => options.UseSqlite("/host/UserDatabase.sqlite")); AddBlazorise(builder.Services); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs index 84b1adf..2ccc8ec 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs @@ -18,7 +18,7 @@ public interface IAuthenticationService /// The E-mail address of the user. /// A to . - Task RegisterUserAsync(string name, string password); + Task RegisterUserAsync(string name, string password, Role role); /// /// Logs a user in. @@ -38,7 +38,7 @@ public interface IAuthenticationService /// /// The deletion token. /// A to and a that indicates if the operation was successful. - Task DeleteUserAsync(string deletionToken); + Task DeleteUserAsync(); /// /// Checks if a user exists. diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/ICookieService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/ICookieService.cs new file mode 100644 index 0000000..a954ea8 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/ICookieService.cs @@ -0,0 +1,13 @@ +namespace Elektrifikatsiya.Services; + +public interface ICookieService +{ + /// + /// Writes a cookie. + /// + /// The name of the cookie. + /// The value of the cookie. + /// Indicates the maximum lifetime of the cookie. + /// + Task WriteCookieAsync(string name, string value, int days); +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs index 1a3c2ae..36ce68e 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs @@ -1,43 +1,134 @@ -using Elektrifikatsiya.Models; +using Elektrifikatsiya.Database; +using Elektrifikatsiya.Models; +using Elektrifikatsiya.Utilities; using FluentResults; +using Microsoft.EntityFrameworkCore; + +using BC = BCrypt.Net.BCrypt; + namespace Elektrifikatsiya.Services.Implementations; public class AuthenticationService : IAuthenticationService { - public Task DeleteUserAsync(string deletionToken) + private readonly UserDatabaseContext userDatabaseContext; + private readonly IHttpContextAccessor httpContextAccessor; + private readonly ICookieService cookieService; + + public AuthenticationService(UserDatabaseContext userDatabaseContext, IHttpContextAccessor httpContextAccessor, ICookieService cookieService) { - throw new NotImplementedException(); + this.userDatabaseContext = userDatabaseContext; + this.httpContextAccessor = httpContextAccessor; + this.cookieService = cookieService; } - public Task> GetUserAsync() + public async Task DeleteUserAsync() { - throw new NotImplementedException(); + Result getUserResult = await GetUserAsync(); + + if (getUserResult.IsFailed) + { + return getUserResult.ToResult(); + } + + _ = userDatabaseContext.Users.Remove(getUserResult.Value); + return (await Result.Try(() => userDatabaseContext.SaveChangesAsync())).ToResult(); } - public Task> IsAuthenticated() + public async Task> GetUserAsync() { - throw new NotImplementedException(); + string? token = httpContextAccessor.HttpContext?.Request.Cookies["token"]?.ToString(); + + if (!TokenGenerator.ValidateToken(token, "auth")) + { + return Result.Fail("Token is not valid!"); + } + + User? user = await userDatabaseContext.Users.FirstOrDefaultAsync(u => u.SessionToken == token); + + if (user is null || DateTime.UtcNow - user.LastLoginDate > TimeSpan.FromDays(7)) + { + return Result.Fail("Token is not valid or expired!"); + } + + return user; } - public Task LoginUserAsync(string name, string password) + public async Task> IsAuthenticated() { - throw new NotImplementedException(); + return (await GetUserAsync()).IsSuccess; } - public Task LogoutUserAsync() + public async Task LoginUserAsync(string name, string password) { - throw new NotImplementedException(); + User? user = await userDatabaseContext.Users.FirstOrDefaultAsync(u => u.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); + + if (user is null) + { + return Result.Fail("User does not exist!"); + } + + if (!BC.Verify(password, user.PasswordHash)) + { + return Result.Fail("Invalid credentials!"); + } + + string newToken = TokenGenerator.GenerateToken("auth", user.Id); + + user.LastLoginDate = DateTime.UtcNow; + user.SessionToken = newToken; + + _ = await userDatabaseContext.SaveChangesAsync(); + + await cookieService.WriteCookieAsync("token", newToken, 7); + + return Result.Ok(); } - public Task RegisterUserAsync(string name, string password) + public async Task LogoutUserAsync() { - throw new NotImplementedException(); + string? token = httpContextAccessor.HttpContext?.Request.Cookies["token"]?.ToString(); + + await cookieService.WriteCookieAsync("token", string.Empty, 0); + + if (!TokenGenerator.ValidateToken(token, "auth")) + { + return Result.Ok(); + } + + User? user = await userDatabaseContext.Users.FirstOrDefaultAsync(u => u.SessionToken == token); + + if (user is null) + { + return Result.Ok(); + } + + user.SessionToken = null; + + _ = await userDatabaseContext.SaveChangesAsync(); + + return Result.Ok(); + } + + public async Task RegisterUserAsync(string name, string password, Role role) + { + Result userExistsResult = await UserExistsAsync(name); + + if (userExistsResult.IsFailed || userExistsResult.Value) + { + return Result.Fail("User name already exists!"); + } + + User user = new User(name, BC.HashPassword(password), role); + _ = userDatabaseContext.Users.Add(user); + + return (await Result.Try(() => userDatabaseContext.SaveChangesAsync())).ToResult(); } public Task> UserExistsAsync(string name) { - throw new NotImplementedException(); + return Result.Try(() => + userDatabaseContext.Users.AnyAsync(u => u.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))); } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthorizationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthorizationService.cs index 3a2f4c4..e62b137 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthorizationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthorizationService.cs @@ -23,7 +23,7 @@ public class AuthorizationService : IAuthorizationService } else { - return Result.Fail("Use doesn't have the required role!"); + return Result.Fail("User doesn't have the required role!"); } } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/CookieService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/CookieService.cs new file mode 100644 index 0000000..d654fdc --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/CookieService.cs @@ -0,0 +1,18 @@ +using Microsoft.JSInterop; + +namespace Elektrifikatsiya.Services.Implementations; + +public class CookieService : ICookieService +{ + private readonly IJSRuntime jsRuntime; + + public CookieService(IJSRuntime jsRuntime) + { + this.jsRuntime = jsRuntime; + } + + public async Task WriteCookieAsync(string name, string value, int days) + { + _ = await jsRuntime.InvokeAsync("blazorExtensions.WriteCookie", name, value, days); + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/SecureStringGenerator.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/SecureStringGenerator.cs new file mode 100644 index 0000000..a37cb29 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/SecureStringGenerator.cs @@ -0,0 +1,20 @@ +using System.Security.Cryptography; + +namespace Elektrifikatsiya.Utilities; + +public static class SecureStringGenerator +{ + public static string CreateCryptographicRandomString(int count) + { + return Convert.ToBase64String(RandomNumberGenerator.GetBytes(count)); + } + + public static string CreateCryptographicRandomString(int count, int uid) + { + List bytes = RandomNumberGenerator.GetBytes(count).ToList(); + + bytes.AddRange(BitConverter.GetBytes(uid)); + + return Convert.ToBase64String(bytes.ToArray()); + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/TokenGenerator.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/TokenGenerator.cs new file mode 100644 index 0000000..99faf60 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/TokenGenerator.cs @@ -0,0 +1,19 @@ +namespace Elektrifikatsiya.Utilities; + +public static class TokenGenerator +{ + public static string GenerateToken(string tokenType, int uid = 0, int length = 128) + { + return tokenType + "-" + SecureStringGenerator.CreateCryptographicRandomString(length, uid); + } + + public static bool ValidateToken(string? token, string tokenType) + { + if (token is null) + { + return false; + } + + return token.StartsWith(tokenType + "-"); + } +} \ No newline at end of file From 363b01035c6295321385e4325994645d2b9776dc Mon Sep 17 00:00:00 2001 From: Aldin296 <99395958+Aldin296@users.noreply.github.com> Date: Wed, 1 Feb 2023 07:30:38 +0100 Subject: [PATCH 09/85] =?UTF-8?q?Sidebar=20angepasst=20und=20im=20Dashboar?= =?UTF-8?q?d=20die=20Plug=20Liste=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Layout/SideMenu.razor | 34 +++++----- .../Elektrifikatsiya/Pages/Dashboard.razor | 63 ++++++++++--------- .../Elektrifikatsiya/Pages/Dashboard.razor.cs | 28 +++++++++ 3 files changed, 77 insertions(+), 48 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor index 7450e71..9c3955f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor @@ -15,33 +15,27 @@ Dashboard + + + + + + Admin - - - - Pages - - - Simple Form - - + + + Add Plug + - - - - Apps - - - - Todo - - - + + + Setting + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index d918c4b..102f6ba 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -1,31 +1,38 @@ @page "/" @inject IVersionProvider VersionProvider -Blazorise + + + + @for (int i = 0; i < 3; i++) + { + + + + + + Plug #@i + + + 60W + + + + + User: .... +
+ Room: .... +
+
+
+ + + +
+
+ } +
+
+
- - Blazorise is a component library built on top of Blazor and CSS frameworks like Bootstrap, Bulma, Ant Design, and Material. It can be used to build responsive, single-page web applications. - - - - - This is a Blazorise Starting Template allowing you to quickly get started building your project! - - - - The bare minimum has been installed for you: -
    -
  • Blazorise @($"v{VersionProvider.MilestoneVersion}")
  • -
  • The Blazorise Provider you have selected
  • -
  • The corresponding icon provider
  • -
- However Blazorise has many more extensions at your disposal. - You can find them here. -
- - - Please visit the official Blazorise Demo for component examples. - - - Please visit the official Blazorise Documentation to learn more about the available components. - -
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs new file mode 100644 index 0000000..ed25e93 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using System.Net.Http; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Components.Forms; +using Microsoft.AspNetCore.Components.Routing; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.Web.Virtualization; +using Microsoft.JSInterop; +using Elektrifikatsiya; +using Blazorise; + +namespace Elektrifikatsiya.Pages +{ + public partial class Dashboard + { + string bgcolor { get; set; } = "00f"; // (starting value) + void SetColor() + { + bgcolor = "#fd7"; + StateHasChanged(); // may not be required, but I'm at work right now, so can't check + } + } +} \ No newline at end of file From ac0ea50d015bd730f2a41fc8e9a16e2b054d1f5b Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 1 Feb 2023 11:13:23 +0100 Subject: [PATCH 10/85] Fix --- .../Components/Layout/SideMenu.razor | 2 +- .../Components/Layout/TopMenu.razor | 3 -- .../Elektrifikatsiya/Elektrifikatsiya.csproj | 1 + .../Elektrifikatsiya/Models/Event.cs | 18 +++++++++++ .../Elektrifikatsiya/Pages/Dashboard.razor | 31 ++++++++++++++++--- .../Elektrifikatsiya/Program.cs | 9 +++++- 6 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor index 9c3955f..ae54355 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor @@ -34,7 +34,7 @@ - Setting + Settings diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/TopMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/TopMenu.razor index 2fd68fd..4422d54 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/TopMenu.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/TopMenu.razor @@ -12,9 +12,6 @@ - - Home - Documentation diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index ff8eb7c..358f14e 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -19,6 +19,7 @@ + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs new file mode 100644 index 0000000..b949a88 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs @@ -0,0 +1,18 @@ +namespace Elektrifikatsiya.Models +{ + public class Event + { + public string EventName { get; set; } + public string Description { get; set; } + public DateTime Date { get; set; } + + //if Plug Class implemented -> Property for plug + + public Event(string eventName, string description, DateTime date) + { + EventName = eventName; + Description = description; + Date = date; + } + } +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 102f6ba..4a78171 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -1,4 +1,6 @@ @page "/" +@using Blazorise.Components +@using Elektrifikatsiya.Models; @inject IVersionProvider VersionProvider @@ -9,10 +11,10 @@ - + Plug #@i - + 60W @@ -28,11 +30,30 @@ - - - + + + } + + + +
+ @context.Item.EventName + @context.Item.Date +
+ @context.Item.Description +
+
+
+@code { + List events = new List() { new Event("Jude", "Alles kaputt", DateTime.Now), new Event("Jude", "Alles kaputt", DateTime.Now), new Event("Jude", "Alles kaputt", DateTime.Now) }; +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 44ecc11..210cf3c 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -1,4 +1,5 @@ using Blazorise; +using Blazorise.Bootstrap; using Blazorise.Icons.Material; using Blazorise.Material; @@ -41,4 +42,10 @@ void AddBlazorise(IServiceCollection services) _ = services .AddMaterialProviders() .AddMaterialIcons(); -} \ No newline at end of file +} +builder.Services + .AddBlazorise(options => + { + options.Immediate = true; + }) + .AddBootstrapProviders(); \ No newline at end of file From 44ffa1d7b2be79af91aa86d598b4d7ca3f03810c Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed, 1 Feb 2023 11:30:02 +0100 Subject: [PATCH 11/85] Visual studio dumb --- src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 4272c7b..be8b6d4 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -17,6 +17,7 @@ + From 0f27469f56486de8e1453592905e2f90b0a89d1a Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 1 Feb 2023 11:39:35 +0100 Subject: [PATCH 12/85] fixed and updated ui stuff Eventlist added, Plug List updated and "Setting" in Sidebar changed to "Settings" --- src/Elektrifikatsiya/Elektrifikatsiya/{Model => Models}/Device.cs | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/Elektrifikatsiya/Elektrifikatsiya/{Model => Models}/Device.cs (100%) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Model/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs similarity index 100% rename from src/Elektrifikatsiya/Elektrifikatsiya/Model/Device.cs rename to src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs From af673b65727c493e469ada2a4d1d9656240e1605 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 2 Feb 2023 16:38:55 +0100 Subject: [PATCH 13/85] Add user database setup --- src/Elektrifikatsiya/Elektrifikatsiya/Program.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index fb58465..f600e2f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -11,7 +11,7 @@ WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); -builder.Services.AddDbContext(options => options.UseSqlite("/host/UserDatabase.sqlite")); +builder.Services.AddDbContext(options => options.UseSqlite("Data Source=./UserDatabase.sqlite")); AddBlazorise(builder.Services); @@ -33,6 +33,9 @@ app.UseRouting(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); +IServiceScope serviceScope = app.Services.GetRequiredService().CreateScope(); +serviceScope.ServiceProvider.GetRequiredService().Database.EnsureCreated(); + app.Run(); void AddBlazorise(IServiceCollection services) From 756dc21c5f89def78878ac170f6b94141f309622 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 2 Feb 2023 16:39:15 +0100 Subject: [PATCH 14/85] Fix dockerfile --- .../Elektrifikatsiya/Properties/launchSettings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json index 7111a52..71c02c5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json @@ -19,7 +19,7 @@ "Docker": { "commandName": "Docker", "launchBrowser": true, - "launchUrl": "{Scheme}://{IPAdress}:{ServicePort}", + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", "publishAllPorts": true, "useSSL": true, "DockerfileRunArguments": "-p 80:80 -p 443:443" From 38f255c430a648d49d3146abc09c2bd4c7fb3f15 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 8 Feb 2023 08:01:59 +0100 Subject: [PATCH 15/85] Dashboard progress / Docker fix Dashboard Plug und Eventpanels sind jetzt scrollbar und Docker Error wurde behoben. --- .../DeviceManagementDatabaseContext.cs | 2 +- .../Elektrifikatsiya/Models/Device.cs | 11 +++++- .../Elektrifikatsiya/Models/Event.cs | 2 +- .../Elektrifikatsiya/Pages/Dashboard.razor | 39 ++++++++++--------- .../Properties/launchSettings.json | 2 +- 5 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs index f182b24..693b9e5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs @@ -1,4 +1,4 @@ -using Elektrifikatsiya.Model; +using Elektrifikatsiya.Models; using Microsoft.EntityFrameworkCore; namespace Elektrifikatsiya.Database diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs index 65cdf34..0176b78 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs @@ -1,7 +1,7 @@ using System.ComponentModel.DataAnnotations; using System.Net; -namespace Elektrifikatsiya.Model; +namespace Elektrifikatsiya.Models; public class Device { @@ -11,10 +11,17 @@ public class Device public string Name { get; private set; } = string.Empty; [Required] public IPAddress Address { get; private set; } + public int PowerUsage { get; set; } + public string User { get; set; } + public string Room { get; set; } - public Device(string key, IPAddress address) + public Device(string key, string name, IPAddress address, int powerUsage, string user, string room) { Key = key; + Name = name; Address = address; + PowerUsage = powerUsage; + User = user; + Room = room; } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs index b949a88..5c76207 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs @@ -6,7 +6,7 @@ public string Description { get; set; } public DateTime Date { get; set; } - //if Plug Class implemented -> Property for plug + //if Plug Class implemented -> Property for which plug this event is from public Event(string eventName, string description, DateTime date) { diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 4a78171..c8f9a64 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -1,28 +1,31 @@ @page "/" -@using Blazorise.Components +@using Blazorise.Components; @using Elektrifikatsiya.Models; @inject IVersionProvider VersionProvider - - - @for (int i = 0; i < 3; i++) - { + + + - Plug #@i - - - 60W + @context.Item.Name - User: .... + User: @context.Item.User
- Room: .... + Room: @context.Item.Room +
+ + @context.Item.PowerUsage W
@@ -33,16 +36,15 @@
- } - + + - + + TextField="@((_)=>(""))" + ValueField="@((_)=>(""))" + Mode="ListGroupMode.Static">
@context.Item.EventName @@ -55,5 +57,6 @@ @code { List events = new List() { new Event("Jude", "Alles kaputt", DateTime.Now), new Event("Jude", "Alles kaputt", DateTime.Now), new Event("Jude", "Alles kaputt", DateTime.Now) }; + List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json index 7111a52..71c02c5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json @@ -19,7 +19,7 @@ "Docker": { "commandName": "Docker", "launchBrowser": true, - "launchUrl": "{Scheme}://{IPAdress}:{ServicePort}", + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", "publishAllPorts": true, "useSSL": true, "DockerfileRunArguments": "-p 80:80 -p 443:443" From 6abd11ac86ab48a70569b850387d294db4d59886 Mon Sep 17 00:00:00 2001 From: Stefan-5422 <32109571+Stefan-5422@users.noreply.github.com> Date: Wed, 8 Feb 2023 08:03:51 +0100 Subject: [PATCH 16/85] =?UTF-8?q?=F0=9F=A7=BEWhoop=20Whoop=20Database=20Ti?= =?UTF-8?q?me=20=F0=9F=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Database/DeviceManagementDatabaseContext.cs | 4 ++++ .../Elektrifikatsiya/Elektrifikatsiya.csproj | 1 + src/Elektrifikatsiya/Elektrifikatsiya/Program.cs | 8 ++++++++ 3 files changed, 13 insertions(+) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs index f182b24..72891f0 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs @@ -6,5 +6,9 @@ namespace Elektrifikatsiya.Database public class DeviceManagmentDatabaseContext : DbContext { public DbSet Devices { get; set; } + + public DeviceManagmentDatabaseContext(DbContextOptions options) : base(options) + { + } } } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index ff8eb7c..b1f24ea 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -22,6 +22,7 @@ + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 44ecc11..6e8892e 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -1,12 +1,15 @@ using Blazorise; using Blazorise.Icons.Material; using Blazorise.Material; +using Elektrifikatsiya.Database; +using Microsoft.EntityFrameworkCore; WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); +builder.Services.AddDbContext((options)=>options.UseSqlite("Data Source=./DeviceManagement.sqlite")); AddBlazorise(builder.Services); @@ -32,6 +35,11 @@ app.UseEndpoints(endpoints => _ = endpoints.MapFallbackToPage("/_Host"); }); +app.MapControllers(); + +AsyncServiceScope scope = app.Services.CreateAsyncScope(); +scope.ServiceProvider.GetRequiredService().Database.EnsureCreated(); + app.Run(); void AddBlazorise(IServiceCollection services) From ab159df6a94ce4919d418ae6d84e530f504537d6 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed, 8 Feb 2023 08:18:39 +0100 Subject: [PATCH 17/85] Add cookie script --- .../Elektrifikatsiya/Pages/_Layout.cshtml | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Layout.cshtml b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Layout.cshtml index a689909..d698356 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Layout.cshtml +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Layout.cshtml @@ -40,5 +40,34 @@ + + From 53cddb8ef9157d172e681cdcd0433c282279d10d Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 8 Feb 2023 10:13:38 +0100 Subject: [PATCH 18/85] =?UTF-8?q?Yeet=20=F0=9F=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🐱‍🐉🎉🙌🤞 --- .../Elektrifikatsiya/App.razor | 103 ++++++----- .../Components/Layout/SideMenu.razor | 21 +-- .../Components/Layout/TopMenu.razor | 160 ------------------ .../Elektrifikatsiya/Elektrifikatsiya.csproj | 9 +- .../Elektrifikatsiya/Layouts/MainLayout.razor | 77 ++------- .../Elektrifikatsiya/Pages/Dashboard.razor | 64 ++++++- .../Elektrifikatsiya/Pages/_Host.cshtml | 1 + .../Elektrifikatsiya/Pages/_Layout.cshtml | 1 + .../Elektrifikatsiya/_Imports.razor | 1 + .../Elektrifikatsiya/wwwroot/brand-logo.png | Bin 13904 -> 0 bytes .../Elektrifikatsiya/wwwroot/logo.png | Bin 0 -> 270080 bytes 11 files changed, 153 insertions(+), 284 deletions(-) delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/TopMenu.razor delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/brand-logo.png create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/logo.png diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/App.razor b/src/Elektrifikatsiya/Elektrifikatsiya/App.razor index 9c0ed48..cf7da0a 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/App.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/App.razor @@ -1,48 +1,63 @@  - - - - - -

Sorry, there's nothing at this address.

-
-
- - - + + + + + +

Sorry, there's nothing at this address.

+
+
+ + +
@code { - private Theme theme = new() - { - BarOptions = new() - { - HorizontalHeight = "72px" - }, - ColorOptions = new() - { - Primary = "#0288D1", - Secondary = "#A65529", - Success = "#23C02E", - Info = "#9BD8FE", - Warning = "#F8B86C", - Danger = "#F95741", - Light = "#F0F0F0", - Dark = "#535353", - }, - BackgroundOptions = new() - { - Primary = "#0288D1", - Secondary = "#A65529", - Success = "#23C02E", - Info = "#9BD8FE", - Warning = "#F8B86C", - Danger = "#F95741", - Light = "#F0F0F0", - Dark = "#535353", - }, - InputOptions = new() - { - CheckColor = "#0288D1", - } - }; + private Theme theme = new() + { + BarOptions = new() + { + HorizontalHeight = "72px", + DarkColors = new() + { + ItemColorOptions = new() + { + ActiveBackgroundColor = "#1a237e", + ActiveColor = "#1a237e", + HoverColor = "#1a237e", + } + + } + }, + ColorOptions = new() + { + Primary = "#1a237e", + Secondary = "#A65529", + Success = "#23C02E", + Info = "#9BD8FE", + Warning = "#F8B86C", + Danger = "#F95741", + Light = "#F0F0F0", + Dark = "#535353", + }, + BackgroundOptions = new() + { + Primary = "#1a237e", + Secondary = "#A65529", + Success = "#23C02E", + Info = "#9BD8FE", + Warning = "#F8B86C", + Danger = "#F95741", + Light = "#F0F0F0", + Dark = "#535353", + }, + InputOptions = new() + { + CheckColor = "#1a237e", + }, + TextColorOptions = new() + { + Dark = "#000000", + Primary = "#1a237e" + } + }; } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor index ae54355..3691e03 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor @@ -1,6 +1,6 @@  - + @@ -12,28 +12,28 @@ - - + + Dashboard - - + + Admin - - + + Add Plug - - + + Settings @@ -43,5 +43,6 @@ @code { private bool pagesBarVisible = true; - RenderFragment customIcon =@; + //TODO: replace logo png with transparent background one + RenderFragment customIcon =@; } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/TopMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/TopMenu.razor deleted file mode 100644 index 4422d54..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/TopMenu.razor +++ /dev/null @@ -1,160 +0,0 @@ -@using Blazorise.Localization - - - - - - - Elektrifikatsiya - - - - - - - - Documentation - - - - More - - - Quick-Start Guide - - - - Usage - - - - - - - Layout - - - @if ( LayoutType == "fixed-header" ) - { - - } - Fixed Header - - - @if ( LayoutType == "fixed-header-footer-only" ) - { - - } - Fixed Header and Footer only - - - @if ( LayoutType == "sider-with-header-on-top" ) - { - - } - Sider with Header on top - - - - - - - - - - - - - @foreach ( var cultureInfo in LocalizationService.AvailableCultures ) - { - - @if ( cultureInfo.IsNeutralCulture ) - { - @cultureInfo.EnglishName - } - else - { - @cultureInfo.Parent.EnglishName - } - - } - - - - - - Theme - - - - - Theme enabled - - - - - - - Gradient colors - - - Rounded elements - - - - - - - - - - - - - - - GitHub - - - - -@code { - protected override async Task OnInitializedAsync() - { - await SelectCulture( "en-US" ); - - await base.OnInitializedAsync(); - } - - Task SelectCulture( string name ) - { - LocalizationService.ChangeLanguage( name ); - - return Task.CompletedTask; - } - - private bool topbarVisible = false; - - Task OnLayoutTypeChecked( string layoutType ) - { - LayoutType = layoutType; - - return LayoutTypeChanged.InvokeAsync( layoutType ); - } - - [Parameter] public EventCallback ThemeEnabledChanged { get; set; } - - [Parameter] public EventCallback ThemeGradientChanged { get; set; } - - [Parameter] public EventCallback ThemeRoundedChanged { get; set; } - - [Parameter] public EventCallback ThemeColorChanged { get; set; } - - [Parameter] public string LayoutType { get; set; } - - [Parameter] public EventCallback LayoutTypeChanged { get; set; } - - [Inject] protected ITextLocalizerService LocalizationService { get; set; } - - [CascadingParameter] protected Theme Theme { get; set; } -} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 358f14e..d7b4d83 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -18,10 +18,11 @@ - - - - + + + + + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor index 7d66732..362810d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor @@ -2,67 +2,16 @@ @inherits LayoutComponentBase -@if ( layoutType == "fixed-header" ) -{ - - - - - - - - - - - - @Body - - - -} -else if ( layoutType == "fixed-header-footer-only" ) -{ - - - - - - @Body - - - - - -} -else if ( layoutType == "sider-with-header-on-top" ) -{ - - - - - - - - - - - - - @Body - - - - -} \ No newline at end of file + + + + + + + + + + @Body + + + \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index c8f9a64..3cd8102 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -2,7 +2,8 @@ @using Blazorise.Components; @using Elektrifikatsiya.Models; @inject IVersionProvider VersionProvider - + + + + + + + + + @code { - List events = new List() { new Event("Jude", "Alles kaputt", DateTime.Now), new Event("Jude", "Alles kaputt", DateTime.Now), new Event("Jude", "Alles kaputt", DateTime.Now) }; + //TODO: insert new event here if plug produces one + List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; + //TODO: insert new Device here if user adds one List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; + + //code for graph + LineChart lineChart; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + await HandleRedraw(); + } + } + + async Task HandleRedraw() + { + await lineChart.Clear(); + + await lineChart.AddLabelsDatasetsAndUpdate(Labels, GetLineChartDataset()); + } + + //TODO: insert dataset of current and last voltage usages + LineChartDataset GetLineChartDataset() + { + return new LineChartDataset + { + Label = "# of random number in thousands", + Data = RandomizeData(), + BackgroundColor = backgroundColors, + BorderColor = borderColors, + Fill = true, + PointRadius = 3, + CubicInterpolationMode = "monotone", + }; + } + + string[] Labels = { "Red", "Blue", "Yellow", "Green", "Purple", "Orange" }; + List backgroundColors = new List { ChartColor.FromRgba(255, 99, 132, 0.2f), ChartColor.FromRgba(54, 162, 235, 0.2f), ChartColor.FromRgba(255, 206, 86, 0.2f), ChartColor.FromRgba(75, 192, 192, 0.2f), ChartColor.FromRgba(153, 102, 255, 0.2f), ChartColor.FromRgba(255, 159, 64, 0.2f) }; + List borderColors = new List { ChartColor.FromRgba(255, 99, 132, 1f), ChartColor.FromRgba(54, 162, 235, 1f), ChartColor.FromRgba(255, 206, 86, 1f), ChartColor.FromRgba(75, 192, 192, 1f), ChartColor.FromRgba(153, 102, 255, 1f), ChartColor.FromRgba(255, 159, 64, 1f) }; + + List RandomizeData() + { + var r = new Random(DateTime.Now.Millisecond); + + return new List { + r.Next( 3, 50 ) * r.NextDouble(), + r.Next( 3, 50 ) * r.NextDouble(), + r.Next( 3, 50 ) * r.NextDouble(), + r.Next( 3, 50 ) * r.NextDouble(), + r.Next( 3, 50 ) * r.NextDouble(), + r.Next( 3, 50 ) * r.NextDouble() }; + } } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml index 3e71a2d..2619d65 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml @@ -6,3 +6,4 @@ } + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Layout.cshtml b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Layout.cshtml index a689909..3cc3b8d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Layout.cshtml +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Layout.cshtml @@ -40,5 +40,6 @@ + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/_Imports.razor b/src/Elektrifikatsiya/Elektrifikatsiya/_Imports.razor index 7fc555e..971248a 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/_Imports.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/_Imports.razor @@ -9,3 +9,4 @@ @using Elektrifikatsiya @using Blazorise +@using Blazorise.Charts diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/brand-logo.png b/src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/brand-logo.png deleted file mode 100644 index 374600396ae76e9dff5cc99d0db43adf9a848b48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13904 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%0DkS%)35x64QDElkM}dP>%%hr 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 Date: Wed, 8 Feb 2023 10:19:49 +0100 Subject: [PATCH 19/85] Remove --- src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml index 2619d65..3e71a2d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml @@ -6,4 +6,3 @@ } - From 0a003f7aa7c0f26dc215b856c56a898d9394d177 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Tue, 21 Feb 2023 18:39:07 +0100 Subject: [PATCH 20/85] Fix docs --- .../Elektrifikatsiya/App.razor | 119 +++++++++--------- .../Elektrifikatsiya/Models/Device.cs | 5 +- .../Services/IAuthenticationService.cs | 12 +- .../Utilities/TokenGenerator.cs | 13 ++ 4 files changed, 84 insertions(+), 65 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/App.razor b/src/Elektrifikatsiya/Elektrifikatsiya/App.razor index cf7da0a..8286e30 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/App.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/App.razor @@ -1,63 +1,64 @@ - - - - - - -

Sorry, there's nothing at this address.

-
-
- - - +@using Blazorise.Components + + + + + + +

Sorry, there's nothing at this address.

+
+
+ + +
@code { - private Theme theme = new() - { - BarOptions = new() - { - HorizontalHeight = "72px", - DarkColors = new() - { - ItemColorOptions = new() - { - ActiveBackgroundColor = "#1a237e", - ActiveColor = "#1a237e", - HoverColor = "#1a237e", - } + private Theme theme = new() + { + BarOptions = new() + { + HorizontalHeight = "72px", + DarkColors = new() + { + ItemColorOptions = new() + { + ActiveBackgroundColor = "#1a237e", + ActiveColor = "#1a237e", + HoverColor = "#1a237e", + } - } - }, - ColorOptions = new() - { - Primary = "#1a237e", - Secondary = "#A65529", - Success = "#23C02E", - Info = "#9BD8FE", - Warning = "#F8B86C", - Danger = "#F95741", - Light = "#F0F0F0", - Dark = "#535353", - }, - BackgroundOptions = new() - { - Primary = "#1a237e", - Secondary = "#A65529", - Success = "#23C02E", - Info = "#9BD8FE", - Warning = "#F8B86C", - Danger = "#F95741", - Light = "#F0F0F0", - Dark = "#535353", - }, - InputOptions = new() - { - CheckColor = "#1a237e", - }, - TextColorOptions = new() - { - Dark = "#000000", - Primary = "#1a237e" - } - }; + } + }, + ColorOptions = new() + { + Primary = "#1a237e", + Secondary = "#A65529", + Success = "#23C02E", + Info = "#9BD8FE", + Warning = "#F8B86C", + Danger = "#F95741", + Light = "#F0F0F0", + Dark = "#535353", + }, + BackgroundOptions = new() + { + Primary = "#1a237e", + Secondary = "#A65529", + Success = "#23C02E", + Info = "#9BD8FE", + Warning = "#F8B86C", + Danger = "#F95741", + Light = "#F0F0F0", + Dark = "#535353", + }, + InputOptions = new() + { + CheckColor = "#1a237e", + }, + TextColorOptions = new() + { + Dark = "#000000", + Primary = "#1a237e" + } + }; } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs index 0176b78..41f3f38 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs @@ -7,10 +7,13 @@ public class Device { [Key] public string Key { get; private set; } + [Required] - public string Name { get; private set; } = string.Empty; + public string Name { get; private set; } + [Required] public IPAddress Address { get; private set; } + public int PowerUsage { get; set; } public string User { get; set; } public string Room { get; set; } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs index 2ccc8ec..611a36a 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IAuthenticationService.cs @@ -15,7 +15,9 @@ public interface IAuthenticationService /// /// Registers a new user. /// - /// The E-mail address of the user. + /// The name address of the user. + /// The password of the user. + /// The default role of the user. /// A to . Task RegisterUserAsync(string name, string password, Role role); @@ -23,7 +25,8 @@ public interface IAuthenticationService /// /// Logs a user in. /// - /// The E-mail address of the user. + /// The name of the user. + /// The password of the user. /// A to . Task LoginUserAsync(string name, string password); @@ -36,14 +39,13 @@ public interface IAuthenticationService /// /// Deletes the current user. /// - /// The deletion token. - /// A to and a that indicates if the operation was successful. + /// A to . Task DeleteUserAsync(); /// /// Checks if a user exists. /// - /// The E-mail address of the user. + /// The name address of the user. /// A to and a that indicates if the user exists. Task> UserExistsAsync(string name); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/TokenGenerator.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/TokenGenerator.cs index 99faf60..17e6a02 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/TokenGenerator.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/TokenGenerator.cs @@ -2,11 +2,24 @@ public static class TokenGenerator { + /// + /// Creates secure token and uses an UID to make it unique. + /// + /// The type of the token. + /// The UID of a user. + /// The length of the token. + /// public static string GenerateToken(string tokenType, int uid = 0, int length = 128) { return tokenType + "-" + SecureStringGenerator.CreateCryptographicRandomString(length, uid); } + /// + /// Checks if a token is valid. + /// + /// The token to validate. + /// The type the token should have. + /// public static bool ValidateToken(string? token, string tokenType) { if (token is null) From b1c9a7b1e6c46c197bf524069d85c8536469ef2b Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Tue, 21 Feb 2023 18:39:53 +0100 Subject: [PATCH 21/85] Remove `/Model` directory from project --- .../Elektrifikatsiya/Elektrifikatsiya.csproj | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 2912297..9d16e3c 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -17,6 +17,13 @@ ..\docker-compose.dcproj + + + + + + + @@ -32,7 +39,6 @@ - From ba6fdb3fdefb96072e0b23b968818b971b2a9bfb Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed, 22 Feb 2023 12:19:07 +0100 Subject: [PATCH 22/85] Add device registration basics --- .../Elektrifikatsiya/Models/Device.cs | 23 +++-- .../Models/DeviceStatusChagedEventArgs.cs | 11 +++ .../Elektrifikatsiya/Program.cs | 30 +++---- .../Services/IDeviceManagmentService.cs | 22 +++++ .../Services/IDeviceStatusService.cs | 16 ++++ .../Implementations/DeviceManagmentService.cs | 85 +++++++++++++++++++ .../Implementations/DeviceStatusService.cs | 48 +++++++++++ .../Services/Implementations/UpdateService.cs | 62 ++++++++++++++ 8 files changed, 274 insertions(+), 23 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChagedEventArgs.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs index 41f3f38..0bcca1a 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Net; namespace Elektrifikatsiya.Models; @@ -6,24 +7,30 @@ namespace Elektrifikatsiya.Models; public class Device { [Key] - public string Key { get; private set; } + public string MacAddress { get; private set; } [Required] - public string Name { get; private set; } + public string Name { get; set; } [Required] - public IPAddress Address { get; private set; } + public IPAddress IpAddress { get; set; } + [Required] + public User User { get; set; } + + [NotMapped] public int PowerUsage { get; set; } - public string User { get; set; } + public string Room { get; set; } - public Device(string key, string name, IPAddress address, int powerUsage, string user, string room) + [NotMapped] + public bool Available { get; set; } + + public Device(string macAddress, string name, IPAddress address, User user, string room) { - Key = key; + MacAddress = macAddress; Name = name; - Address = address; - PowerUsage = powerUsage; + IpAddress = address; User = user; Room = room; } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChagedEventArgs.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChagedEventArgs.cs new file mode 100644 index 0000000..8b85cd5 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChagedEventArgs.cs @@ -0,0 +1,11 @@ +namespace Elektrifikatsiya.Models; + +public class DeviceStatusChagedEventArgs : EventArgs +{ + public string MacAddress { get; set; } + + public DeviceStatusChagedEventArgs(string macAddress) + { + MacAddress = macAddress; + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 766474c..dfa27db 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -2,10 +2,10 @@ using Blazorise; using Blazorise.Bootstrap; using Blazorise.Icons.Material; using Blazorise.Material; -using Elektrifikatsiya.Database; -using Microsoft.EntityFrameworkCore; using Elektrifikatsiya.Database; +using Elektrifikatsiya.Services; +using Elektrifikatsiya.Services.Implementations; using Microsoft.EntityFrameworkCore; @@ -14,8 +14,16 @@ WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); +builder.Services.AddHostedService(); +builder.Services.AddSingleton(); +builder.Services.AddTransient(); builder.Services.AddDbContext(options => options.UseSqlite("Data Source=./UserDatabase.sqlite")); -builder.Services.AddDbContext((options)=>options.UseSqlite("Data Source=./DeviceManagement.sqlite")); +builder.Services.AddDbContext((options) => options.UseSqlite("Data Source=./DeviceManagement.sqlite")); +builder.Services.AddBootstrapProviders(); +builder.Services.AddBlazorise(options => +{ + options.Immediate = true; +}); AddBlazorise(builder.Services); @@ -49,15 +57,7 @@ app.Run(); void AddBlazorise(IServiceCollection services) { - _ = services - .AddBlazorise(); - _ = services - .AddMaterialProviders() - .AddMaterialIcons(); -} -builder.Services - .AddBlazorise(options => - { - options.Immediate = true; - }) - .AddBootstrapProviders(); \ No newline at end of file + _ = services.AddBlazorise(); + _ = services.AddMaterialProviders(); + _ = services.AddMaterialIcons(); +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs new file mode 100644 index 0000000..1da0c91 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs @@ -0,0 +1,22 @@ +using Elektrifikatsiya.Models; + +using FluentResults; + +using System.Net; + +namespace Elektrifikatsiya.Services; + +public interface IDeviceManagmentService +{ + public Task> Register(IPAddress ip, User user, string? name = null, string room = "default"); + + public Task UnRegister(string macAdress); + + public Result GetDevice(string macAdress); + + public Result> GetDevices(); + + public Result> GetDevicesInRoom(string room); + + public Result> GetDevicesOfUser(int userId); +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs new file mode 100644 index 0000000..ef7fab3 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs @@ -0,0 +1,16 @@ +using Elektrifikatsiya.Models; + +using FluentResults; + +namespace Elektrifikatsiya.Services; + +public interface IDeviceStatusService +{ + public event EventHandler OnDeviceStatusChanged; + + public Result> GetDevices(); + + public Result UpdateDeviceStatus(Device device); + + public Result TrackDevice(Device device); +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs new file mode 100644 index 0000000..75e9a65 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -0,0 +1,85 @@ +using Elektrifikatsiya.Database; +using Elektrifikatsiya.Models; + +using FluentResults; + +using System.Net; + +namespace Elektrifikatsiya.Services.Implementations; + +public class DeviceManagmentService : IDeviceManagmentService +{ + private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; + private readonly IDeviceStatusService deviceStatusService; + + public DeviceManagmentService(DeviceManagmentDatabaseContext deviceManagmentDatabaseContext, IDeviceStatusService deviceStatusService) + { + this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext; + this.deviceStatusService = deviceStatusService; + } + + public Result GetDevice(string macAdress) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); + + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } + + Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); + + if (device is null) + { + return Result.Fail("Device does not exist!"); + } + + return device; + } + + public Result> GetDevices() + { + Result> getDevicesResult = deviceStatusService.GetDevices(); + + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } + + return getDevicesResult.Value.ToList(); + } + + public Result> GetDevicesInRoom(string room) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); + + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } + + return getDevicesResult.Value.Where(d => d.Room == room).ToList(); + } + + public Result> GetDevicesOfUser(int userId) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); + + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } + + return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); + } + + public Task> Register(IPAddress ip, User user, string? name = null, string room = "default") + { + throw new NotImplementedException(); + } + + public Task UnRegister(string macAdress) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs new file mode 100644 index 0000000..8b4263e --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs @@ -0,0 +1,48 @@ +using Elektrifikatsiya.Models; + +using FluentResults; + +namespace Elektrifikatsiya.Services.Implementations; + +public class DeviceStatusService : IDeviceStatusService +{ + public event EventHandler? OnDeviceStatusChanged; + + private readonly Dictionary devices = new(); + + public Result> GetDevices() + { + return devices.Values.ToList(); + } + + public Result UpdateDeviceStatus(Device device) + { + Device? modDevice = devices.GetValueOrDefault(device.MacAddress); + + if (modDevice is null) + { + return Result.Fail("Device not tracked!"); + } + + modDevice.PowerUsage = device.PowerUsage; + modDevice.Available = device.Available; + modDevice.IpAddress = device.IpAddress; + modDevice.Name = device.Name; + + OnDeviceStatusChanged?.Invoke(this, new DeviceStatusChagedEventArgs(device.MacAddress)); + + return Result.Ok(); + } + + public Result TrackDevice(Device device) + { + if (devices.ContainsKey(device.MacAddress)) + { + return Result.Fail("Device already tracked!"); + } + + devices[device.MacAddress] = device; + + return Result.Ok(); + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs new file mode 100644 index 0000000..6271a23 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs @@ -0,0 +1,62 @@ +using Elektrifikatsiya.Database; +using Elektrifikatsiya.Models; + +using Microsoft.EntityFrameworkCore; + +namespace Elektrifikatsiya.Services.Implementations; + +public class UpdateService : IHostedService, IDisposable +{ + private readonly ILogger logger; + private readonly IDeviceStatusService deviceStatusService; + private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; + private Timer? timer = null; + + public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, DeviceManagmentDatabaseContext deviceManagmentDatabaseContext) + { + this.logger = logger; + this.deviceStatusService = deviceStatusService; + this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + logger.LogInformation("Starting update service..."); + + foreach (Device device in await deviceManagmentDatabaseContext.Devices.AsNoTracking().ToListAsync(cancellationToken)) + { + _ = deviceStatusService.TrackDevice(device); + } + + timer = new Timer(Update, null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); + + logger.LogInformation("Update service started."); + } + + private void Update(object? state) + { + //TODO: Update all devices. + } + + public Task StopAsync(CancellationToken cancellationToken) + { + logger.LogInformation("Stopping update service."); + + _ = timer?.Change(Timeout.Infinite, 0); + + logger.LogInformation("Stopped update service."); + + return Task.CompletedTask; + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + timer?.Dispose(); + } +} \ No newline at end of file From 6a3cc4472d69f5e221b116ed0672b2f1b16c5356 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 1 Mar 2023 08:45:23 +0100 Subject: [PATCH 23/85] Yes Yes very good improvement --- .../Elektrifikatsiya/Pages/Dashboard.razor | 106 +++++++++--------- .../Elektrifikatsiya/Pages/_Host.cshtml | 1 - .../Elektrifikatsiya/wwwroot/logo.png | Bin 270080 -> 122304 bytes 3 files changed, 54 insertions(+), 53 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 3cd8102..2c3933f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -4,61 +4,63 @@ @inject IVersionProvider VersionProvider - - - - - - - - - @context.Item.Name - - - - - User: @context.Item.User -
- Room: @context.Item.Room -
- - @context.Item.PowerUsage W - -
-
- - - -
-
-
-
-
- - - -
- @context.Item.EventName - @context.Item.Date -
- @context.Item.Description -
-
-
+
+ + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User +
+ Room: @context.Item.Room +
+ + @context.Item.PowerUsage W + +
+
+ + + +
+
+
+
+
+ + + +
+ @context.Item.EventName + @context.Item.Date +
+ @context.Item.Description +
+
+
+
- + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml index 2619d65..3e71a2d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml @@ -6,4 +6,3 @@ } - diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/logo.png b/src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/logo.png index 88939cb78181b36b431a8087b65edc77b3c4a99f..20091eef7609a4d074c452b65a8ab38de284d1c9 100644 GIT binary patch literal 122304 zcmdpe_d6SY_r4h`_8v7_q-u}aTU#|sO9!=LYZXC=B8V6@ic))5t+q(1O(e8NDXG0j zDX~KB?VI=WJnw$~hwl%rxa3OmdYy5f`<(kk%zYDmdRiV@5)u-6gS)rPNJvQc{`sK> z5dYFUIu}bqB1mFzOXpz#=|(OU)Ow^9)|TF~wPVdA$3w-|bgPmw9ciC^W)ynCGDo0bPWP&SV?Edt;Pi(r+aa%HbijXJLwxCc zpnTYamBb5`Nj2wjn?pe_HPrVH=LOjD*1`c?WBIpotp@MmA?Sd2d%NPC?2%J{eK#yo2M(6y+% zH(6Hdv2*iKbd|2;@4@}Z!`9XzV<9kb!II)=i_Nd$ijekctxFI1VK(o>+<{!Y`%A+L z&k&#cBRk5&9*NlT3mJ(DM$GUDSD#I2gr3Hen@j3@OL(`_*JDj|Cnx3qHAora<0y&D zsra>ocHTS2Q=(17A8RBucJpLm=my=nKc&d5WxFx=EP*v8h1qpn{dLWsH$ggMEOc-q z;GV}DTwS!z7(b;sjHged5w))Ybe&@bpX94`Jm=u&ayT3a(?4zfc<^J0^Uhym!~wwN z=c4YjJHA$P8_o2R0}}T~&Z`am44>T}D~^9|0@5)TVDxYVetB(P=$=J(Z!s5lbA}W? zBn@_Jq(4a$(3|tQwkN5C#ho~EJ@t$%_mKNEV>TWrfYjSnO6_Vq{w7qp$2s;+;3Vt+ zZa9eHu3Qp*e5w=Pc>1IMwTJ1WwXEITlVv9^-bMT8F;Ruiw0jjWojHHd7Y~@Oo?9z< z)@Z)ol#kk%A6m$|)lyvTG_6flxhYLRcg_dN1T$aHML|nC3STx&d4yiVJYkX= zM&}>SgmIj=|9e-+J+AG5wYDzHgY)*vAT7PQn)#}=v~>RiCH09C&nDRYAz?)2O`50! zE-uw}`;8o+V~}$Erg@}RN}D|Nw)Px5>AfyCH&u|%jHVD1%&&K#z_XQmjc9L}PO*A)$u!>+0rQ(E|&|E0&1*Q8|+?dqozXFqIN-E6HoPaSFf zVXAO&b9&QE>3hL5lW6oc`lbXYyecagA0J*WPS)9fmn-O9!Pe`DN+q7oJmrk$MfZNS=L?AmgS6(i`&T9KKSoGZLsaTmjP_VIj3KRdiKqL2c`e&1P5e z$nHh{#il18NlEPXRX>D2A0rsy_9}xbtM-2*ZRitM)l6M4VKBH{Ag|-kF}|pa(HNY+ zaa5%^u*s8U@jAZgoju`oWFv^7Brkv~khNglD6B+_`D9j@D=?*C>s|y}npss~5`D|< zl%-%ZCbAAhyH+Vv)+DMkqQSma3FHbAxH&?6&eWXt|ocj|8HHj>dXUVF(PU->|86!5V6^WPr5wu0$Z=Tjm-IsbyVwIqP#tSh?mL$*f= zt=fm@K~JZqPR89}y>ProPeh3Zeb#|fnHo#sYV0nhBI#4PXNRHyrqZ=r_>+`^MW{9+Z2XeZ2)vq!A+t3zI$@vgHmd@M`E~gv%*c&$V%x)0iGUqEGI$E zxMv}AGHYV*?Et>D!2$U7f9-V0MMB$V*sloV_5b>Gq&MFThHfdUKd(Q}I^ez>{Nk!N zC4#6_V{giHa%(2~Cjp68BaI>mYaBQd@MqfQdg)&4qz9eSM}rhBIKs<4EKD9 z6514xfxlKH4;gM!DEm@=e>FMMs#cL*we}U$-o-hgW546q4fdjl45&?D0pd(4Y@he{5Yt9hWaZWSJE{%LRB?seid5 zi-UdBp1b!7i3X8Ip>J`WrhtX(;bJle#U11M4CFewQpOX3_W*l5F<~Y~;Tjw)9u+1m zx1=rHh|%$Gzw2?fH%U~CPOH{z=!P3G;9{CD@;$7+}>Xb|67Z< zzi|tWSxt>tl{{Blxo9k1ZIsmbVLEzPJG;K-^&|X)2Kk2rCpT5If=y!tTHZ3Fj(#Ra z1`5KAr;?bPvczi)1uuyHF=798k4);8bt(h=y71Cd1EySxrZ}u%s8bM5M>EkA>%|? z<{*yiq!<_dE={|%hgwE-S$Jb5rqNdV_H|V|oWU@%yWpp@PSFp9NeWf&vTfOEK4emY z&Mx}H_PQPF@yWo0e@RMy6={NaOV4}T?5eeZ^HxI1+}^>L={WQO-yY1caMci5slgtV zz{aK8?Qvr-R}AM@g2AN%;7?S)%&_23-s27p3$~1+(bDXJ_F^+yuZ;?}4hxgDd1If_ zR*1eb5vMm<;bez$?*(#00n8O!X=j#R_qB_9qwdI)H(h|hH(MSncXP~M98bOd8kpI44%f78^uX#nTWZT*MdJ(E~4<~LL(nry3YbLr;kb89{^5j`2 zG25^#&&;hh108~UQ!(yPELaEhAYFG%|Cc1A4glWv%0vYDSR~TqURv7#X-rUeNTZ2G zNV-ndeqjoY(e^K>i9;o|5UVO&6bKLjMoDn(9plzrF)sr8zfLHf5$JG6mo$Hw$FA%= zL?NX2gEY1L7fE<|)t_R=T)(!@u(1JcQ**@=tGD;-#R@!AbcPDUny#^~F{ljZ%DFW! zku`ZnZlTH6DvjL&-?mp=qD!K`TGPNoMS*Zy1h@|=B)|)$fj(#1_bqq>=r;p_&@rq* zcX73H_`B17KC(-yB72%ZRS{qycRYX+*c4=s)BGdrnBCg5E_t@P;+U=}{x{-PxWN;X zydGJbe?C-3Rvpx}1i!CYpwWkQ0QVG@3#trg9{Gw6|1flWDp%49CbJ!G^CT@`Dwo~^#-JeN7PM2a*@Gz5;*7fB<2tRe-xvtj`3+(Pj9BbF zr-VK~KK|KVAoSo+=&Myx*leOAYv2{Ez|IT2--Ha_7d*Oxeb>mzaju8rwR88GsyEUE z{n&fov}1Z549M74yerp*`$e2Ho46cslAz(IKLRT<{hTkN{~QPo;ugb zjy-+=`B|E?GlV4|6qlOLz9$>B#`98e8Q>ubL}a*PwRJ0hu*DiXB($sx$Y79PV0~sE$|D!#DAsR0iE@+Crd%PL%KB;Yl>D zN-*FFS^|H1x9{AZ(PWh~2iJpc>I{v^5ei;r;9$}SAN(QVRKHg zk(K_Cze{R@efVB}?7u~{K@LDNGIk})<4se^g!D(#i_g|JzL!Z&H>f6Ws6cPZ;Y|$- zwTKXA!?Ra91Xj)kz+2fS0V>efv~Nm`=WbQ9Noifv8S`_}n=^Q4LLH;hD8K_{Iq(H& zP@Q&)duv3QNgZtk7R@q0`2V|d@U`P$#<~22oiB$ zIvTA*3NIpyDlz8DdMl&gj2+LB1iSSh(2|@{2kNA7eL^X~W=!RZBmO(1M03h-n73+M zwGQLP8@iz1K3oc!G9Tpahn=uxtfk&^Z+K}=n(c=*fi(w*V4#;jgR1|M4e92d*k8{M zc!nwQpL}j~Ue(K5b7d^MA@FPXk)hiMc3iSp%VRS5>xZuznRc3>Tx;)T@*ZO>(&^!F z#V@ZXa5rP{**;*mKE!9SCm38Z72I7D=rMF#btggurspbktJ4JU=wR~ef|7DZyTqH6 zJD!KqILkQWi!feAW_2fcsiUk_fMau4PpbF33je^*Ex7;b9{1m4^(v6ei<{iT3j3b6 zJb{+xJs*5Db2#_3`mOD?=*q`8i0{}@Zj3j*5$x0sF{E+KWjQf7Uf^rLiZNllaf`O(n<$T?n-Ccs>~N6$4vct=K1Czm}}D4exsX}yKQMUlkuGEENBxw z;o=g8-G+)=hCyXW^F%}U%;!H)=2U0zF=iBMByFL0!{}hWTB$@ z(nF5D(&_>=gR4@rO2f__7Ws5YZOy&?W8BT84Abb!Km7P?0s}?vt@Cgl5bLSs1IBYT z7N5%yHOuFWojKE5;`mlWu0UxJ-Y`SKlC*D<&q86yeq@@i<|JgiHZ**y8jnm=zg-_( zcTFcW>u)69BIkGiDcN5aX=-JnWo2I$=!Ub_ypk3x!S%elpy~l_iV{r|T9G`8r}~Rj z=X8J^9R*VQSD`FOhttvIT^{31Ljj$=*LT);CZc}fbs_?)bMGs?ejw43`Wb^g#9u){ zYdZZ2r>S&J4=N%As!gTxwne2X;$#O9mf3W1iUN=CY35{cgNNI~%}+mdx?AmL8x5NZ z{4IahXi^q$_o?X>V^C=5cMJHXe$)*S;3ICC$0hA%nGC+pfcOy~Qr~-`eYHMZ?sDJ{ zsjon-G_nIxf1DJ7rMHOo)L}}W@CBC*>@w%z_FoSbf>>2Ehr1|k#*(Ean%AwiI*$tI z9&B|}s#qp~@qN5h$IUr{`S!YpUDgdF*LBh+dw#o#dMJL%;m7Amks$&T;4; z^q*%uG^C);#CO)G7At|DOLhH~3y; zz134rO-J=(Xl-F|C%5@a4vF8ileZ^K0S_z1CXmTb#l^+@!^Bg0qqnW&ILodJ656e;WMS>2M|0e+~tsUr0q zJKSry3KMl^f6rU~jQ&Ui4LTP;1_{ki&slcVErt&fvS*pRsH&HlAs*|ugPB(K{&xzg znXr$r_1tB1`8m1VBfa|7ujewHt{qP$5UmPV6j^rURQjB0GkWFi#nU@%g^(3;taaZv z1Rq(V3sTC&yC^lN(ozcJtvo@!TSC2?OK4eWPp&b3|M-`Wnx(&%dyfWHr;Bq^ngo|s zmoAyKG2W?>`1F^}N#h$)G@w=ulE9x+r_{8}m4q-pVg8tXNd7Vae9WAx{h7&6q3E8ke!Y!))j_|9bzp z-EyllN}W1MI`vr}?cgo6Y(lVaj(|wKByGl1dCGVXTCPbaok?~Xs1rcO|Avl?-y3Jx zsI&j*-gMpJ5LYrrqMIi5Xi zA1|XGd`si#OD*ZcW%XXB_B%y95#kP~e#=0U%Hp`x#UFcRvWL$$hB>}ork95%pM8uqSi>waPQ~eoKgV-vu?Bvj7bOe`Twf=HhL{F zphDkgL0y#G*O+WYR&3)NH!77y7F;e^E_VZ8kOLoEi|%Xb&?@R=Iz9;JS7WxUbpmhY#M+XKOQT zq()dTC@K&RKJblyqZRgr3Ra#|4NYcFJeT>c_s{cNe-dSwyH(6^r{ zGbT=9Oz*^#9&Nnj!)cA*7##3ExUZ{CCoA6qRe`DBZy&T-@T-sMhqEMDyS)D`a z&ndtCMI_EGg>(iG#py|OrE8ipYo+=cCC)YacWAvDj;`GnF!(nYayl?tfw7)7PXhJo{2FaTf@`=|9?d}n%faCNYJ2G(db2cgtCvhcx25=m zlFIVgi5O=$?r~9&Vl;M^UiHRk{4D)*?)UKDZ&^m0i1@wwB7@usYb_n!Xe$bSE=bB4 zX}q!+Zt{*$dYjfUj-upo^#=dfX;EaO4ZtxP7{$OHpSvTQ(ZtTA>>gti-&m`~saXAG zHk~oZPLmHVKaYp=N&VP8VeUd%?_Mg%x(;jMPXUtOwJ9;%n6Drt! znnSDvD%uImV1T{y2B}p-5~R*LO;b!_l}xE`d0hqac9~MF_dGm2kJ86*B_cbE$MVu)e@~y$;sV%%RML@F#_fCnMB^DMN1oF3Q*{ z9p&CQP>v@X%M=^R6kCEjzve_}P$g8iFrhOFQp9WoWpYyt&WAvIy|jVN%DMUScy!P7 zbP)v+Fv1!WDKyM2TKlu)47 z>oYI$gHHRGN!rAD(r7^n|fNu>HD7v%45e{^jgGxz!jy7IiW>BFnG4Z|%GH=wri<4}{ z!hNeIvN)}%?(yzO6Wo64|INrnU_R=Yq3Y39w%&4M3llLii}mi1rom1%&zB6am+-R;T`U?Ty^{ig1 zj3`#(U7ih|>+w=S9n8>0uL+?hOZ5T9aVudO7n|PEQ5SFiQce^?KB_5ugT01BnO1oVjT=nzn!ezH?b&}lvESJO1tn?$!CW*=6IhE8Yhz(Cj=TgZWQ&c z_A+tc=Yd}4HD0C}ujt}VeIk2Dx~0v$%lIj)Uba5_+M>DIP7KrVe?ODU75vbA|Jq7V z@qh*6h3&Vk2kouWSEeu6AdzOIPaZVMWHu+u9aV`9AZrh8l~40|pwDJ4|1ho)rZmspeqI{>d!2ZBndv7! z=^q0QL|s;j$T#|}8(_WjlPR>GcC<(2&*ozXv2Rjl8Jxq6e^(Zn*+0t_OItj13KwI* z*6$JW$9pmfD@e%!GOJ1;=Hc}PV6hpEelc19hrXKf{)pD6q(QZO2~Q)#&foJLq*RlP zn#)Bvd`uC-Jew$`n&I?!ui+z0XM(!dvv3G4tLXMg&NQN+E7-wYM)$Ff`H|2HRmUkF zO~N)#%k1ww&vX8o--Kj;GUe_MHG!3*D=OQBWNeK-*%(@3`_z0vHHo3}RZgo^-q9VC zkmiko(^4YR=b~$72H5upc%b_CMEPzy^cf5fa6+we`L3=oG}S&Jbx*NY=9XfDgm$0T zSL|S%q)hNW8B^>!s^LS&;{|aKlwh-TR);B~iJsW}u*u7_y=!+a{|=*=9Ka8UcCM8` zf4d)Ogra1ob}*Z7!{_wU#^mRvl91wkBrqBJN`AG*h>H;X)HDzoHEk8E|*pT{WGqM~oL_*}OAw3#&%Y;=K*bJlo7HiR`wb%Qu z@oJ%bJ^^@}zkF(lzTr{roZrJL`1htmOUasZ&26>c+k`Ys4d_a+j_PsgwmB9S-#HH<75wN|9K`K8eS^)Fma;LxVd_#g3~pjb)r2X>2?} zhXb}gAfruM<&W}Rn1`<69<&xy=T7Z|graM#%O)ZcHkl}Yaqwn;L`8~3)g@pQ{RGz3x1|q1 zVJ^B%{WrO(Wl7jVMtlQzi|XE`TfJ!J2ee%i$eW>UI5eCW+DHkXlP2}OA0bj7{T@sl zD)FU;tK1+BG7dD!STs}C<7%rXs0&dcnES&(_KbxO8A>Fmttz#z8%L7$-;c=XUHHUL zXI?~twG@vmdVJN#jO;W(_poo>36%`@W!Vc1#TBCz?%I32#RiV%HS#TUs7O@A%34gx z*}D%!j0pJpwCT~f>oa`Hok01C*>8PEwl4nBsrO&q(qmw3HTpNPtj95TpFDWCyPcid zKhs89zpe=hB1XoeuqhC!ogj1Drbip_j8yDy_j&L^!70f9&)3F}Lihx8Go}qr>ZaEb z(}|%~)1g5LNvDodfZSW^Mwrnz^sdA*bLAKX>kF$mSGrNu$%pWd?i6tR~de_nG-y6y0AWQ33U6eB~ zm7NR^@8O*cwZ`6ShUgxeu3s3OuTeJv6U?i{`Jqjqt#oMuRRX0f&FL6$NKrUo7vl)`Z=7!CEtdr z2r?h`p36!nBgB#^RD>f_h(oS2I(v|JI)$?P>Ujf^C>AD_Q5}q!CasS+gN>HRjA<-G zIPHyogL|EHzB_}(mo(YH;%tJw1kxM7!5_MG)8+;mmrT-TO=Fc!d$dtw2KKwYPid`M z1-M_(%SD*r>s(aMlH_MRDriZoqfOFgDm)CwC#%8ky-^h!RCNi~-1^H*g+I`P<)e-4gl^)KNgOirRAJiE$b;~ukYS8I+Pwjxc2BM1=p9uVcS9xw* zD9!pjpi0zy^>1i^r|7)u2_b&z?nBoEf)tlKnngJCHhmiWzhkz{!l#NT+MbYxp;|@C&K3AR07;|yoiv2HrPFJ{~b7n!{o*AXwd?oz7 zUlW^4Kv?y3$Y=yXt!QTU4P}si9g|Pc={3l{`k1;~h!QeH?*DkD;=FRxl8R^VBC?Vm z<_Pgs1k``WZoWm#h>*5Dq4lgXws2YL;ocxy8vG)-K}wTDCD%`9{+6`vy2f3+Pf#~} zr&yk1*)57BDBgNflr$(Oi8SGsx-hq@$ccZYE;40miA`&2wN}Lint>#M9 zKOrXZUCK`DIwI>Zef@1AyRVCCX7)Ncc2qdB*5E4GJ*|CK0@-?-LH{EegIq4mseQIQ zqBbR`HH0x|CXsPFi*ld{zBndzLNZA8KL-al(&wy-U4C|+TMzQc=8tgK<8R5XS(y2R z!6>SX+nAx64f;gDhlW@}3Qf>*q0r%68yLqJ^$%MY{#6*X>WIu^II!sC>c0Z*ai*{# zt84F4LFSRxMcuL?bL}RwBL4FlDjV9MIN*Vz3ZI9e@}%$li-G8xeI1$H&@}XFnB40xoZxnk;KdSP0fypO68LR0__ABXE&JYVte#caMoT$7y>r_}SL z6Lu5?b-pRHyN>Tiu0r^Y$rrN+bE5~DW3|@C%y1K`V$>HjGZTUxje|?8V1fFGOtz`$f6#7Q z70=f>V`^>4#uUY@)wP*nk;YKo=v!sS-K(0y>;(n(DHjz%%mol6%XXI*10fKr? zPi(eV2Q{)0eP}lsVNwFsiudZ#P{0eXt;DJvtLY08hXy{Rt{=(zMZjldNbcLjc z^qkwRF^a%<|JUNByI{;~9<7ZZ7&m*IYk-xU!>5GF+bkJ8{cJsgd`~_ ziPX~+Fs`vWf8aumIvvDr7?B&HYjROqSB&kSCy_sEzhzRgbN`I>B;y=vPosIIZvl$Z zm%Eivg4D=jAXpINQ2h!;WyVGk)q?3=?Ri7td81-7*V{JKfl*#Dxf|KhUvs7f>X-T- zr?mQdH|9>u)n45&;HC&pY1G2^51BD#1ZIZSAimm={do*r^&-_LafICsUFpq-r1I$Ho)jLHx`QI)2N%-B~ngM;#Dln>>>7`7Ss z`5@lI>udS}xxt+Be>Fl(G4FO-i&979pK^Zxne+KESLB=^dCdcWixE!)!-&3G%SpBEPI&(#Lme>O?ncMsUcvjcjE+J9P6??IYV%VE22#+Sl{xto|Z-?j_TIh|oJx00n|H`W9 zPXItxoTu-LAU{z3GWOEDswdLDg5?ZAGk&ie+yh06a8Fb9Ks@dtf`Xp^GrO}B#BZP< z9@+OZL!)viICb#`-Yd2~Z9c53mi~twY0)NltjOVjG~Q?Xo)1cR;|DG3p5=TNA-eSZ zf$Gs9@J%&vTL|SWj2B+|HHP*{ zm9v*?8!qrIU1CxmbF!7DvXhSfD9cKSdeOj}I?r2!Q8K2QJ5z2*P+|yi(lQLq{O%l_ zwwm~#-Jb1Yg|N;}FO|9$RGigIY4wk(+btmSHYxV$C?`~Q$+3fp=q?+|>UM)ixgZ5H zkIYk_HY4}yM&(00Tnd&T^nmdy1$@huCXh#&Wk;MF8afWIw{ybHyw2QKxW4eL8+(7T zgUc=8c|bwvw_Z1|QahI2;tybdzOg-FED{&8Q{@?bDXduMmI{z2R zQ0w)lx(<1O!w+l?qrynIH2-u{0AvdkZj(>#ua`_x|BR>Mp22*bFoNEBUBTWocjF`7 zi+q4fP;z&_uuL-xIjT7YL&yVonpStuvO!Lhk!-@q8G&{L8;Z&dbH$ia$%RovlF6@n zk6&Gcqz;SvoR%gj6hLujk)GE*u*n4#Q8V^~ppI(zUOYv`<(tyW6 zVKdtA@~(HDy$dJKer=hlkb)A-lyB?!jedgsO` zXLmMj3&Pxc6dKaLb<|#^nf@T0lu@(Jg83B3sceVK{1F3I1W}YgmyyCuXRN9|=Y>7{t?7qA z$-5D*2I}L#X~2&~!Y!{bdU_C{e+^OKWlYg5t6XSjh?}6Jgm0x1`(Uly=3x=of;(7V z&;&ndWa|SP`@Wzl7F}u*PsIPyJi*9%9e@{-Z+7UIOZgn%cE`$2U9oI3;57YD&D}Zq z{}lmeo}>5mM0RMA+*B@peB(F&w9hvBdbFUXiNmLr zr~qZfuN{qII$_2ujz@x|eN;5ydQsY(n}u6bnBT4fLBh&S{e(EB?Kh=sT%l^@4S&;YTmjW+S3SVpiD11u)T^>c9;3_SJ2KyN^b3aUO`gSfG ztg;~82y@&xTregk3sq&k=BL7?aV&Ue(oTY3)+0M$GdK`0-kJskL$*)#JdNUq-kAWj zO)Fc{82I58!3GsM1&+QQ3mI|8dFv~5T|CS_ z`NpgLutjVOC)LWNvbXg4dB7{yKt4X+Tbu>{9M3KBKTw|f%DvJ81tKl1ULubebhLa z(8PIV8C}*3=Rff!0y%`8hwH-(M@J?69rosvC~PAQM4ISbWzzm)Z-`VP!uPfUpLmhI z-4(j2EQ|56ue9E-qhGPdo_sllI(GWu{P8L=O}>sTBsF5B6rs3Wfv-r+3!^Y!E3%Bu z7;rr(Y=W85-<3=`98#jDGBpG1Y(_0zJYx-%8z&cHD^57(8J9I8M4$I=u4Lf`{dYYIeb9n&#*Ma6_7G#dQBx;{Ho4zcGX+XHNC6-^Hq+7)X$Jlu{63wByw^HmF74&bchto zHD2pKbX*9~dQ7brqt+}N0wjtiVm2AW^__?b9x8t;_3=$_u>V)Y3^${vtNOUjAF%&7 zz$HHdj*)|BoLs%Lo>NeJy z%OG6j6mGr0R~V8W9cA4j9g*`jM=-*g*6Vd&G~X;wxGuOrm6!ZcB7Fk%Qy_ENq?fIT z0R4$vZa{fpu;JT$p~M_mDZalkN?r3xwy*56@NBvr%RsoJ>$wqB^j6w zXy|rAD+4x?@1l&}VI*TnYm9Sno8k`koM|)P%BG%t3llV6C2sK%*~REL3|i_=#^Aus za=RHFPCY_CZh&{s$DsQmKd@N~KYK&0Wkh%hTQl*k$C}ji5r0c6W4qO9>8SjNAG9as z?*WxxNPQ;Ci)wa`(>i#yWWK!Bgcj%LYYGsN)0z?hNR%|KALtzlnl<@~$*~An{u*w_ zMCJcLAw%Q=L@I`&MuE1k+D$qAcE@LRzyUi&bt3;Y2%(_sl`QB%n>LQyN7wqgl_U1W zYszLx!qxO?R?OzLUP8=#w}?9>5jf*ekwX{`QG}Wd{j^T?MxF$Qy;xh2D3eRH?&_Ok zuiT>yRiHontZ)Q^Uffc>C5OrH4*MufUTNm@<0W7^!iPqk-Hg;Ll5N&7{1&*tFdX~5 z{O)TY(y6LNl$HEuBVeba0V0`^#V+V>r1Ad$m?V9i1w?r6Zq*W3B|>Qidf zn5Hlivh2ZJ=SV5Lr487l|uix`^fn}EJiF4UBR^i@0!_<)!j zywaFWBa$af?H6CQaWCgIRVR#AVv}!oQs#cm5qY4MCTf-gs8s&J=^Hvc6q(U%BtI`^ z#5gZGKw@8@8;&s4TIKrm9do~yt>Y$3{9_|X$qm+Pwes^7mo>icy*hTcheH!Xu9hRj zJxCZv=sSm~#uPXz#5Yx59%YK3pY0tJgKhqXEaubY`qily$Dp%5iU!xtb`3S!vlcfL zog+r#peu($gD0W*0V?{=jDXMO=1U~8-}P>UZzKoBGeKP(B`Boi@JnACYD{BKgOU6> zecv+ZQX0KfVd=55hiRoqnftPu#7d4WV0_dIDY=9A`5{Pl_-L&1!6xC$$E8JWyG}nB z%#79fR3-A`$y3J4%38n2VpTQu`g07#csruEc%s#s@KTL@W6B%s+7+J5O73aPHct5y z%<&ELd7RV7UY9uOvf|->)dYXZ_M*3l%)H6NS%G>HL}agYpI%3Kct9bmaJT~BdQoH< zQFe3?h5D2|-*U>mQWY-F5@LPK#q??Z@)={`iPC#)j6X)`p! z%kD+<7MzlDn)qyDhA>Dq);Kl7-GL1rpXckk5L3+IGR0kpnJZMDF!gbb2%N}a0ECia zuKM(X0u@O!&mc^TqDs-8kL|8L{gTu>VulegAPtR|s4pcd-lE#!CXjTeS4RhZ---_u z0(#9NGg637d2f%ByE6L$3Ve7hx_d(`>SML6wFWt|)K2}_`;!0o(ZQPn=@nHOnYH1w z?w?R-+GjWVk27uG-PGVmreoNtcU}l$j`X`?J}+*zP0sd&t#7(DxO9f)Umc-fI8jDa_}7&EAfeW~J%+8*d$$ zXDq_k913R4Jr@K}c)Ck8cz8Pu8;nObbcIi`w|mMGgty6p7BPf4$|p=93?Y%cMvLKv zeG8NS0r)DlHFHcLOGAh7+7R*ffKUbQv(IdhF0*;nJirrgo@vl6b&*x3?aj=Tr0C9I z)K&Hlb}_C>L##G?V}8^Et;(H`Tf`p5d^8kV8NeNU4C{xzz|WbJr@LcD0)nF!yPN#i z^IpnuRLWFK7OSM6TJNp=Cxw(qQrFh|{i;6IwH2Ld5ptCST<##V*=bxn+4y$f+1uT9 z;C~r%A*quH;8ZQXoC?pQJ&a)sFf_mY-F!i)cf+}d>$)jc`!;P}J5U%bm-9g_g!sRz0lElVkk|bc;I<12*!Gdbu+FbT=y9KIoFtqOL`yeI$L!2I&=v zb|Mz^1}<_vo9Ixm)y}EzShiWitO1j#ucyC4M&kmcFEPx+p5jH^ReLLi{WFO?+Vy0n zv^(uh5@tEXO{tJb5Y&Y(bF>H(!Xzotno=_pxq3#Ik27D8GKgw+;!!W|x%#_j`z@%$ zDlZ-p>jZo(>ewL1eJxdttNbnay;)S@hZn$6jY9ra>jUbr%Z7}_TLOCY*72k}FL^Xx z3hG_X#{E8tWJFr-P;VFsAfA6S_bhShs*+k(!8`tANFIf4``y{>irtV$z35zE$YX`^ zi8tWoTUbqLvbtk)uoV+vyF=?>1AL z&^yF#z9z4i<_OlwA*s)osO>_k%}?oTWsnfSWJm9AF%w6~0X)|F$+r_kI{aSnOm~^j zOPL^|zqSa|%nm*yBmX@lb3ZR0yW<2*Ed`g!JpzBZp?5U-*y~3Jp)hTtCfehhRtrE& zZcoIn7@$eGaZYL8u%yy4*fk0C`i^PI1djDR9A8<{tv^~2I{i$4Xj3emi)XN`Rz<{;OwlY! zyP;?|4*N=hM2mB5uxO8 zU96PT-wXr;Oqf_??uV9rzb;p0hoCY1PvdA^ z3b@15>nS4{T$X%pB?p*$1-SGV-tfH&&gK;Y%y91S0)m6bwIuPn!&Nf{&56PoKVg1C z5e-DZD6CYOl<+Gcz*LwT_*N8S#gmAwrU0gi#0p7+j5dDd9fO?}0j3v)?q6Udz@7c9 zu~q$8bcHky1M;{HYw~YZH_|ftP}kz4_F`a;`e0%U8M=Im(z-NPw#y|M;+4f`=Z<)2 zH9g&-L@S(_68AbVoX^0h)}7PQ+l*<|p>b5E4i}FpGBOuXKj@Ku30}HwWIFW{^qj;} zYIYeMPAsVh$g%-HU6{b@=yf+f^{!u(E#JHafjO@@nH~6}3wJ04dbn;Fb=}VdcBIPp z1C`LV)KSToCsz|?&+99-$Wg-=7^}v!ki|7B!!K2)7t#BTTZr>sC9K9Nz05!`YoGjF zu2TFbYYBx{i9=rlYSAntb=2Vx^k*+x9{Jf$Y|5Y9GfU_ z)U=1|M!6*699iA#dXL>{^^dKWVF4nt!^_&M)? z3pru4ldxJ0!S;OCRKIS={#v*Zi#&ypO-C;-sPNDY{NxHq z{1(gB)o#UyM6h~uNyL1ESSkR-9b_NAd9|=33`}(em#GWr-83CZ^sh2170`G-U&D2D z%MTh3KOCZaB!BHnRND-2_v0LLG1aU6qCGV1<$^f)VuxKh|D4A-^q7B7`i#0&`d-+@ z`P`2pkW~oB`kre!;^Q<44{w`u-sSq{nbBuRt0MO_ZweNDlQIF;4$fw0n98BHIPc4) zU2pjl(P1bGs~$jyF>yrXDAz;eKE;(_?pVlCjusQK?9MxWz|>Je6>T*95f|Ubj@z@Z z!xm?#mFMEvES1>%{mj3isuC$`glPL^gI1mFG|a~JS0ZX=u3sCVNQ8@o=#NtnM zM%R%8Ka$a?2vVZJe{Csy{`>FkhZ;Y%#^o*tWZniZ-nhJrONX)Zay^@R<8(g%8Q$4w z@7h;&PI55TM!)Pe7q+`!71wg$CsP$l-q&jvxqn=xd)j{Z^LQ}#@*#YCI=|{y{cSrQ zV$KFXCU=uKOMAI+jWXd$vdp#*mwMGbvfX7TWw>m8Kl(ndXPBR5?|943D^Y+cP z(RcCAg`dCPYTq8L$L$aPzQE5RIjq3 zdU^e4{hLha!alNkR^6Q}$7_y+u<3;eI?bM+JCU-M4<#AP;l&KFdjB{V zI+~b^_FWFeo-Mz|wH(Wr&4vc|uk7vMhlr9OW&|7ti8a^wcNak7G;3MCW$M`H>U5O} z;IQ5Rf|g}Ys29a3`c@No&!NN$`OJvm)HqWMdg^4yb`*ZS;Xt3RfzEMWlZkEs%M}p! zZb5^Oa%}Fo`wK&r_7n7Q4Pv7BiVVo1d`noVddEz zigl|L@Jm;@Px2kNTp~ME#rc+13L~)Uu7+W_RqF;VFItIRQ9AP`}onufxLHeLQU%5@sRpOtokLtY9l{9=shY?YNL3I<*+}J_IODkdTjV5_V>o+Z@Sl2mstNbS}HVS|2rl+ki15Gs3eZ1HoXqxF9 z0c3WNe8aI4(rTL(Mdw9XzvMcfe!*8+T;EZ1q!_?)4%}#O23sgr#8p|pG5-Bel=!_M z`OscvW%onub1M_+m=P>Ibl+rrE{E$?b|dvf{iK<=i7|k#2I3%Lnt;0f9PcKD`cudqhASav(m_?8I;H*|AMinlDTU z&b5N`&T9?@pzFvsAb{lL}Iv<$}>>I-LFfjDVRsDD6hCC>?Q; zB;k=gq>_R2PxN$X-RUH?GI9OZQOfFckLG-%Af+exMvL%rG{_#`%?9MpjbHdB#wEqj z;pVIwwJuO~7JXu)N@H_RV8?yF7Pz;8{_$lq=37Z>OyE?t8b-2#y;4O9nGa_@Qqdwc zB@DDtp8Y?X&N3{j?|b_&lypfCpn!De&>$@--6aje0D~aiNK1E%NTYxZJuuQpN_P+4 zUC;c!&-H&b*LB{_K6|fyug|^KI>igC#%jzb;^ALfGc<$!wwQeM)g%43xKh7n9p6hpG7TlQTjN%yRYWW>N@yPx0{%| zZ>HrlmH(~eqi={aFr5@-+DCLrIO7c0GsF4)a5z2X`;i$db^u8gE_3&9aB_d~Kpj^; z`hD_19ZwdZZ(;z>;s%i+tA;`tS9&_DhU(n5xMAmJ#8>Svh;omkaBnh} zv*LARUuD$%G-2p+&7-zi(5+iwgdOJM1R5}zwkj<86|XMSU|)AAuY}W~YFdFJao~JD zukiAV2PnC-zpOD5Q-bI)uA`ao^p}=I|A`(iJKtuT!_NK&;d}Kx4VgV}vK;-Es5@wq z9@>e0I*7oR(YrCTn>kJw&0xXf#XUyvTt#MCJCEo!pPOJp$NEs@Rv8UlSTlOd5XiE~ z!2+xIAX(%ngSE5c9qAD>Y>sj;cmMRqiNh_H`gIUs$Nbpag-efi_rhs4Tg1}rbOy^M zNQKfiKL`DO$QyRGmsi&jNWtl*7QE{bb`*OT5hjKDJA!GC6q#}D@`p-MB}_5x>8zTP zGQ&Fj_+(l55?}n{>ZZ7Oanj1LIxndQYqw`#^kZC|qag5>rIfgbuX5qRPeRxzMR`$| z<-&P=62Co;THc0vm3(B{tgoG`b?W)D7nxY?w@me~%9)PW1wq|N=JN1oQusFe`K!g2 z8%(cJV(6x(p}-6&Rk}^kO>u*8W{L~C>o@IBIA0S#i%O^lhIDO_^45ih`vW8@nY&uq z@s_97PO7rlSIud$k1JSx^c7%Grf6Hj_S?S7hr`JXrT+oc?%<7f5u5bRZ}WLPYT=Jt z7O=h8=G(v6yiWn4$Qo~KNhA=v*4%qC;jd2F^~bC4A>EV;c-xsBN=M*o59L9ufse7H z{CHmD<%bTOkgNTHJ*iN#=7xuarSNJAqSnaitVv`~i7j4C*9Ldjnn!;)Q;^0oQn_KV zp!(cf=ag2quP|yk8vE?m3)Q_Zsz;FF2~O4)JOT;(E&bLGM*=k4-TXvOgR=CzLrgx2 z&%SB8)o^H~t+DM4_PeD$;p{|PCiCuYwGIuALJydd_c2iKg6)-48VZn^hba5Z$al3f zko@k64y%FJ2R({*_}~5eAJ}Q6tUEFW$DZCc(Dl_L^=%;FfM*Hy+}XSPp{do<-xF{# z<28n?<6Tc3xn+g~+Jj76yVsU!F|YI4z=t`2Ybn0%tJ}^g(=&i_+&5|y7F6A6<~~eQbXnM0Po-Bv%R1JzXCVAoNzqh-(AA@ zefPr-?a6kdcn=r(=XuDfBjBgCr_L4JnU&+nofMYQyE}GV@EOkm?yXVMwYed>f7Cux zWJ{D+@8I$0k4%!>8QpI(VCGDbrMl=QSuaMkv4L;ma^H|>y@_LFsgZcKJ|bBvdXl=; zt&@-Ceaoq3>uJf|F=xM0Z#NKOrnkA2^g^BitfvUOi?KG|IXmvOGi3^Kk0xp#ia?mW zk);T^ttWxp(u#%nLNE4hUg3bwVeW!a%k`qPk|q;ltwNG&{1+cp!`%JE?tZ6G`}P;n zc$bFsH;B`IU)rfD!gAVG!&}>UG>^{o&Rt zY&sd)IHUZS!)bS3HWnMbpB}=l8dcALmT)FGt7_YjTgneoos>Cc?4)o5g=~{33vE~+r+u1(xfw;Lt8J&R`Do^ZS5zzYkI7{t!o4Gis6#0lUL0{488bg_a-bW zhl1N*<0mL$=c-$4{RL=o`TH2lgPR6dX9dpVHdaT?FFTsnrd1&{9ZB?Z6We7M3fK2f zPqEjS%YVDdJDD~%3pU)(cuaF2Jjpd4H(c-M@@Ypm{&6h2ZH9J)b=qh>J0&}=WH&Cw zEQoz1bA;e5nIrq>3~{hfeH^JJwx~|@?Z!Ry>_RGri;G-&)Wb?RX%l|ofv^!n6RVs< zA@w!{oC+d&d^5}E9p|uY3e0ES%aT!o<0R8+s*>Z?55%|qNiR(O(TB-~-0CIr0(yUI z#Vy+cE~;KmlwZ~CP<4b&X_lA0;pIs$_G?BltBl~SB9qe$KB5Tu zjDp++s2ITeQp^_jvN(+<3x~la-DCm*qqQT8U5(mL*G;uX9bY{NMIn{U_~g~-(_+L` zmv3kHFzSR(EZx*1N<_&<^yzY|twDr~9<$fI#aK0weOOmB-wO^Z+Vk)3CryTHS1x`Y zKF^*!N#TS&i%^v%2G4AdTiOTbV_-S< zakgWR#1x3SsK*Yu9~@E{d~jiy0Y=L(0Ww$tX8Uwi{L)zj=L~#z=>nDW18+fqvk_h| z2@cHnJD$JR&dOHgWLPdCie@weDAZIfBBi(Y%mi{Tho-l;Vg)>W8+JDVa62!UjBJ$ER%rSKz?n zw&iBk<2J1@I$^czGReWpuogaup|Ki&x=7u>9(9BN{C#umlgUUg{l9Ic*0_I+@U^~T z84PpqShE@?>3aogE>BzPVLk0k z=N{e}94mbsOZ`*Jaj@lhDeSvyxK0jARJuZ|XWw#F{YXaOUCi~8o-|auAYC>`c;L3{ z>^`^lv1-a)=DYV%d|0IyzXaEZ@fAVLFjS$$9<6;t|KDyBBOQWt1?^%O%ih1-Tii}- zDjVC6-nFxAwqS}aYaA@q`b4ezcNoa{17UIl;$vtESni~YJ^_5p^QekFX5tWLV z6~Za$s!15{vhXv+2wgALphESl??*!oL~-e+F2O=i==l^omjO@F-27fA?*d;i%#cUJ zM95I@huD*>)`GkZcLpuZS>=!UiCgq>#_NsMW=1casg&rz+eIZWX-D75aR=x|Nr{cM ziVTgl8SmhMK95~)hx&Dv-@Cu= z#2Wcc^*gBQF6;JMdeO~sLp+!3=ZTP}T+onwt`lACJrnK7(IAH|H+ya&_QyP{ zxA651dntX%n<)d*&q_=HWN0 zFpa6qFUcFvDB~`CNo{?fj|sT6oJZafIzM090nSO-hPSLU2Nie?NU$x-*Sodhp$bWO zu?%#d^f+_(9H9HfvO+yw zTE{XQSVZlQ44f&~CG$&)Iw{{jegc;3gf9E2-nA7T^*@~!*}>0k5(LkmKXX2vpP@hG zz#gtuZmI&To`jwYgTm;?X0A1I%MY7{dVdwrH68Y&H=5v7e8H;CMWc7$v;}BwF+kZB zzy`$8Yxv!{-xelUwe3Qnp48hFrbL;O6J}TjaIO5vFNP0W}iPhzj?_*_3XICP{ zt=@lvs8kVF=h-!X)LcJ)ttNIyj%#H)qICTZ6|XXUtd_XMGoJFWQlUX?`itzpX8m`u zFbN+sp!OiZNQVTmy+u}dP`jESoxKGxN+62a z65;(5+FFz2`^3nDDR5W0h+zio;Z3G^ z6~+MjOj99ksIx72oIz$3y%Y~6@7scXS9Knm1w8)bu$`3Uxh-%B7JcVg{>CVVcVY(ngO-N*lT5HRwp z$MWQmo;FgQrLDh@_3ZFNZ``TZ(|eb>`nE+w|E11D52;)aRMVcfP*wQ`30ns0P4w-K zci8xl3PtL0F|;#qp?$En9f2ppl@<+hUF65-0}3j-W;8qKUv0glm)D`EYiqn-nr>Bm zGTGe!Pkt&g27l;d&NDo(59?(K=au@abj+YFPBC`W=GlmH=o~KlH4)txR&McCZbimv z*BbIM^`?u?W9LtKkS%^dxSYsQG7M^Rknttb&!XeScYxGzglT51wk4ZJWGNGIdNRoH zojpuj7~}V#N}&@=cX>97!IBRsr>twaSNhQRRCozy^?6++pjFZ=hH}M^BgiG_bi~+C zXGBTgtYV=iCQO|VV`Lt=k2NDJeI*tfKdjZzqPY71i)84RG|9_yj)R1TDgxpt4lN(JC!00@QT=rOp8tY>xcR`wY9dg zX5P1ii{FcZv$6e=tk%$X3gGl;nY0vgLADfY7LM6ny#o>=C5>P@Efj>S0`=k`1geL= zZFKUZer;;AyYg>XnJc-(C9(nI{sUf{)XKl-t|Qy9zP(?XS9F$PcWC!jw#SEPLCfG( z`9~dk(DKK-U4_7g{w5^`qG%X$qG7=9x)PqI4eWx6uonYx!MRrAj6ry(_m+B_#i5YY zn@+or8avW4HC0@t6|1+4K(#p$a6t#~==2?U3kAoUz7!!rh`&KByum>YXd((|z2)8V zv|?8dQJ^DKeb33MFkVNd8P)DjlB>6|RzZuE=nKg85?FQ7kUV^N)ZE8<`Yn2x)8ghD z@EI~n;~C@tx+w|GC!e#3+e7D3xfK^mkxi23PyHav)*D};%^ z2)zTLKk;QD3>@>1JDbkb+p>lB{4z7!u*#u`CT_y~yDWrTW_-wW&Z;DsMxu84oPK4Y z(;dJ4GY4Yni@xujd`3$2zp*uE?w*HOaijTyjb>&NdDf9J1o=fMpBSApP(W`v_hMmg3SN zS@cKTx0KV-R)OPp_4$oUwh#|GYcGi-dqR+AT3c58X5 zNR6<*I3($Ys=k=ic&*mz!@I=-&!xvQv3eP&Floh|1yCA5pG6WYBLVDGX7b;59SgUu z3qoi?eor*0&6n|8S$E&X^Y^vBx6hS)@tl9Dv-ac7i~#vd)J6|H*3SNBldk?sAgs)FtxRyZ0$0%A-2WcCYotLKjbV7s7~Bfu|RyT4!J z33{%ILF7i~64s9`-X!jkd1uvJ8}qAWvk+$ExP?nfy*ZA}Oc*|$nqYYJ^Smjnn z(@T;~w0ono=rCo|Wh7@j{>!o1Nq|pnPz{<&6=05V03dZCS$PlO4a5ZxRrlW|F;#*d9HJM zwT<1o!u6LA;mUegqkQoDpCY^{6ZIV*2Hljrn4VN2FgCD<@`9reR!N7JXtBAtW6){G zc_*|nR!gTD8|*J5PK=hVf?V=0ttDOLlK1|wqSg@N6Pu)t2s(`I+PN>LDs1Ypt}{Zp z4xy))@@!+?@d&(fzO*L<26Dj*&9uk!o&ySO%kX|L0YGO8VDgyV9=8i-_EMXTR6*mB zK|Bz`Zab{2Qi+|1k;y)#E2={Hbg|{Sk$Ziwx;_pV`J{198Z1Wh8 zxnU-~$)z$!CQ3Ox9$1E*f% zIWT|tDq|#&M68k*r7DgcCLa>Sa%^y4niV5^7*`kxc@Hw8h}XgA11)+7`Nom}X2M7pR zMc!`!F0;)G)>AfHuLY~ExAK&bBLz77z~?USia_6Nq=!(Lz(HV9@Xf88CUwA zw_*}6L9TOA0#X(1#a7~c2amb=&?0_(1BGn={-E%X;X9P)`LAboRz6;EFdG`Q&{5Zj$8*|8z&6*(e|CxOT($us<7gUB~@i znk)QN)|I8Xw@EUKi)2Q_!S#Zq34@%*S21d{9QBs9gP|p2Gzr-*ASX|&>)2eKm|WsP z%+h}AyT2-r;dNj1@HRuH^raNA^_Jno;ptDG!z9*} z!^33dzV6$V?S64aVyG{pjD91%(alDfBq8qDJvw3g`7EylJR}gC{&469)R7DId@Yt9 z{gxUP^2kmV%AjSz__mMwwb)GZG6e8x?S%SH4E19FhPR4Ei@v4?9{~BdTH;rNB1waR zSYootZC)w5{zwj|WS%6)9ya;I>qgf7D~)i$?)8C*Pu=k*tc3$Rq5CE1-7PPNy%AT` z(SnO)RpuwQqx4}qxNMs%~peY8J!@$FpdV-zQ*ss#9oYfIr~X7-0INq;lr|F z+Yv@l9GK(H`JIM#BWA^0-~y*}XbP+}Ihf6y8gSZV~GUb@m8rMKvB&CId& z58&G|Tr%?xGL|w4tonLClV6NT`CVLI7-J7JlAx_gX4NYFSva^ZoAxG@T@|3GfjRXJ zW|jspAj3U!5|$7G`ZyT{5<^)^EV_DwL(vLC@e7iH%@;{+%eBhbDg&XTwSjMN(cYa! z1zS|e^U5R=ws@|Og~_X~`XfmQ>*|DKREHj5NSL@vT)yt`Wp_SL zc!^>6KhAx(bEvuh-OpN2c-3+3=)akj)7%d2yWh=%?)};%xSr#9VgbirHPPM_5LA3Y zk)$3;HUz1Xu5zja^s)gJarg$JG)FiDi)p6N3Mkm1Y~t+Sw{9JHL|Hm4FYL*fj_Xe7 zZpG)-@#z$Jt#S=!0RO&KZX4FG3NHu?#JK(Nij8&sAC?d{pU~Bon{g@vAW6II zi|x`myyuZdd{-8^tVZ|_bM=hZnob(UVe3h%=^bB;o1130}h_%8+cu? z9Ne@sJnHIAU||Y|yJ{3#dq6X#JT1q!hPN_EEFi>yn0aAk$XHxz!4VwDMIUL8fmEl# zYZy`&fmG9{;|dM=%E3qYfD4yZtf|%{cf{+jq$1p*pDQWTKUy1lEAIwcEVxn~U=(4f z91Q}YPIldMH>87?6A$(mwdp}tHA21wJ^4~K41MUcu_=~3>LKlMUoh;cXh!(C zf1K$;*|pbdHoNo&!dltYrrL;BD{oJTrii|tua?^-EIV$C=j!%p^3Xd*C`5fNRz3wvdjM9)0c^BG){+uO-j^YNlOnI2euUpg^rb=*4u`so2! z&J)>{KHhnTEFlVb&z%0_Whul6PXFzz4}`IrRCF4lYd_@?JHHBpB4bAsBp{qy8|bLM zTAR+8dwLE*>nDOU)}*2=xA;pBu>T3$Mf^?OadP+198TqTVRHEzGkml? zS>RN=Zlin*13kJQdq#!2O|bVttwZx3$Ff5mN;vU;bgaAOosTl!hr^6Zde+Wve8;J! zNS}ibYs8w|rN?yk9jGqtJ4`?Qg`enq0GE;x1MrQ?>$G2%JX?2ZIDTx5N>qgMBStSsPQI82PQKr8MLpSci|_(O|RcMDS;!Ik}~ zP&}W1Mkh}EW3}pGN^IdJuLuJ6zpqaAq@3tHQ&wSCwUm9pO4`VWebGmd%wV7l7q zcs0ZEY{RR0JL^N5a#d@Ht>WA_yyIkjBm z40enqnm)9i{iJMFmghsAdj`=`pel?J$ih(hrf;5&@8>wpJ2yCC#gzurXAdsr#hC79 zoy95Z)(4?p6=Q>6js};2sC8BFSbzPf7EE%V7yO~K#>%)p!BDecG>9FI*@Tk7&k&fI zIg`8fmgqfMpdOBl-q}bwI5P!#8;Tjpi2Ts#{>n@&H;<0DXU+Q~URGMA@2GtvfYM^! zG>v;Km4@gu${b4Rr4$vMB^QeY-i8;w3U!O_oClioaQ%} z&CY_lkV9bg+tO#sv8mk?r-|{}Br7eh(0UNDnRDMpfAXo%e%7A^_*CM-!3$ov^3y`V@rNdBewBw!bX_H0g%_>?yZmun^$R16`7;%7cCyzTEzY zy{OQjdTjbSGO(1$_j$yH;$RGWOvGcXH5zw=oNm|z10tUNF^cla?3<)ArnviN&+wr2 zua;R^c^UI$Z0Gl4F0!Rv`hTLTzvB9#;$DTy&u$4=rfEi~OJQ6UJJwMsjI*hlIPzCP z26I(%1YC1KAKz<@XutlUEvuzLy@^^FbV`ZhdtxXH^xG5ldM{&8YN?eH`dXbovLTvs zj0skv7E-@Ey;0yL99#QK>Ef3~%?9mXwGT@hSoedjH;d-n5tX@E-l8y8@n? zErHACncxebbLu%;LgP&e`TvokG%{59QR&LQzl`A6xeU;kEjF-JR4 z1P%g&pk?~!SbP2L5%%*dzCARR7883eOvsGa@;{8(@(sIW< z2%Ot=ykMq8zqw+dVr&jB58D>dY9eFqV$cj$rz6CwmIuWc)@7Vn@~pwlsloF$5p6^x z{EnGSNTxPg?ZKD3Rm_`IOO-JK!~mzK=(bsqwON5#c(EM>qv(E=3$S^U-wlL{{d#Mj z6&eCAbWUE=tG9A%zMRd{q~WivVmVo8r@mj967hCC3hFToJU8NxoRWRVKsGG3>B_Iu zZj58EP7Q3d2{ob1ZSdHQ_(-6@jqtruE}X2%1$h>qt2d8^>L|Q>Ta+rUqdFR@nuh%j zNiO`o%K0h3I!~;QzgwF=Su0l#bv%CwGzXC%SEY8i-pRQ?G|^1;yCwclgt|!pd@iR3 z=%q8S^=AU25rM4KcS;+D1vzn7_OqaluVJLIP>`&+CwBt(I(iTE@~fPi1t-e;K9bkf zBeriL+@!EN(|!js`a8XHgt_V;h3opa5J?u9QC$Cvwy!ZAUW;Fa>&9EzFamOn5a(fS zZX8&sR86Jb4S9s;8mOGD;dKY(@Lwi4&K)k9E*RRg%0awY6J)6`g`0_ln^C6U(p5#6 zDtZu9c@P{Zm@4*2fMO%S=`Yqe$>8tVv7IQ#hDyQV14eWNe$S%#UVyV;%0dCh&+F@1 zcVYpYnh_Sb#1dePD%<4h;W#-O`P9kA_4DLG=Cb?~O=m_6O2v`|xk9)9U4@aRb$$iph z6t7?t$Se^ z2NL4m-CGw1u~O$H_LY1H#F?k?cq?O(8nY40O@J^%T69(0MLR|e+`jn~h4&azcfv%a z#cre&0Xd+CxExVl5)nEr%3v1uSq+;^e-ITcMXIVmEEW@`atnbmqFo(lD8mEppg(f$JD;{*6jq+gln?A(1^<#M7oc+dCF7Vy zcKB$_*7gonZJ`A0zva``>7ZD!n|8S9yd|X|_5U3`8Fc^7%7l9a>Ref*A8BEyG-e)Q zU*UN=GbbIdzKYuik3_iB zB!1eB)1l~Ui$xas=txtH(JC+y@oD5iy{w4NG$ty|nK0&L!q`>N^cceGbuqEHFb~#b zyi--Icv8@}SaC&fzgDu`n?=bzKG5FrHkpsK%S7dW3B<>}N;j!0OVoW@1<=JipH**5 zAKbk6hD*9#=>3)2uObPn*n*c5byt4vQm>_E;TRZ@{|yA`iGqLpS}RQ4d;kR30BMo+ zXoS*)SYqyb1VZm!mFGD@f>~gPU#k_P5oMp5?{YlGYLj5bl!;elq^Cy$d;y2^%}r)0 zBHU+148&jLS1TD$#(zDVO$HLu+*$OLJQjf4k+L z=t)g&Aa%`>H-y&syfbf*{-M2=8SRRi?uQfiVj~cmCIL-l@cE|={YUjmJpKJ1u$QXR zE>wG`tK3@t)llx}xBbO$)3m7`1i68tsh+D^BLpp{U~s{{1PUa|iP<3n%`640k{e6d zi~xvVzb1JSaM9_*q0wlLbykI#QSa*;TF*6$AN4OgK5e|eP?R!a0_+f@Ry2m5p9W;* zMf#b!Uv6I!@K}A;m*BkE{AwVCw67z6gMvbGK|5@3X$0;43V~D{ z`kpvO!*J`1*$Ccaa(F6FM6=8`R_jas=9j-2<}wB~6ulGJsSbK<7$_NgtFcVQMH3)f z4AkrBn-)avZ>9V%#f>04$9gQUc&Lgd);_wwq|(soy)D+M)d(qLPFmI*GRVOz;KwHT zh^g@$a1Y-(1(~L}?SA&U|C^`R)M3v}ip(!jl=K*Kr+}b=aH%(hbZJCVjp&bi5U7wS z*wN#0Ficf42iZDT!$5=_6C^c)xl2W_9@22vyec`r4-c-%7hNoJ_OSZcA5pTUi1+ZM z@v!fvxq4AR7hd+{d+~9nIG`Q&(JB8ruf1<(GmPd|3+eMapeJy)*ZNPvae>CNg>LJG zIp3C>z%~AbSU_>niSio`EQE$Fr-TqTnDwU6JkP|VXtbyCBybO&0lK^EWB29ge_B^5 ztmwaLI4yKamYo92PMxgkyPvS7Kg+lX zKk#ENUH259i(rGEY;ZJ&?fH0vBI8SN=WYbmly()|UuQ^76s7#EJB*bp);UqVMVR)= z?RapD8I%=!3Sr$fx=`lZ7VUo)uFm%YUR2qa_%YI$(HJ4M>s z8Td`yz-{!s74EUaY>8Q+<~rx|RVOIj(QkUIllc47;~>uNon!7$zvtSq>W(3&+s?n< z7HJ~v9^?Pvo?V8M@#2L_@gvpHrw$NAGWAPBUosft%AdgXYD5CXlR(O>AD_J~knUY` z%KN%+Uh$fmDJ4Zm1-BYyD~_3@h35{1-b979R&vjrxRE<^4J|Y7NLjgoB}TK9^RVmP z@?B$Z&*mpkr9F`VB6irJ6Woypp!CMJn&%2~OcE}NdQYK!fch0Hp#+eJTEinQ+QoeW6RxKbS$qS^9Wnc9!*kK}}>Vdd~=kWcF`ePj_)ZVewwRJqsWJo0^6;S@q;xf=fSBr1`)<>8AKCd$-a;?h{B9;AxRFioF zFJpM{;EiQZ2I5U{33yncyuuVyL9}D zT#O0{s-qYiCMRH?UC!%uXW9_QA0^ zHM)W0+6e=^D_^+x2Rx;^T9JWa)@&d`D$jjb^Ylq8Kv*(&dIK; zoW<7ln78G?QRQBcSW;~K|FruMX^3XVlk!I&UJSEqrIPa*8(TjTjo}Y#h|o2*E0lh; zzFL6qy|z^30O7?5nLm+NE-vCi7lgUJhO9WeP{oG)l5y3|B!yY)loVqOYFmEj@g zo!se17wa6s@H}g&4|fTp66VOyrx^w4^`hjlYoh28qd9xw#AW9^iCvVlZ=Feq8jNT* zc37m%P2DXlNe~S{V>W&og8kPtw_CKCDxJCZ76pow6 zB9y0%V`8BZO8*fILPhzCVRFs>QHx{@$* z&p#pHRwIOB7qtMfJl~)Y{6}AMF3deONy!(Nu@Hn!k2tZT?T7g}Md$@_<0TIu5GvP1 z7EAQCUH$^Y+m(ZSb@9$aNs8ns!I~RrGa~{xBOw6xaDv`xBjIgi%E5&`HLmJsV2hwg zhtN&YRra!I_3^cHQ1Q&-m7QBD`lsZq9|>V)pD_KA<1XIIkJl`gzYEt%15kuCYrOEz z!{au?ENM}LI@m^V1%Dv#4oHz{s_?LSeI)V978BUW4`RQq8%!Cm7a(ts*i1~y;hnvc z23J1Qw4ZSTQ=V_|wass)pRh=7d;W`gTgX&l!*kyEC|>C}U>xzF4or~F3g1BA#x(@} z3Xagsx7+9kFko)OLo}Fs_#P48SS0KAjfpmgG6ns3d+3xKu@ZK`2-HIFnhzzOv>|t_ zt^opAW`REvk(KIR7cyK+$}98wB;Vr#Kqoy z^Cg{otnsH_)YDn5$;Z+BD+oo7n9wJR%K!6kKnMU8B!M<)Yl%^@no+ZwVX|^%)sbrn zn`XE1@;Q2mHPWfIk4CDB)1=ywS0lZ|GJZnYi0f~ac3nmJ*sWr2x<*sYyp_MK^zFKe zm7~;=A4Abc*Ab#fpOB}Fo#S<`ExCI>7CFxKbuJojKSoNdr+d$^s}A3$rzr%-&NFio zNA!P*G8f?YpnbjH(RQxjBR{p|wNlaJxKD28j`xn>*j!*?l;x8`q31(RJ@5b4ff_ON zHsQe;?GZy*ELz8+FQkjmOIx$75!t5k*9B4lFHbyB5;?-b604Uv@({fk!a|MxNsZ|`-xr7-we|wWEu=MUvSl64@zvEn!QybNTERd3PgoEDv$j*@1l@iB!+Sj%CNUE5-Y6jID;gO$N+FzQ5r_MK?0Sf8v_`<16HZ_s)}1 zPd}Y|%3|)NcU_FkJ*pqOgy-86+sOZSSME@u9-}tOJadGU+#fmklBOppZH)1WVE1jm zS(}W-5IY>{>@KQZE&8B0%YH570+AY0?5juqDE%p3y1f;$J7CclLko|VD1U`HZ!{_D}_ZI1>I3ybt^)B$Rbx>nv( zT;>@J_)-x;dwC3~u6mq{dp=O10kE?X*jcne!WgyP>j%eIZI(uNGhx#f3EvQ!6n4UI z6Dsq$?(;>ApSezsi#9%^<~7vdt2PTD(bRb`U?dmSm${0aY8ZzvPU!80-l=89Doi&y zI6ssXlJ+xFA}H(m?W*Ff)W?T`=-$5P@ws0%7B;A+uh^45{Lg6^BL;QcJ$XeIuoUet zvqGeZ!bbW?-CbPy4~MC|HGsZ2Qu*{AyCGt}4r%w`s6ZDL_5^N~o}Z->#w_V&p+5pJ zMtM9&@GCx$VI5Y^B23kdXP^kvA%#BU?_Ti@wZxeg?1cg)mRYw)HodLUt{+Hm?V79gQh|a;&Go_ylHbg`Qf`Y>!0i(C?0^-Q znNKwilt;0VYf0!3i7ve4*F=OfJt&ViXSzgrhF#~ev7{Vt8F-)VLbxrrTkfO&QtpNb zpzpoTqe1K-lhFH8tQM4MYi^ew7tofAmIpa7A{sonu{vBp;MoPC^zJDXm)@7_tK5HM zasD1^-BJB0l!o~6DNw=Skg)C3lo!}h9*8mFRTU_S8LQ<_x6v!_hF0FfloB}!&Z_x07=;x(!s-L*VHwg}V zE+D`J@1;j8Ga7m0OZ^C&M=H zm#dRP`4L7WF$ske4ctlFJdu# z`_4Iu__!tibt}%#;?d0Ux>%3nZj9Kw1I?5O7aAhezS7_$P@z~bI#6Wm>G)_w-5^!O zmF~5;hi}kj-FYnpAu$`HE$g)PjrOnk*B5@W5-zuVb!75gsq`4|kzLUH)YF}(>zIw& z?VXnWtqGb04tlX!6HkGILCzaN^a=kPYHi0$k+Zdrn{XXXrtnJh7vAkJj(qtfE=hd$ zC)dh{uCBi(9?-JH&ejmdOoT7qmI8cHu1dlr(IKtOxWej~F4R<y)VTOo6OLF`=c4{Y6OocQaD;H49kkNGt$gy z2&IjGS(;GY!|fY#@jTy$>nSAk2q!2$3d=vhHg)6|DcO1v9{#-5?RfQGac#x+3_6L@pQ($*g{sWEA1pdvTM^zkGGu$CFnh$sejNDZhQ9{ zQ|Qg*l)ipYu~nmstUUcL2GBm(7tF z)%d&l!OS$o@To6UPy|zD=K2oi2Har*=y z&}6Wb48?bqGT&ADXL9V-luNGR-?#VF1l0+a_>yFKqr`l%8+cFCLf-@8ap9QUEy5(X zCbQj&@Z`L?{!f+dCRw7#A@A#KY9SlKbZQH?aSscXn7@tifqz>E^ef*Qo<$8Azv|{C z!?EIGYII*?U56X@--jaZZk3xfg46>OP<}J44>#A5{j}nG7un29z8y+cx1$**6vQ4E zF^*WKMQh)S+N(TOnL6efkIeR7lIr#77JzaCROQ3IB@ z(C(sNjmisHG3mx;>)@9^a3Y%MGFwwJhb>TKFE2?*}!<$10PygXEjal3^X zGKaPbQ^_?>^8LuftL4Tq|M>E5-`WBHU!PTBbo`SYL0h${kICng#uuSy4KLPQ$>B>( z5tV$jHJHU}&^_c|8x3o96<%!Fcld#YWM`*m0Lj%sPfG*auJ7-n)Y(GRUx(`rMCj$= zwTeY&na+F_5As%C3e2I2W%MLH zIc>A?7vzcfwEZU!i}p_B1q5(uWl7jjn?(M5M~-7ziAIogw(ZU8nBQ-_W7Xq@UJzt` z!tvt{xjb7cct$i{Zl!IZ#9PR+J~3*haE zz^YrL>C)cymXgGW-%}X027Mls+#E*Z`uN(O&I5rr7RGC!VyTB?sfTT8;BINq1FujE z)yuHD?2vrUFqnLdGj;y2Kth%nVR+ivI)9uSa@AT^ywSzlAWav>c)pHYFM0o$=wd2O z0(TBlG#LV0NE}Cqc31x`;O|P}6A<_A9MB@Yq_MZl=(K0RKX!-|L&P*!>o&8oj~^Ws z{^V(fms?7-eCma1d3r99U9bl1mS#TxP!lie_pD-`{^dFJ|4fW_@1WbML5n`j70HRYezqZU)kA&wH8t`|o0UT!R>w>wVEh9H0Gm zf2$dKZPBn&jql$ep~F!vb<6(6Njj%rCjLyRFuzHVddO?*W({V*8_fFY5hN8e|C7dr z*|fLsEYror5?i{uGTqT5977CJ?STy|%VJqIdFj&iy565iU-xwVx60%TG)wN4Yl8mH zZL7r1nYX6+zfL48ZCRixm+CLZ5IPDW?omOxXr3Z6O*uDjntxV2n<0wxeFkkmCT6GA z+vI58OVPdZCp zYaziawl({6(=kycbd;L7QLEhNmk%zkX^HSGV`O^ZwnzgPMI=%Z=Jug~;m@C*2ZNhy zqRlm-uoz}C{LR8Q%K_a&GDThQCMS>0-esfX_f@yQ!On0=ri&PncAr>Ak7XEM*MrB{%?+#5Al=!Za zq*XE+uAh$+^Wy1eZN_6ph5~5{W}hI*!&`R;f8mAQLi(W4;Jr-uZng#T|8aYc*lkU6 zjsI@U<6y0UjM8v$#KhoV_seSKAen6S+E6L9OSf^fKrB13+p4(U{gN-d5Re@D^cCj( zDRj6(!2F@+UHgxK;&co#GoxMpMTZN*;26}PwN3>SQ48@}c8p22P> z6Y%QRGjomceg!3BT*gY9x?F`IX8@Ond0{@~145d%%^e&pcJt2ZY zisiW0XkL-*R8cM{2D{K~^gP)TT5_|iriEz>01vvLR(#J%3@ zS;!-@Jks)G-0xWv#{1E>#t>j`jv)V zF;Z7vQrE?i8>xgJa>ic!(^ss?{vHCYgR<0sK(X5<^%Dbk_gutkLrrCvsUr ztt2!e?3WTIi-mEEd^9GQ&DXQ9ztl?eab z()ZNg%I^#7p3hS8;jhi_>Ai~0^Kn~_89g)Hp!(-eE3!-wjAE4d7jCY7P)>a$D z#K)RFJzX5c$6T%jW%Fp7++%Ako6wCZTq?9B8p9l)RlPY`s}WBR-k`)K2%ds!rdcbn zO6EjAM2cRr4u!dezK{v@+FVapO>mkB|K_0sg#VHHCq8!W{9^S=Otq)r9wUXs(EPoc zH7U5KzzJ<8{1(?R9b0hPW`V!Va9dvp_4ko2Fw3%9*K4N@ZNL!E7S+=UmX3tJ9-8isRL&QEgYyH<*z8`f};^n@> zK#Q)Bd~ASybAr*~dZ&H1*E?kncx%=JCe!S!-G=&H!O^cD*4mfaW5v7|sxFPGb`zu9 z5_MHqX}N1klYWi&=abo+l~!Tb{k{fvpB#XoEX^Kx^{w5~0LV@PZ$3!SrNOUm_ri*A zv*&#Zrm3Q+3rPJEO0Q{6?E;$FRV-lKs%~?f#F1K)D%k z?(ILvKh{;&{Ly)T(5;8)VQ_nA{eXU%=}T{uGUHAcYWN>qH~Lh8FbL0xxC21|Gm+94 zqU)`f=Qza>0i^W=DqwCXI_3;5B;t~42y4ZZ!Q?rV9wFi;Sa>rc?$3&eFHc7mLrqzN z0=>3Y^6|*j`)5WX+jAXWt!iV8N7Ozi>xy12meDr;CvJC_iQ}t8YDQ9KCz$VARH_yl zluo_=p1@3itp!omd(|FDn)Zl0xgXNkDBmBb-1RqToylMKKVS&LW8dWVf1vFLSKDj* zj-e}$FBEkHCRr1DD|M4_(Pebj3A}&5B?Urqco$%jN1c<|j}_AJ=sI9clz>$vgU8La02K z-r5@z<5JIv6z4`Lo?sKtCHGtPOA?Fg_9%=h6F2GnQOCUK^ze29m(6t|jsG3n_xgsB zY+$6>?DwmN!D9l@cWZzAJ?vv_81|lM_s}hVF>8v|vuBL=;fN7o_h$mcumjk}Ab;M) z$#}Gz8>viSU*>2}r(Fdry!GG9-JS)Qp+2e1I6CjLzsV%<{XlE><#(?AwCBr;-Wh(7 zTQYWGCnd0Ubs3|R_bLd!Z>&E~hTLdH=G@jMvq%;pRM)BgmzwtCUyeUc6&A8ih8={y zPz;^)YmjFIedzwuOTh@+g3EY^2o{H)i+dc6VYc>6I9u*PlLhUzVAIqA<*(6b`@SVz z#RKE1WhQ2cSNW>Y2qdPr0QdFDJX$a|#xPf1Bm~6@lQ@-WR;mOe1z(*^$LTj8f9y{y zBGwGS9J}=p-dF9{a;p;sxoV5iX#;fMmMqQQ_kayY*yEd;&Q7kpP7nBp?-tD{NWOlS zxtsgo@ynH8=T%Zaa2vb8B`>k}e~vl%(xTJ&$I0}m32qniMxl}?o=X+6>X z2Tx~!Np20E++uD9cOjMKy_rvwC#VWDLTu_P<%8>V;kE`c`>m&tyd%fTc)=pN3-zk{=;fb4W6$xfGHnZw9&OCwh6W&mSOVkJL@%2EIXEzSs^iqWfwGVNY*8_ zuj3u|#e2Ci)0Ww*QEgK;>t#mV?Q3_~XRi5%hky|QkxYV09nd^Ymz;XOtdaG`Q!>L4 zN$CWoDUUGFL_fbb%NfV{w3>I8O6j%(|LU%px4}QC|7!ji)ux={oA2ol9-;o=<;uOR z^xIuW_ae26F+RkE&}rLA0gBgD zqJBxkVDH?*jKgFq2w51?D6}QEA^BPeS>myI^LV?<;q7){u2XZOQ+^pHcZoeauC9PG`_&c5*7oA^ji}uh z_3Wr0K|&bVbJNO%CWp3yZK0_QPIA&-Xs`2NSXY;K?IHu}pvBZ>@J7FCM`gXt5$RY@Uon0r?6L*umLlEL-l}sWjQR9I+-FYw6MXah zdStvKKREtt*V_0y>h3yV{#xZg;b>1rN=~qT`R$+fXY_+d zSA?c|$95Dxd>hb`oG_)BIV0OAS4fIDlcRphbr+$)G5Xu5L_UX{;abbGp$JAb9RpeHV@0gvY-cviK3#OwXbhPl&eb&|Ht@VHPw z!26>O0zX)rjTpP4ryXvo2O|*vl-Advj=lXtZY=+=)e<$%Xa&B}t6$cu+bz`aZOWG9QP_@lT)|MsYX}};0guMsz65jOm0U#OX$&c4f5h*! zmOIeRp4Q_kN2pNF3Z(&UxIEn~_)CF;kn}bQ$c&wDz+8(a0XWgyKIwBecXi-Emo$aI zx47S(j$qn0iE6}brA}OzA%v@^iaaA*z&U*`8)Ep0cgQR9r>ux_ z+F_4i!5Cz1u*btO$^kj^#Nna@Vl)ic4x)9kk1GCXg6~ujy}5Gx7Chl*NYV)-lk!vj zZ+6LDFizT&?@b>4uuVb+BAi^f4YvIq@`hATY@dJSB6|DMIIKQh#hfw#b3*5Z{yZhm z5Vvo@p$VnzG&u2dQC8IQL1G#*5sfw+`b(6u`U{jmUBPM%^Y@u$J`9X|oHuxX#!u6x z=`^NVVk`VTF!AF#zF60i6XY$`IpJnB_}&q_Tr7?EMQsv*@ry@X0iQ ziwCR_C3xXNRh99BOzn`P5gj1G)M(yj^ceo9;We!0#sRlm+;SgJ!lkldN~z4x^imrjtn>52leY8bV+rzjDi0!6Qm9k2zN zzX0~9jJ#R4A=_wwbx#WE5l(l*A?~zMx) zW5S!&hKs)+!O6WvO#i`-*&Cu3Il(x?FX|#N)`YOn4*0V|%0N1s>U`?c)K>ES7XtY<~gCj^B0)eZ`mZ$PXZ{kj&6nBVk7O8`1zSWSS{0IUF^{} zxX`qZ?+R(PB_^Nd$q#t&iZwNDW^2AQ#w=w|!1A@`etB{nM8LF9_Um6i1*stO$H<|3 zJanXt#3xwUMfdf}eSBN#pW5cWcY2#+tMONPN4(mh_Mg(5LNUA_{;CC**G+~HghkpZ z@4p|-SWypCPbP=_1D-wQ+ztB?k?@U(jsSdD0!Z$ttem-0+UG)T-L;UJv6lCu{H3KI zQo>IkwF=pzJ~I(D5&?i>36WoOv0v#-ZWoIndUdV7$F}XU2K^)X-wCkNjZ?t%F=>uC zAqHLz+YyM+mlX*c(BA+{UT_~E_-`Z;x`iHq{&mfst`y&0rVKf(Ge zu0TZq->WMz^1=?%;x3Lp4pjaE{Q0Fv{oM^yLOdx1F3yz?H5}ma85STGZZ9@py?~FK z`4O~|Y-?QiOq`eLSeVHPL$_Z+>vTVo?}|@K#l3^_!Y4Ma2N0p~Xm>}F`y9~>#E@{goN;WeAmlXihKY6rGlTPF~2${v(A%#Q5Xf%<_&s6FF*1h zzPJF2aTaRqaexhVc1k^M5Cq_iHB`CpM?KwpV*+rQH*d8sID6t)-||`MbgM-9j5_%8 zo2Cp8n1#RcT4N2}e)4TFHKEB*U%C+$W|pf>n=*}cH*d(P(5&%CfpCqNAahz>5Aj#? zkOdMr;A$j#m6o$YY&Akr3^i{YJM+w?6FG zX?z%;1T`G<)hg1+oz4sDkrFx4?@}OS2dPg4O_aJ6$kWDO4EDKq$q?@I`N95OX12=? z7nsdATo^IFGeJ~(rA?y_3YP7^-@TdSA!Gi%N99XqbJ}&<(VTjk{b;oCd))_UZU_lf zg#|Wua$Y7S-$7A(tmXaMSrsU4`GQBKP_r8^`Gyd-a90VYan`6}4-b4N+UU(=Oj0M` zRir6Q^R{`oJ9E<-_rEMrq78?chUTY0?WJM!eLTtd%yWl;=hWJ#?&v%_jCa~zE;Tys zR{3o+Cqe-tmM*OXn?3XhCmQz_XkAF>aVgt@L#$cQ=V(c)nO-JudwK)>RNu`c=Lw;uk5Z90f*Xp zt$b>=c9^v9e>W8VEhW*+9#YDI{SofV=I(v|pSq7(w-CR0-NN9Qu7Q1!ix^oMi8 zw(bHG-?bTC_*XSNh-_GcLbblv=IDhiZTFqtZ6f8b6p{Pt z!kNDnT6wVJ$pFxfL{RiDq-sS57CP~bOx<W9tG>{j|s@CC7E%duWARXm3PyXT*9<@&*|I= z%vL%>UbVh&8&kz%cqU;OU*S(cz24=0I=@m0*FLy>CdE+o_SAN#-B)8JuuLBOre20X zJP!I@4PWh`%egWg!>h1y9mRQL@n2NhvK3Gp_L&l{`4aA7F8R)B!A-j%cf`UE@dhj%EmU#kIPtV@vVaN^$tgrU(MR5JYTs+# z_l8S-8&928O17vV(TZ!hAY|ZcP3lAxRfmx;=v-`I!H3^Dz2wv$28bz1h^V09 z7yqvN?Lqb3=YOJKB@W3rZoJUhV|!DW&(cMEqpe6Tg^Re{C}7)EqzXJ#dN(n-#s+XJ z;KJ(V^E|z_fy@wq$Fva|;Ji{eRRE^=C{-XW`Vx9z$a^`rMzEGYrUI?qRqD=)$!ZjV z)+R()2V-kFvs*2a6PUlha~!O!zgv&JP(|K4D;-`;k2JJ;xCUBqn2g||mV ze{a-jQJ{_H;WSkK5NOL1msD!2VZ#4Xpk|w%6+HMGCX@99AtEKM7S~z8(hJWNTe9ec z9*ApEo(+(1S;z#Sme*9*AO9Auq(cwNbf(+5ej=V-q9+D&Ar{b!Dm3NQICuklIO4IAKf2(a`s zHr`>Xi+IP-8&tbURo?G@V^Qrd87po!fZ8H<6%_OTp=kVS`w8!51=>Gw=-#__wi8fk zn9g3hK~>f8!&qnJG+bDUA7{3yUxLH}M*zqMInG+r<;GIiDy`SJ9F%2U&GKv{ctntp40mQ6|0bom-krXjS-;#X3DK`?+ zt`(ak$|F6J2K6vN|4r@9tf^w}&-;?|#Ds8-ZxY_j;P4IR_4N6vZsi%g$($-+;SiIj zUTpA*A61(nY+s&L4UNl|>E8x9`%B=AZZy6&-DTAX!IQu3|nh z+G}gGEJU4;g5Gr_`wdLBx51AC;}rLE>O_l(P)TJ(0d`*H5-{;&DSX%6KzH-+u`e_Ls-yXbJ+)A21`gFv>KoGfd$tP94A1tT5_2hPz6j4)#c?q1R~=;( zG@1Vm0S(EB5#BX!L2F4sA+qXwKcOE`7g67|hz)b8 ze@tVy#Ep%nZOP>kBBsP!lFRj5M&h2#1T`4i0u3okM@|feWlIrqS7C}?Wo2viz!hHC zCTM#S8Ggsf(IX-j41ax!RSSJB&l)=+bXSV{AjPlp(_v{O+LeSz;M<~u1^Z3q)r_OW zcc#67!kAt}*JptznY<-uh{}(lZ|mG19}NtGtiFG1M=o~;{sX%n(F%7UTy#crB&%Y) zpfZBYByR2=*K2+Sxjmca7!w_uzXdzcJKqL@M&U8lZaqlg-3-$nM+qdqaUJV@+K0pd zd%`u#050dQ(V(jA)CPE^v&}-6kkS*r17#h()@vmK??N;bKV#;Je*j&J1vgE!?A;jivC8eM}Bcu9&csuiKi!E@n_30#v7;W|NYlKiW#>6(s{u zH+}{Ib~?Xxdda1Ex^+A5qeALIaDn!j$n7?&wplJ8OB)2o)stMRRy=%g#Ga zhE^e)fz12`g+H~ob05UK|15nt+*+IaGM_5%OL?t~U#FbW$(aYcxc}eom2z`C zuRuQ-rGiWqZ_$`>9Jv?evN`4Tu1yKd3fS!V^=Jt|Bt|1FP~+_0PQX?BV2`bI;)bUg z#dd+*Ca*w%Zb9ZYAIzMjt}b{0n7tR#*=bU2Ub^)%*gI(0P0q-FZzoW*t47A8ZRh%q zBtkV%$)u-6;=&a*>gn)C74Y&EWqkHF@FL3+R=Keit}xxoN-?38a#uF--`?-!M2yk| zoMZE*XZ#v=H%VV4Eozak2{(T{M6GIhcd<*PM|E%vgd)sG*_1S3C!W{akU zDBG~x<{HKtzxhLdB!z$U!EVU4W=X9tHm5>^EIo$y=kD!KmSejX$z%(cx28(sw+yVN zUhL33*68=ssutw&*KDNAi2AK%)`%oZTIu+M8l(a~JEVR~jvU8VonM;tcj1X7(364Jbg*cSonmlgvzO5>>M9P#gH_@`ss^;2*<$cVT8< zZ?5kI&@sC)Z)f0)ykVp682FR}w=J}I&WWe^Q)i1%`crgJ4&kjJS zn;+`Jz9~b0Py(9s$kv=##J|}T8`I#deN}^@wIf5eibcZ_uG;t}u~3Qg<;$2t6L(oT zqnYYf&)weF7hiBh=n8Q78+K#RIQ!)qKx&d;oClJ^EH5HIv%caM=(6r+HQ%VdGW3P@`JYu+?*LuSP-kEW`#aUOc= ztMS9$CRLW}l&y);1xrb0#lL4&{=wiL&=L@i97Qbr?OaZ>FU}nMhA`{Pl=A3`9Hk%ChcqfVWhN@!@*uw|*wzBMN{F8M{rgeWMF*wI8U~#_m%RdwEg>KcY z*ZcXTi4l#d6OYT@Qgmh)7EhS;dAh%nq_mU=vLMGAcPPH`$Yz-KC4J3?v8%zC&8wx5c`p9;LBg#$tLP0&M zOKs1dpmXB2@e$bK6kO&Lmkdvr&iy7Bxfe_z&Ke6b=81BpVO@SF;~;M`vV|kXz)Sw{>@z;^+4zIZp zDG^Od2eMw0Bopk_awfT+LfT4!4A1BAQjscY@Lf53W5R%4BWY%q*u`2Id=3msN56SZ0qiVD%>CjO>mJ+#x`4%SYu(`7?;)Xb$lNU-%WgcDf1L}cM*TKgC6AN=HYSu zY5ma|lJ2t}NGB~;J;UicPDmksN>qFsMs_md2Yc_qll#puN(mLhJ$qUYF=xO;#XJ}O z_zPk=8ttkiX+n6)%T6cNnpM`7%4aDcYW?#sA%ROY>2P7o+7fS9=NcEr znND&PAjpp_ydiNSHAfsIES#GWcP%tJVhmR62T!_~1>dJPTO4tRZrdT<w8<5D`sEEbSk~1Aw?moi8F2q2N`g6 z7zdhaShEb_(qHO8!Q>?%3lkY7pDUscRlBQ%P)=0RJ}2G;K4-MGvze!H!RYJ3e6V_O zEA`>7P4d__`@FCK;t#_o?jvGC-unyfrC&go~JO*Ct?$_3J6z0jNX=H#^1=a*X%!ECztj3b1dmP ziZU;d2Rib)upHYtS^?q;Q#U)+*PCVYSpEg=ISbiuAmn6GiSgc&Lr$I+kkD1K6V)`U zHD-(pLR$WBrB)N6JGxaQKPE#29xYsB5G5K%uYEs0p4CW5ha#uNZq^bVD^2AdVW}%y zi;;tV35{Vshufh)6O+ON47d+1WB;_CDeqxVy9ru7`+eZ6Ol`kT6KNBHZ7*Yx_HY>| zT5u)GgR%dDv)IYAq=-kiDy|#7cPs8a41Vj1CjSTYxQ9TdY8r^=(TB1Gpnz&@>~T>Mapj#+6(~O)pgjWb z1nB|oV8t3oP62E2BLi^o+7QOjP;$(f7?&I|V_`SqnCF_`e}u)}to+sCV4DrbTg#%yG8)pyx<@oKX z_hYK2Kj}Xq@uiSYtCDS5a z;nrkq#_i~%JI=zl)y`=Y3X2E_t;uY=XOrv2NiZ_X`;D`vhz{H{Dz3DQ8JUR->>SY; z|FpPUrmWW^F@;oBD%D^5ohR4D)PZv`0>qg>bP-R!D2E^EGr6`OQne(|{eEBbU$85R z)&Y5K>Z<>C{d_|=aPZ%-*N1<%M?wwYl~xZWZAq$#7Co`g2@PoDGT1(xr2kDGN7J~Id9jc;ky-NH)p|{y8Q5mHIFJ?&4sY<61&toN0DhXf0m-geA@R)70JF}zP?Wjd~Sgk+YiziYa` zIJ#Q+M7S-0NZ#+h4;!lT8R%M-vK-G_yhPfoZZ=OQ^|)2&+(%wtBuC$8OKAUF=+2{c z*bv_KIT8~!QdI^>y}+ES{atci;}_&h1E?(1`3>*o`y9ZhILE>B^~Er7P6akMgAUM( zGxaq-?^CqJkP8bWeb*{iv+vbJW_S;Ezy&5x9-UecH*Gu*gsOT5T~4FB1qx6oG>Wqv z+L={l4*)v(|0r?Hj`kH>{0R?WAX?si?%*$v9ZjZGY&j6&k=;;zwe2x!Ic^WIaJ~<) z&iL`SdO=(zjx{%-1pHZ4uQLU79YId0v8TML6+4!&=paA{s^?~|L9)pxLmIhpPmq2N z8(d*tMfgdz8~10QsVE=y}F6+ah!3}bmxxki4G?)Zqp zxe2hJoeP2q6vq+6Sv@WrE>Q$g-jI9>wPeSy>rZi;owe3Os~0Vn6IyQr5&BlLImi8CGovRBdrE|O2-xh{XV5!%+C4_(Y#ND+qF#sxfkiWlae%E`oRJ)hF zM;lsmwO#7?j&INH=B{zS3l*?h7aAgaXMJyXDRhR+e)DSnbXEL_R{nl-YfVrfOcyb@ zv<}-APKu5AXu!c(m;ji|$23Ty+Z;13{IuYST)8Zk6cwIGaAPzjvmv8y8?y{4;_q** z)?7tLvVPhQuQ9@%OX53Mp6h(l>9K0(^K?6;jViQW7xxg);AOYxHmNYMW+9Au`%IHt{ zK|c^?7}MKeKL7XTa-8eOo|hZ)Rk|}T+|r6K-hGK^$(=SOp&|;%*Pc3>OPT9iUK5K0 zaHhz$XNi8FHj==$#h(Z&O(C+UAe$&bTNQHD(W&#qQKjlrbKWTHB!Gw3BDsDdN6*%& zb={sK+jUPeb~Mwr_)~qub8pagh6e;v$DG5mf1g>hXy|S6Ujx$!Rn>WqJFWP1!jsbs zi~_e62*2Z{1^)JY#(=?`(eEi-tvY7sX_Q>v^R_U$snpScF2;@tuV$t1EEz0v$1OZ*b(busFug}I;<8A!_+h}PfGLy-Klq~?fDYoAM6c~dpbP^f zLs969x}hKk8=X=k5Pz=3uZs4Jdp2Ra*n*PiDvg^vTNx;7$p2C4Cr1?EmW4=~?IP1! zxF$KO9M+XA-8Dgdze=WAp2q}{zlCC=aA<} zL;ag&$}A-I*31PU8A-xhcUpo?e#*Z09H1ICTx1tEVK-F$(Lc>{N0xAHV^XJ3Hwr$G zJ)3LiZ`mpb+*ucWct^0t=QW8gM4~&In&by`JqW*dzD>h)j_XhzX3NB20P8TRewr#v>EJZiPO!1UCoNvJz<>U*Bp&$~?P zqM|@QVBicp3gXwo%E)pWlgD+cunWcWa5@%Rah|U!2t9fl{4drONn6*AIR1<@!bt3A zhtNNb%gg@jKF^M(5Ua~V7zjF@^-fI!PI(|j`TPTD1yMmh?^&7mFB+s?n{QY_E!kQ= z6s`Iw^Tq^2RU8VmXY!#mL{UI~a)rheysHvP+$o??e3X+1J#~TOQY1sg9Y1$=u5{sfx{=LI|p&aLr8o03^Ys{`R%U*1KHt+B@E z`}m3?2_*~tAk9^6PHO5giT3K;S}dXr1M?iaUe_SgwmyW4@@I1pWTC>15*&x~(N>-| zR{U9z*Reb5p1#ak`U&SozqYLwsiP;>JZ^O3sO4!m`^^19^#>R7U59*5-H@RM&Hscp ztEy5Qv-k@ZB?E5U4&kiOX-N(YZNyMf^pF20QO7<-NetxzSzyuh5ICARrvdf7 zRa0gmv{#fgA!37?kRPT>E>U^}!Y8?o>Qzf#%8$f|$??xo2t+Z-VP>4n@2b>Y*}pU2seRsuTFjT{VnHd0!|i30?3 zko+LKVgkUfe+Z0zFww1 zCVFWVd9N=}ZPv+;jR#3x`;90nYZzC=PkFMv-XMolO2DmxC?o4g&(a|7_O~sv#$egd zyRVzeM-m7xWGHH8(vUhqpw_O1zn={fD2;hF`DT07*`q2b0WQxK42wElr+h0s5L}J= zVS}cv5*0nt%d7JE-&|1>e63Uqp4G|>2fj9E3^RnG<#KRMF4Tbyt9HGLL!Q7TB!@4I zZrAL2#)UF)f=WTE2yZSzGJ34E*o2;7Hv*rVE=uubGS-~TD+8}3;N%CzdP(eM#E`?a zTF&P+|B{Pjz9{+q9pNAuxWCfdKAsODJMt$uE_WmL20UPN1~E+6@ZC^%_EfL>FaKg6-*Yl4mA0qdHS6j88@r zW*#wZMKZKu%t3x^q z@EufDAP*oTgRY4IhRLv&BQEdLhL>y?&H~j^X`5*hTlZNpH#wDsJO)7)bm$_X`sku6r@}UW2m-*xR%tsC=@~+7aKR4AW5uPR zxG^KmxL5>^eNdE2#-Ul7uvctNAsG+cg1YI*9zD2d++~LJMC%p>&l~YSrnf#jwETnO zH%frLJtAeh3?gN|g|MjcR?ajByKx-1iq!4@xgFl>E$p{{7ABy&!(~W(WD!Tk#OWvE z;-9S^PW=kkoJ#IOBtRac36s%H&)!vC@2aok@%(zXj!sxTyt5~{Mi@t{<1f6eaknyJ zGqXiX2!}46*sDwC303O}RXg)u9|!9TUD4A#Xs~*x0-(Ura5zw7mE{}@Jor+6m3J{)
&pFikFi#*pDF=|Mamy^ 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Þ}FlL<2)0wz#K8X_y8x!<)9dUYt+K;Er1+n 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%0DkS%)35x64QDElkM}dP>%%hr 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 Date: Wed, 1 Mar 2023 11:14:58 +0100 Subject: [PATCH 24/85] wip --- .../Components/Layout/SideMenu.razor | 6 +-- .../Elektrifikatsiya/Layouts/MainLayout.razor | 2 +- .../Elektrifikatsiya/Pages/AddPlug.razor | 43 ++++++++++++++++++ .../Elektrifikatsiya/Pages/Dashboard.razor | 8 ++-- .../Elektrifikatsiya/UserDatabase.sqlite | Bin 0 -> 12288 bytes .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 0 -> 32768 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 7 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor index 3691e03..c96b81f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor @@ -18,13 +18,13 @@
- + Admin - + Add Plug @@ -32,7 +32,7 @@ - + Settings diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor index 362810d..08efa17 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor @@ -10,7 +10,7 @@ - + @Body diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor new file mode 100644 index 0000000..91ba629 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -0,0 +1,43 @@ +@page "/addplug" +@using Blazorise.Components; +@using Elektrifikatsiya.Models; +@inject IVersionProvider VersionProvider + + + + + + + + + + + @context.Item.Name + + + + + IP: @context.Item.Address + + + + + + + + + + + + + +@code { + List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 2c3933f..de1ed5c 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -3,9 +3,9 @@ @using Elektrifikatsiya.Models; @inject IVersionProvider VersionProvider - -
- + +
+ - + $)9D$$NwY!ljvxECM7XY?sN zttn_x+?W5rOft8VnJ=s9Ux$;z(0#s`r3IaeLm{O&BN9SLE)_28aQJ0s-Qef4{a;9N zGCDrsS+e#nY9Cx7AOHafKmY;|fB*y_009U<00Q3xV!7uwo6fLEZ>Pr2r+i5rSu=k& z+1+Nd(oU4G6>0xGRJ1X-o~1L>;+2ipBWK@rUFU6gm2+Ut!mcX$W4*WP^Qc}W4lfvc z6hvBGs)VARrf3j`)b2%no%q~OUfda#E8-;R`pJ+wYDoS-_kxHMcU7cYU#TMAiAP%9 zaF#MtITEMVzT}JXRcar9pV2qgPV!9WPbOQ>;GLA~!_*dG{xHcd(&CR#B>9v_HcwJ* zEbr!g=|?~S0uX=z1Rwwb2tWV=5P$##Ah5*(xc_hQ&&AOo009U<00Izz00bZa0SG_< H0;Rwwql9r3 literal 0 HcmV?d00001 diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 Date: Wed, 1 Mar 2023 11:16:06 +0100 Subject: [PATCH 25/85] =?UTF-8?q?=E0=BC=BC=20=E3=81=A4=20=E2=97=95=5F?= =?UTF-8?q?=E2=97=95=20=E0=BC=BD=E3=81=A4=20Some=20backend=20stuff=20mostl?= =?UTF-8?q?y=20for=20Registration=20=F0=9F=AA=B5=F0=9F=AA=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Elektrifikatsiya/Elektrifikatsiya.csproj | 14 +++- .../Models/PrometheusQueryResult.cs | 73 +++++++++++++++++++ .../Elektrifikatsiya/Models/ShellyResponse.cs | 13 ++++ .../Services/IDeviceManagmentService.cs | 2 +- .../Services/IDeviceStatusService.cs | 2 + .../Implementations/DeviceManagmentService.cs | 50 +++++++++++-- .../Implementations/DeviceStatusService.cs | 5 ++ .../Services/Implementations/UpdateService.cs | 19 ++++- .../Utilities/PrometheusQuery.cs | 25 +++++++ 9 files changed, 189 insertions(+), 14 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Models/ShellyResponse.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 9d16e3c..4dca5d7 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -18,12 +18,21 @@ + + + + + + + + + @@ -35,10 +44,7 @@ - - - - + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs new file mode 100644 index 0000000..9732592 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs @@ -0,0 +1,73 @@ +using System.Text.Json.Serialization; + +namespace Elektrifikatsiya.Models; + +public enum Status +{ + Success, + Error +} + +public enum ResultType +{ + Matrix, + Vector, + Scalar, + String +} + +public class PrometheusQueryResult +{ + public Status Status { get; set; } + + public string? ErrorType { get; set; } + public string? Error { get; set; } + public List? Warnings { get; set; } + + public PrometheusQueryResult(Status status, string? errorType, string? error, List? warnings) + { + Status = status; + ErrorType = errorType; + Error = error; + Warnings = warnings; + } +} + +internal class PrometheusDataWrapper +{ + public ResultType ResultType { get; set; } + public List Result { get; set; } + + public PrometheusDataWrapper(ResultType resultType, List result) + { + ResultType = resultType; + Result = result; + } +} + +internal class PrometheusDataMetric +{ + [JsonPropertyName("__name__")] public string Name { get; set; } + + public string Job { get; set; } + public string Instance { get; set; } + + public PrometheusDataMetric(string name, string job, string instance) + { + Name = name; + Job = job; + Instance = instance; + } +} + +internal class PrometheusData +{ + public PrometheusDataMetric Metric { get; set; } + public object Value { get; set; } + + public PrometheusData(PrometheusDataMetric metric, object value) + { + Metric = metric; + Value = value; + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/ShellyResponse.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/ShellyResponse.cs new file mode 100644 index 0000000..bf6cd03 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/ShellyResponse.cs @@ -0,0 +1,13 @@ +namespace Elektrifikatsiya.Models; + +public class ShellyResponse +{ + public string Type { get; set; } + public string Mac { get; set; } + + public ShellyResponse(string type, string mac) + { + Type = type; + Mac = mac; + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs index 1da0c91..bda0e67 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs @@ -10,7 +10,7 @@ public interface IDeviceManagmentService { public Task> Register(IPAddress ip, User user, string? name = null, string room = "default"); - public Task UnRegister(string macAdress); + public Task Unregister(string macAdress); public Result GetDevice(string macAdress); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs index ef7fab3..61e1cc1 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs @@ -13,4 +13,6 @@ public interface IDeviceStatusService public Result UpdateDeviceStatus(Device device); public Result TrackDevice(Device device); + + public Result UntrackDevice(string macAddress); } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index 75e9a65..b659cf1 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -4,6 +4,7 @@ using Elektrifikatsiya.Models; using FluentResults; using System.Net; +using System.Net.NetworkInformation; namespace Elektrifikatsiya.Services.Implementations; @@ -11,11 +12,13 @@ public class DeviceManagmentService : IDeviceManagmentService { private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; private readonly IDeviceStatusService deviceStatusService; + private readonly HttpClient httpClient; - public DeviceManagmentService(DeviceManagmentDatabaseContext deviceManagmentDatabaseContext, IDeviceStatusService deviceStatusService) + public DeviceManagmentService(DeviceManagmentDatabaseContext deviceManagmentDatabaseContext, IDeviceStatusService deviceStatusService, HttpClient httpClient) { this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext; this.deviceStatusService = deviceStatusService; + this.httpClient = httpClient; } public Result GetDevice(string macAdress) @@ -73,13 +76,50 @@ public class DeviceManagmentService : IDeviceManagmentService return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); } - public Task> Register(IPAddress ip, User user, string? name = null, string room = "default") + public async Task> Register(IPAddress ip, User user, string? name = null, string room = "default") { - throw new NotImplementedException(); + ShellyResponse? shellyResponse = await httpClient.GetFromJsonAsync($"{ip}/shelly"); + + if(shellyResponse is null || shellyResponse.Type != "SHPLG-S") + { + return Result.Fail("Device is not a \"SHPLG-S\" or not reachable!"); + } + + string mac = shellyResponse.Mac; + + if(PhysicalAddress.TryParse(mac, out _)) + { + return Result.Fail("Invalid mac address!"); + } + + Device device = new Device(mac, name ?? mac, ip, user, room); + + deviceManagmentDatabaseContext.Add(device); + Result saveDatabaseChangesResult = await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync()); + + Result trackDeviceResult = deviceStatusService.TrackDevice(device); + + return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device); } - public Task UnRegister(string macAdress) + public async Task Unregister(string macAdress) { - throw new NotImplementedException(); + Result getDeviceResult = GetDevice(macAdress); + + if (getDeviceResult.IsFailed) + { + return getDeviceResult.ToResult(); + } + + Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); + + if (untrackDeviceResult.IsFailed) + { + return untrackDeviceResult; + } + + deviceManagmentDatabaseContext.Remove(getDeviceResult.Value); + + return await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync()); } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs index 8b4263e..3574cec 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs @@ -45,4 +45,9 @@ public class DeviceStatusService : IDeviceStatusService return Result.Ok(); } + + public Result UntrackDevice(string macAddress) + { + return devices.Remove(macAddress) ? Result.Ok() : Result.Fail("Device is not tracked!"); + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs index 6271a23..980826d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs @@ -1,7 +1,8 @@ using Elektrifikatsiya.Database; using Elektrifikatsiya.Models; - +using FluentResults; using Microsoft.EntityFrameworkCore; +using System.Threading.Tasks; namespace Elektrifikatsiya.Services.Implementations; @@ -28,14 +29,24 @@ public class UpdateService : IHostedService, IDisposable _ = deviceStatusService.TrackDevice(device); } - timer = new Timer(Update, null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); + timer = new Timer(async (_) => await Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); logger.LogInformation("Update service started."); } - private void Update(object? state) + private async Task Update() { - //TODO: Update all devices. + Result> getDeviceStatusResult = deviceStatusService.GetDevices(); + + if (getDeviceStatusResult.IsFailed) + { + logger.LogError("Updating devices failed!"); + } + + foreach(Device device in getDeviceStatusResult.Value) + { + //TODO: Some update magic + } } public Task StopAsync(CancellationToken cancellationToken) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs new file mode 100644 index 0000000..a635857 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs @@ -0,0 +1,25 @@ +using System.Net; +using System.Net.Sockets; +using System.Text.Encodings.Web; +using System.Text.Json; +using Elektrifikatsiya.Models; +using FluentResults; + +namespace Elektrifikatsiya.Utilities; + +public class PrometheusQuery +{ + private string connectionString; + private readonly HttpClient client = new(); + + public PrometheusQuery(string connectionString) + { + this.connectionString = connectionString; + client.BaseAddress = new Uri(connectionString); + } + + public Task Query(string query) + { + return client.GetFromJsonAsync($"/v1/query?{UrlEncoder.Create().Encode(query)}"); + } +} \ No newline at end of file From b8f20bcb53344186b09cde38f0def70e60dec757 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 1 Mar 2023 12:00:29 +0100 Subject: [PATCH 26/85] wip --- .../Elektrifikatsiya/Pages/AddPlug.razor | 78 ++++++++++-------- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 32768 -> 0 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 3 files changed, 45 insertions(+), 33 deletions(-) delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index 91ba629..5c459ad 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -3,39 +3,51 @@ @using Elektrifikatsiya.Models; @inject IVersionProvider VersionProvider - - - - - - - - - - @context.Item.Name - - - - - IP: @context.Item.Address - - - - - - - - - - - + + + + + + Add plug via wifi + + + + + + + + + + @context.Item.Name + + + + + IP: @context.Item.Address + + + + + + + + + + + + @code { diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Wed, 1 Mar 2023 12:46:19 +0100 Subject: [PATCH 27/85] Fix: Broken stuff --- .../Elektrifikatsiya/Models/Device.cs | 2 + .../Elektrifikatsiya/Pages/AddPlug.razor | 5 +- .../Elektrifikatsiya/Pages/Dashboard.razor | 4 +- .../Elektrifikatsiya/Program.cs | 2 + .../Implementations/DeviceManagmentService.cs | 173 +++++++++--------- .../Services/Implementations/UpdateService.cs | 11 +- 6 files changed, 106 insertions(+), 91 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs index 0bcca1a..4d15c15 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs @@ -34,4 +34,6 @@ public class Device User = user; Room = room; } + + private Device(){} } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index 91ba629..efabc58 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -1,6 +1,7 @@ @page "/addplug" @using Blazorise.Components; @using Elektrifikatsiya.Models; +@using System.Net @inject IVersionProvider VersionProvider @@ -22,7 +23,7 @@ - IP: @context.Item.Address + IP: @context.Item.IpAddress @@ -39,5 +40,5 @@ @code { - List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; + List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index de1ed5c..b905ed3 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -1,6 +1,7 @@ @page "/" @using Blazorise.Components; @using Elektrifikatsiya.Models; +@using System.Net @inject IVersionProvider VersionProvider @@ -69,8 +70,7 @@ //TODO: insert new event here if plug produces one List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; //TODO: insert new Device here if user adds one - List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; - + List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; //code for graph LineChart lineChart; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index dfa27db..4f9d13e 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -4,6 +4,7 @@ using Blazorise.Icons.Material; using Blazorise.Material; using Elektrifikatsiya.Database; +using Elektrifikatsiya.Models; using Elektrifikatsiya.Services; using Elektrifikatsiya.Services.Implementations; @@ -20,6 +21,7 @@ builder.Services.AddTransient() builder.Services.AddDbContext(options => options.UseSqlite("Data Source=./UserDatabase.sqlite")); builder.Services.AddDbContext((options) => options.UseSqlite("Data Source=./DeviceManagement.sqlite")); builder.Services.AddBootstrapProviders(); +builder.Services.AddHttpClient(); builder.Services.AddBlazorise(options => { options.Immediate = true; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index b659cf1..7cb9954 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -10,116 +10,123 @@ namespace Elektrifikatsiya.Services.Implementations; public class DeviceManagmentService : IDeviceManagmentService { - private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; - private readonly IDeviceStatusService deviceStatusService; - private readonly HttpClient httpClient; + private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; + private readonly IDeviceStatusService deviceStatusService; + private readonly IServiceScopeFactory serviceScopeFactory; + private readonly HttpClient httpClient; - public DeviceManagmentService(DeviceManagmentDatabaseContext deviceManagmentDatabaseContext, IDeviceStatusService deviceStatusService, HttpClient httpClient) - { - this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext; - this.deviceStatusService = deviceStatusService; - this.httpClient = httpClient; - } + public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, HttpClient httpClient) + { + this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext; + this.deviceStatusService = deviceStatusService; + this.httpClient = httpClient; + } - public Result GetDevice(string macAdress) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result GetDevice(string macAdress) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); + Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); - if (device is null) - { - return Result.Fail("Device does not exist!"); - } + if (device is null) + { + return Result.Fail("Device does not exist!"); + } - return device; - } + return device; + } - public Result> GetDevices() - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevices() + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.ToList(); - } + return getDevicesResult.Value.ToList(); + } - public Result> GetDevicesInRoom(string room) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevicesInRoom(string room) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.Where(d => d.Room == room).ToList(); - } + return getDevicesResult.Value.Where(d => d.Room == room).ToList(); + } - public Result> GetDevicesOfUser(int userId) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevicesOfUser(int userId) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); - } + return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); + } - public async Task> Register(IPAddress ip, User user, string? name = null, string room = "default") - { - ShellyResponse? shellyResponse = await httpClient.GetFromJsonAsync($"{ip}/shelly"); + public async Task> Register(IPAddress ip, User user, string? name = null, string room = "default") + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); - if(shellyResponse is null || shellyResponse.Type != "SHPLG-S") - { - return Result.Fail("Device is not a \"SHPLG-S\" or not reachable!"); - } + ShellyResponse? shellyResponse = await httpClient.GetFromJsonAsync($"{ip}/shelly"); - string mac = shellyResponse.Mac; + if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") + { + return Result.Fail("Device is not a \"SHPLG-S\" or not reachable!"); + } - if(PhysicalAddress.TryParse(mac, out _)) - { - return Result.Fail("Invalid mac address!"); - } + string mac = shellyResponse.Mac; - Device device = new Device(mac, name ?? mac, ip, user, room); + if (PhysicalAddress.TryParse(mac, out _)) + { + return Result.Fail("Invalid mac address!"); + } - deviceManagmentDatabaseContext.Add(device); - Result saveDatabaseChangesResult = await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync()); + Device device = new Device(mac, name ?? mac, ip, user, room); - Result trackDeviceResult = deviceStatusService.TrackDevice(device); + deviceManagmentDatabaseContext.Add(device); + Result saveDatabaseChangesResult = await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync()); - return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device); - } + Result trackDeviceResult = deviceStatusService.TrackDevice(device); - public async Task Unregister(string macAdress) - { - Result getDeviceResult = GetDevice(macAdress); + return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device); + } - if (getDeviceResult.IsFailed) - { - return getDeviceResult.ToResult(); - } + public async Task Unregister(string macAdress) + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); - Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); + Result getDeviceResult = GetDevice(macAdress); - if (untrackDeviceResult.IsFailed) - { - return untrackDeviceResult; - } + if (getDeviceResult.IsFailed) + { + return getDeviceResult.ToResult(); + } - deviceManagmentDatabaseContext.Remove(getDeviceResult.Value); + Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); - return await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync()); - } + if (untrackDeviceResult.IsFailed) + { + return untrackDeviceResult; + } + + deviceManagmentDatabaseContext.Remove(getDeviceResult.Value); + + return await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync()); + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs index 980826d..da74f9f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs @@ -10,19 +10,22 @@ public class UpdateService : IHostedService, IDisposable { private readonly ILogger logger; private readonly IDeviceStatusService deviceStatusService; - private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; + private readonly IServiceScopeFactory serviceScopeFactory; private Timer? timer = null; - public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, DeviceManagmentDatabaseContext deviceManagmentDatabaseContext) + public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, IServiceScopeFactory serviceScopeFactory) { this.logger = logger; this.deviceStatusService = deviceStatusService; - this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext; + this.serviceScopeFactory = serviceScopeFactory; } public async Task StartAsync(CancellationToken cancellationToken) { - logger.LogInformation("Starting update service..."); + IServiceScope serviceScope = serviceScopeFactory.CreateScope(); + DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = serviceScope.ServiceProvider.GetRequiredService(); + + logger.LogInformation("Starting update service..."); foreach (Device device in await deviceManagmentDatabaseContext.Devices.AsNoTracking().ToListAsync(cancellationToken)) { From bb2bfe014525a58a3489de34d79446caed71b553 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 1 Mar 2023 12:48:16 +0100 Subject: [PATCH 28/85] Addplug & Dashboard Minor adjustments in Dashboard and progress in Addplug --- .../Elektrifikatsiya/Pages/AddPlug.razor | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index 5c459ad..4f9b7d4 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -5,7 +5,7 @@ - + - + @context.Item.Name @@ -37,7 +37,7 @@ - + @@ -49,6 +49,16 @@ + +
+ + + + + + +
+
@code { List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; From 1410fbe5af497d4bb028acf525c5d9cf10f79af4 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Thu, 2 Mar 2023 16:42:13 +0100 Subject: [PATCH 29/85] AddPlug Progress AddPlug first prototype done + responsive --- .../Elektrifikatsiya/Pages/AddPlug.razor | 127 ++++++++++-------- .../Elektrifikatsiya/Pages/Dashboard.razor | 4 +- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 0 -> 32768 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 4 files changed, 75 insertions(+), 56 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index 4f9b7d4..fa1bb7a 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -2,63 +2,82 @@ @using Blazorise.Components; @using Elektrifikatsiya.Models; @inject IVersionProvider VersionProvider - - - - - - - Add plug via wifi - - - - - - - - - - @context.Item.Name - - - - - IP: @context.Item.Address - - - - - - - +
+ + + + + + + Add a plug via wifi + + + + + + + + + + IP: @context.Item.Address + + + + + + + + + + + + + + + + + + + + + Add a plug via IP + + + + +
+ + + +
+ +
+
+
- - +
+
+
- - -
- - - - - - -
-
+
@code { List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index de1ed5c..bc39728 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -12,7 +12,7 @@ ValueField="@((_)=>(""))" Mode="ListGroupMode.Static"> - + @@ -52,7 +52,7 @@ @context.Item.EventName @context.Item.Date
- @context.Item.Description + @context.Item.Description
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 Date: Thu, 2 Mar 2023 16:48:37 +0100 Subject: [PATCH 30/85] =?UTF-8?q?Device=20discovery=20and=20maybe=20adding?= =?UTF-8?q?=20devices=20=E2=95=AE(=E2=95=AF=E2=96=BD=E2=95=B0)=E2=95=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Elektrifikatsiya/Pages/AddPlug.razor | 26 ++- .../Elektrifikatsiya/Program.cs | 21 +- .../Properties/launchSettings.json | 2 +- .../Services/IDeviceManagmentService.cs | 6 +- .../Implementations/DeviceManagmentService.cs | 189 ++++++++++-------- .../Implementations/DeviceStatusService.cs | 11 +- .../Utilities/MdnsDiscovery.cs | 20 ++ 7 files changed, 168 insertions(+), 107 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index efabc58..c6e1f26 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -2,13 +2,18 @@ @using Blazorise.Components; @using Elektrifikatsiya.Models; @using System.Net +@using Elektrifikatsiya.Services +@using Elektrifikatsiya.Services.Implementations +@using Elektrifikatsiya.Utilities @inject IVersionProvider VersionProvider +@inject IDeviceManagmentService DeviceManagmentService +@inject IAuthenticationService AuthenticationService @@ -18,17 +23,17 @@ - @context.Item.Name + @context.Item - IP: @context.Item.IpAddress + IP: @context.Item - @@ -40,5 +45,14 @@ @code { - List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; + List ipAddresses = new List(); + + protected override async Task OnInitializedAsync() + { + MdnsDiscovery.OnDeviceFound += address => + { + ipAddresses.Add(address); + InvokeAsync(StateHasChanged); + }; + } } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 4f9d13e..3c21487 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -15,16 +15,20 @@ WebApplicationBuilder builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); +builder.Services.AddHttpContextAccessor(); builder.Services.AddHostedService(); builder.Services.AddSingleton(); builder.Services.AddTransient(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddDbContext(options => options.UseSqlite("Data Source=./UserDatabase.sqlite")); builder.Services.AddDbContext((options) => options.UseSqlite("Data Source=./DeviceManagement.sqlite")); builder.Services.AddBootstrapProviders(); builder.Services.AddHttpClient(); builder.Services.AddBlazorise(options => { - options.Immediate = true; + options.Immediate = true; }); AddBlazorise(builder.Services); @@ -34,9 +38,9 @@ WebApplication app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { - _ = app.UseExceptionHandler("/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - _ = app.UseHsts(); + _ = app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + _ = app.UseHsts(); } app.UseHttpsRedirection(); @@ -46,12 +50,11 @@ app.UseStaticFiles(); app.UseRouting(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); +app.MapControllers(); IServiceScope serviceScope = app.Services.GetRequiredService().CreateScope(); serviceScope.ServiceProvider.GetRequiredService().Database.EnsureCreated(); -app.MapControllers(); - AsyncServiceScope scope = app.Services.CreateAsyncScope(); scope.ServiceProvider.GetRequiredService().Database.EnsureCreated(); @@ -59,7 +62,7 @@ app.Run(); void AddBlazorise(IServiceCollection services) { - _ = services.AddBlazorise(); - _ = services.AddMaterialProviders(); - _ = services.AddMaterialIcons(); + _ = services.AddBlazorise(); + _ = services.AddMaterialProviders(); + _ = services.AddMaterialIcons(); } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json index 71c02c5..fe359ad 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json @@ -7,7 +7,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "https://localhost:7297;http://localhost:5255" + "applicationUrl": "https://localhost:56656;http://localhost:5255" }, "IIS Express": { "commandName": "IISExpress", diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs index bda0e67..764ee22 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs @@ -8,9 +8,9 @@ namespace Elektrifikatsiya.Services; public interface IDeviceManagmentService { - public Task> Register(IPAddress ip, User user, string? name = null, string room = "default"); + public Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default"); - public Task Unregister(string macAdress); + public Task UnregisterDevice(string macAdress); public Result GetDevice(string macAdress); @@ -19,4 +19,6 @@ public interface IDeviceManagmentService public Result> GetDevicesInRoom(string room); public Result> GetDevicesOfUser(int userId); + + public Task UpdateDevice(Device device); } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index 7cb9954..11937e6 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -10,123 +10,138 @@ namespace Elektrifikatsiya.Services.Implementations; public class DeviceManagmentService : IDeviceManagmentService { - private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; - private readonly IDeviceStatusService deviceStatusService; - private readonly IServiceScopeFactory serviceScopeFactory; - private readonly HttpClient httpClient; + private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; + private readonly IServiceScopeFactory serviceScopeFactory; + private readonly IDeviceStatusService deviceStatusService; + private readonly HttpClient httpClient; - public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, HttpClient httpClient) - { - this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext; - this.deviceStatusService = deviceStatusService; - this.httpClient = httpClient; - } + public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, HttpClient httpClient) + { + this.serviceScopeFactory = serviceScopeFactory; + this.deviceStatusService = deviceStatusService; + this.httpClient = httpClient; - public Result GetDevice(string macAdress) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + } - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + public Result GetDevice(string macAdress) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - if (device is null) - { - return Result.Fail("Device does not exist!"); - } + Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); - return device; - } + if (device is null) + { + return Result.Fail("Device does not exist!"); + } - public Result> GetDevices() - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + return device; + } - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + public Result> GetDevices() + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - return getDevicesResult.Value.ToList(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - public Result> GetDevicesInRoom(string room) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + return getDevicesResult.Value.ToList(); + } - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + public Result> GetDevicesInRoom(string room) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - return getDevicesResult.Value.Where(d => d.Room == room).ToList(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - public Result> GetDevicesOfUser(int userId) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + return getDevicesResult.Value.Where(d => d.Room == room).ToList(); + } - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + public Result> GetDevicesOfUser(int userId) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - public async Task> Register(IPAddress ip, User user, string? name = null, string room = "default") - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); + return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); + } - ShellyResponse? shellyResponse = await httpClient.GetFromJsonAsync($"{ip}/shelly"); + public async Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default") + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); - if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") - { - return Result.Fail("Device is not a \"SHPLG-S\" or not reachable!"); - } + ShellyResponse? shellyResponse = await httpClient.GetFromJsonAsync($"http://{ip}/shelly"); - string mac = shellyResponse.Mac; + if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") + { + return Result.Fail("Device is not reachable or not a \"SHPLG-S\"!"); + } - if (PhysicalAddress.TryParse(mac, out _)) - { - return Result.Fail("Invalid mac address!"); - } + string mac = shellyResponse.Mac; - Device device = new Device(mac, name ?? mac, ip, user, room); + if (!PhysicalAddress.TryParse(mac, out _)) + { + return Result.Fail("Invalid mac address!"); + } - deviceManagmentDatabaseContext.Add(device); - Result saveDatabaseChangesResult = await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync()); + Device device = new Device(mac, name ?? mac, ip, user, room); - Result trackDeviceResult = deviceStatusService.TrackDevice(device); + deviceManagmentDatabaseContext.Add(device); + Result saveDatabaseChangesResult = await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); - return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device); - } + Result trackDeviceResult = deviceStatusService.TrackDevice(device); - public async Task Unregister(string macAdress) - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); + return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device); + } + + public async Task UnregisterDevice(string macAdress) + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); Result getDeviceResult = GetDevice(macAdress); - if (getDeviceResult.IsFailed) - { - return getDeviceResult.ToResult(); - } + if (getDeviceResult.IsFailed) + { + return getDeviceResult.ToResult(); + } - Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); + Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); - if (untrackDeviceResult.IsFailed) - { - return untrackDeviceResult; - } + if (untrackDeviceResult.IsFailed) + { + return untrackDeviceResult; + } - deviceManagmentDatabaseContext.Remove(getDeviceResult.Value); + deviceManagmentDatabaseContext.Remove(getDeviceResult.Value); - return await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync()); - } + return await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); + } + + public async Task UpdateDevice(Device device) + { + Result result = deviceStatusService.UpdateDeviceStatus(device); + + if (result.IsFailed) + { + return result; + } + + deviceManagmentDatabaseContext.Update(device); + + return await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs index 3574cec..2e6e904 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs @@ -6,10 +6,15 @@ namespace Elektrifikatsiya.Services.Implementations; public class DeviceStatusService : IDeviceStatusService { - public event EventHandler? OnDeviceStatusChanged; + private readonly ILogger logger; + public event EventHandler? OnDeviceStatusChanged; private readonly Dictionary devices = new(); - + + public DeviceStatusService(ILogger logger) + { + this.logger = logger; + } public Result> GetDevices() { return devices.Values.ToList(); @@ -41,6 +46,8 @@ public class DeviceStatusService : IDeviceStatusService return Result.Fail("Device already tracked!"); } + logger.LogInformation("Tracking new Device {device}", device.IpAddress); + devices[device.MacAddress] = device; return Result.Ok(); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs new file mode 100644 index 0000000..8b9c46a --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs @@ -0,0 +1,20 @@ +using System.Net; +using FluentResults; +using Tmds.MDns; + +namespace Elektrifikatsiya.Utilities; + +public static class MdnsDiscovery +{ + public static event Action OnDeviceFound; + + static ServiceBrowser serviceBrowser = new ServiceBrowser(); + + static MdnsDiscovery() + { + serviceBrowser.StartBrowse("_http._tcp"); + serviceBrowser.ServiceAdded += (_, eventArgs) => OnDeviceFound?.Invoke(eventArgs.Announcement.Addresses.First()); + serviceBrowser.ServiceChanged += (_, eventArgs) => OnDeviceFound?.Invoke(eventArgs.Announcement.Addresses.First()); + serviceBrowser.ServiceRemoved += (_, eventArgs) => OnDeviceFound?.Invoke(eventArgs.Announcement.Addresses.First()); + } +} \ No newline at end of file From 2f906063e9efe9750d4e5b1256354e52add04e17 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:08:04 +0100 Subject: [PATCH 31/85] Improve MdnsDiscovery --- .../Elektrifikatsiya/Pages/AddPlug.razor | 3 +- .../Implementations/DeviceManagmentService.cs | 205 +++++++++--------- .../Utilities/MdnsDiscovery.cs | 17 +- 3 files changed, 121 insertions(+), 104 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index c6e1f26..8f84fef 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -47,8 +47,9 @@ @code { List ipAddresses = new List(); - protected override async Task OnInitializedAsync() + protected override void OnInitialized() { + ipAddresses.AddRange(MdnsDiscovery.GetChachedDevices()); MdnsDiscovery.OnDeviceFound += address => { ipAddresses.Add(address); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index 11937e6..5bbf350 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -10,138 +10,149 @@ namespace Elektrifikatsiya.Services.Implementations; public class DeviceManagmentService : IDeviceManagmentService { - private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; - private readonly IServiceScopeFactory serviceScopeFactory; - private readonly IDeviceStatusService deviceStatusService; - private readonly HttpClient httpClient; + private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; + private readonly IServiceScopeFactory serviceScopeFactory; + private readonly IDeviceStatusService deviceStatusService; + private readonly ILogger logger; + private readonly HttpClient httpClient; - public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, HttpClient httpClient) - { - this.serviceScopeFactory = serviceScopeFactory; - this.deviceStatusService = deviceStatusService; - this.httpClient = httpClient; + public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, ILogger logger, HttpClient httpClient) + { + this.serviceScopeFactory = serviceScopeFactory; + this.deviceStatusService = deviceStatusService; + this.logger = logger; + this.httpClient = httpClient; - } + } - public Result GetDevice(string macAdress) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result GetDevice(string macAdress) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); + Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); - if (device is null) - { - return Result.Fail("Device does not exist!"); - } + if (device is null) + { + return Result.Fail("Device does not exist!"); + } - return device; - } + return device; + } - public Result> GetDevices() - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevices() + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.ToList(); - } + return getDevicesResult.Value.ToList(); + } - public Result> GetDevicesInRoom(string room) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevicesInRoom(string room) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.Where(d => d.Room == room).ToList(); - } + return getDevicesResult.Value.Where(d => d.Room == room).ToList(); + } - public Result> GetDevicesOfUser(int userId) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevicesOfUser(int userId) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); - } + return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); + } - public async Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default") - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); + public async Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default") + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); - ShellyResponse? shellyResponse = await httpClient.GetFromJsonAsync($"http://{ip}/shelly"); + ShellyResponse? shellyResponse = null; - if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") - { - return Result.Fail("Device is not reachable or not a \"SHPLG-S\"!"); - } + try + { + shellyResponse = await httpClient.GetFromJsonAsync($"http://{ip}/shelly"); + } + catch (Exception ex) + { + logger.LogError("HTTP request failed! {message}", ex.Message); + } - string mac = shellyResponse.Mac; + if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") + { + return Result.Fail("Device is not reachable or not a \"SHPLG-S\"!"); + } - if (!PhysicalAddress.TryParse(mac, out _)) - { - return Result.Fail("Invalid mac address!"); - } + string mac = shellyResponse.Mac; - Device device = new Device(mac, name ?? mac, ip, user, room); + if (!PhysicalAddress.TryParse(mac, out _)) + { + return Result.Fail("Invalid mac address!"); + } - deviceManagmentDatabaseContext.Add(device); - Result saveDatabaseChangesResult = await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); + Device device = new Device(mac, name ?? mac, ip, user, room); - Result trackDeviceResult = deviceStatusService.TrackDevice(device); + _ = deviceManagmentDatabaseContext.Add(device); + Result saveDatabaseChangesResult = await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); - return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device); - } + Result trackDeviceResult = deviceStatusService.TrackDevice(device); - public async Task UnregisterDevice(string macAdress) - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); + return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device); + } + + public async Task UnregisterDevice(string macAdress) + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); Result getDeviceResult = GetDevice(macAdress); - if (getDeviceResult.IsFailed) - { - return getDeviceResult.ToResult(); - } + if (getDeviceResult.IsFailed) + { + return getDeviceResult.ToResult(); + } - Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); + Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); - if (untrackDeviceResult.IsFailed) - { - return untrackDeviceResult; - } + if (untrackDeviceResult.IsFailed) + { + return untrackDeviceResult; + } - deviceManagmentDatabaseContext.Remove(getDeviceResult.Value); + _ = deviceManagmentDatabaseContext.Remove(getDeviceResult.Value); - return await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); - } + return await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); + } - public async Task UpdateDevice(Device device) - { - Result result = deviceStatusService.UpdateDeviceStatus(device); + public async Task UpdateDevice(Device device) + { + Result result = deviceStatusService.UpdateDeviceStatus(device); - if (result.IsFailed) - { - return result; - } + if (result.IsFailed) + { + return result; + } - deviceManagmentDatabaseContext.Update(device); + _ = deviceManagmentDatabaseContext.Update(device); - return await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); - } + return await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs index 8b9c46a..55a8943 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs @@ -1,20 +1,25 @@ using System.Net; -using FluentResults; + using Tmds.MDns; namespace Elektrifikatsiya.Utilities; public static class MdnsDiscovery { - public static event Action OnDeviceFound; + public static event Action OnDeviceFound = null!; - static ServiceBrowser serviceBrowser = new ServiceBrowser(); + private static readonly ServiceBrowser serviceBrowser = new ServiceBrowser(); - static MdnsDiscovery() - { - serviceBrowser.StartBrowse("_http._tcp"); + static MdnsDiscovery() + { + serviceBrowser.StartBrowse("_http._tcp"); serviceBrowser.ServiceAdded += (_, eventArgs) => OnDeviceFound?.Invoke(eventArgs.Announcement.Addresses.First()); serviceBrowser.ServiceChanged += (_, eventArgs) => OnDeviceFound?.Invoke(eventArgs.Announcement.Addresses.First()); serviceBrowser.ServiceRemoved += (_, eventArgs) => OnDeviceFound?.Invoke(eventArgs.Announcement.Addresses.First()); } + + public static IEnumerable GetChachedDevices() + { + return serviceBrowser.Services.Select(s => s.Addresses.First()); + } } \ No newline at end of file From 814c0d9ca49dde81c2c3ed3ae77a52b2883ad563 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:10:22 +0100 Subject: [PATCH 32/85] Improve error handling in DeviceManagmentService --- .../Implementations/DeviceManagmentService.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index 5bbf350..34916e0 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -10,7 +10,6 @@ namespace Elektrifikatsiya.Services.Implementations; public class DeviceManagmentService : IDeviceManagmentService { - private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext; private readonly IServiceScopeFactory serviceScopeFactory; private readonly IDeviceStatusService deviceStatusService; private readonly ILogger logger; @@ -22,7 +21,6 @@ public class DeviceManagmentService : IDeviceManagmentService this.deviceStatusService = deviceStatusService; this.logger = logger; this.httpClient = httpClient; - } public Result GetDevice(string macAdress) @@ -113,9 +111,12 @@ public class DeviceManagmentService : IDeviceManagmentService _ = deviceManagmentDatabaseContext.Add(device); Result saveDatabaseChangesResult = await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); - Result trackDeviceResult = deviceStatusService.TrackDevice(device); + if (saveDatabaseChangesResult.IsFailed) + { + return saveDatabaseChangesResult; + } - return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device); + return deviceStatusService.TrackDevice(device); } public async Task UnregisterDevice(string macAdress) @@ -144,6 +145,9 @@ public class DeviceManagmentService : IDeviceManagmentService public async Task UpdateDevice(Device device) { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); + Result result = deviceStatusService.UpdateDeviceStatus(device); if (result.IsFailed) From 3f6e3a53ebe973bbc4cb063f9f76b2d57f6e6a5e Mon Sep 17 00:00:00 2001 From: Silence Date: Wed, 8 Mar 2023 08:45:00 +0100 Subject: [PATCH 33/85] Login Page --- src/Elektrifikatsiya/Elektrifikatsiya.sln | 2 +- .../Layouts/LoginLayout.razor | 18 +++++++++++ .../Elektrifikatsiya/Layouts/MainLayout.razor | 28 +++--------------- .../Elektrifikatsiya/Pages/Login.razor | 4 +++ .../wwwroot/Pictures/logo.png | Bin 0 -> 392255 bytes 5 files changed, 27 insertions(+), 25 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/Pictures/logo.png diff --git a/src/Elektrifikatsiya/Elektrifikatsiya.sln b/src/Elektrifikatsiya/Elektrifikatsiya.sln index 7b2638d..3941d6f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya.sln +++ b/src/Elektrifikatsiya/Elektrifikatsiya.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33205.214 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elektrifikatsiya", "Elektrifikatsiya\Elektrifikatsiya.csproj", "{B35B4694-ACC4-4CD6-9518-B338F30111A0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elektrifikatsiya", "Elektrifikatsiya\Elektrifikatsiya.csproj", "{B35B4694-ACC4-4CD6-9518-B338F30111A0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor new file mode 100644 index 0000000..2db01af --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor @@ -0,0 +1,18 @@ +@using System.Diagnostics; +@inherits LayoutComponentBase + + + + + + + + + + +@code { + private void Clicked() + { + Debug.WriteLine("Button was clicked!"); + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor index 7d66732..4b1c740 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor @@ -2,7 +2,7 @@ @inherits LayoutComponentBase -@if ( layoutType == "fixed-header" ) +@if (layoutType == "fixed-header") { @@ -11,29 +11,15 @@ - - - @Body } -else if ( layoutType == "fixed-header-footer-only" ) +else if (layoutType == "fixed-header-footer-only") { - - - @Body @@ -42,16 +28,10 @@ else if ( layoutType == "fixed-header-footer-only" ) } -else if ( layoutType == "sider-with-header-on-top" ) +else if (layoutType == "sider-with-header-on-top") { - - - + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor new file mode 100644 index 0000000..5c303a0 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor @@ -0,0 +1,4 @@ +@using System.Diagnostics; +@using Elektrifikatsiya.Layouts; +@page "/login" +@layout LoginLayout; \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/Pictures/logo.png b/src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/Pictures/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1904fe32cf61eda13d96b820bca3140afe9c5cc1 GIT binary patch literal 392255 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
hZaza4tj8P$j2lDz<9Ba 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°ClU~!~Cl@#caqa7MmqHjk%k7Qs0lA6Pa=T$-@YGpBat8fSZ@TyPOA&yCP0sHoJdZZ zE-W>oVHzScJ<$*dW2pBKKEX^UFYxEI+0)E-7M5D$Q|qL1C+{-6zUii?xLf;=m(Z== zRI(|w8SIUAsHbL+jO+Zt5?a~3RkKt1zX92=UR~S!n;Ze~REc+lsF&fJW-O>estcs4 z$L->}Dy*@vse6*c~8It?7{WA3j;hI%;fvKz7>p2C{M0 zYJ>}}xSF^C=_?DSwQ6q&01uX1oA+{RQ|ue3NzqFjMw31ocqyH2B3z#yLb$EISW*`7 zDqD-wmeB!sd45dszZ1ZG3<;MGK^c?e%}^$5=+iydO%wghfosP@Ov#7CR!CkSDOPCs zt1#wxb4$H@JyL*!h>*GSpM0GFi`Z;^nwMXT+-OLPWTFO2! zzug(-(-^fMJy-Z7tWiex!2+(aOrfzT_fkdSS{_?xu`zSQcrRl6`Q-hlki-Ej%YEaQb-x?Nz0?clLd#_ThCn?Fg zb>~u)WZ~K%Fc4Uv{_2P9##~Eyc80vVlN;>X3NDtsFmrFdYmr2-P5uQzRkoe8qm|V6 zkf$$6lUyU?*2;4w?Z2*D`shz)?>qm$>7zkDfCb!dvMs?Q zZ+9d>&93CYs606*5DI?F5fS#@MwVImk+7a(tyix!Xo6mgB8LHv7QR%|j4s~TKzI8mRBGbX zQbR0kZ`Kl!XEJa})2h&GlFv`B5xEvD?VHx!pTCnxT7`f8W>YTzxq%{~cHt8#0ITy> zzyqEps8V++bs^v9pzMM*Hsx&{=@5!*E|8#~LI9jzpsZmn+WXCs!bO8Z0DyL<*}-PZ zx7r(&V{1N$@8lZ*Jr~L10D>%})ek9Q0bfrl4qd#PbJJ_lTF4dNpy`Z!dD65o*AQ8e zJ??pQ=zteNTa%EySe@Wuv(`RdK%R@gO^2X~Eeq6`epE)d8J?~guwBf%^Zs z0F9&$l{>{?AuD;19svXbirbIKX&awj>v_5P3mzgX1&f1^Zhi9zc{R5~f%LGBI?NE> z@*DP(ts22!3U>_BxQhf~gsf$s$8nkY$a97#PoiG1Mc&Fo<7*LSU{M6OKHgHi^=tfM zNprVFwXVB#WE&62d=>7q4*-Sx**zFd2tscVj-w+`?0<+`!KO_JWK1Wj;JK3wj`(EC zoe?Ls9CNkKNVA@*&fAC5F-W#_{;f-{_HrSzV3>C1&uRSx5&)NuJb;~Lv|RU9%|4fl zN-QUwl7g7DZfUz|oP7Mh^Wg>>1{hOMSx>XPKuucz1u-rq3maXK`-i=_I@upJf_@B& zW_kn3SySr!OB2*A;hynST5^)!;cHU`F{AMe%FE{_>Vf_TEVGK>52OQ-MmSv7$^P)e z@O~2vLRfAG#Y9d7dHu`gzsMsR&JH$F=xJoGZw}tTBi@KB z_EqX6=}&roh9b&h4v%?&Ng~!GK1OCSce7JE?WxF_;7;Fm4(|B#EoawE)tyh@7!jT1 zA>~m?GOsR3zAUf!pwK@zB@yCD_6rgXPq|#0Eml|?3@EHjkp=DftGtWG4l`wL0V${4 z4}Odmrlvj`=x-FU0uxoTQ`eq)Rde8pl}5{l#2=H(Y|J%A4^|9ShwiATGFU5~RN58J zc589ibmte{c>QrAOzrDQJsM=r^}1PQFIvmz#jc0b`+WKHP0ZG*_y#)s?xR9ob1mvE zzD<&(v1RXLPcFfRT#Su64A?yJS@yzfY6j7ly>5MS&q;c^gNhl(08{NRQgT1<34Vl=WWl|0Mn3w{wjSQ zZf4x|o|b7~nrqqY8NlO3`l{~@a_`aMmG3{iv-`Xw>Vq;L*7cGU-YgWTh0?OZ?LYn` z{cZ~j_h%F>#l+WGU!BF$uZl+Swho zT%sRpgHV1CYSI(KS%kmzg z6I7;s{SEd8l!eiHs3vmY>T*VXz&;A!tnu(r{1#62u43g6fx`4&AEY4rA=juhj;g zUYRrta>`Dx1nbVRaAF>WcJ7)lfJI<7`1Pe0MZ|waU}+Xa+Gnc-*3D6jh8SGu50VInJl9=u@i$=FVD*iM518=0&x<3r4BX_^J+x@qRGP{S9qg2L0* zF*N?jX^5SyvR31@(Z6JGoLg6sT6mE+njP!Jh_N%g?+g^svI)p6tmeir_HRSSdZo2^ zfE0P(o1n-ls<-LVXnR^A+8_wEIO3M^!3dcZewC5hc1?G7m+v?2a;xDoPt@vFMugxP z%)<##oTM_j&6dLq>If9`#JyO1MwSmlsYj2x+9)4Z*=Fx!q%HEjW8BTt2AL;py6k!xMH3o+BWMtiP&pObui<^RgjYKw$E-Bw- zy@vP%-fQy9SS&e#h0A_@Ms?WHt;>7k3tuc%>^*5J_61~b@|wv$e6#%oNw~_=)qh`u z&M%QH&mx?p0>0Bk2hl1Fzqm1of3=Ij6cFrvuVf1(c)#ty^ANIOS z`=TDUr|ny_{ZbNp*7|<;_3s&tX_uJc}*o{(;5Li*+IYC48GxJe%PCXS);Y zq8Z>6`^v@4N+! z32mMysiG4|%6YrzGjSt!0NRaTr`}eBmj0C;QsJ;#J4?Yk?~@!ng6a4>{QDMM(!CJl zeLHtL1L0-~3wmGt6>|H&E{HYN zI{sJ`yt#3B;;ixk=1JhoNkq^X_QPFy6Ie}UXF#i};RVa+HkCmIIZ2|8TQJ4n;;t+IGhqL#lR%B9j1uuhq5vhVc#LrV#FhC!N0rQ~K_-adFP%WL+1xV<06>tki^aJ&9Lvk!wB;9HW#f`22cHa@-euzrpe6y@zu8K1|3iRq z$S@D&{fpddQhs(88)C%)pr>9N{6n$c>;P18eG-%+2ZZh*C-a1WOg6=+wm2(hHobTV zz=o|wPO1<4B-tNKdMvCwn#b2^i42=~xsysuD@-CLF8vEPr~nRYq`F&-HFx)pmkk@6bPL&AP%?->`5CHGLN96Hz2>qlW&@_lICbhXHEgpKQs{ zA!lV;5Zd1wJ?iIW+ZK30e6DN;wBS*f_G_r#eQV*nte9NJ&%rEKM8;v;JTG4O#y`@^ zfU+v14v}2SnbVgZ-W#xAJCf6hur?!mIaErAlFXFTi;n+up{-k6U6AKz0eU~0Bx1Z(Ha+zp?RRcRc4EKg zr|1)0lbM?SB1at6+un7)jVd`Hd17q_lnnGAEE8nuK)8P)X|&M?5ic;pKs=M{)RpL9 zi`2>M_OuWheMT$QYvtZ+E}A?uuS<{k%jqg)tJ1I;y5=18F}S9FT#6y+SAcxPSM`I* zyHUJ>AThSCtD94y*-ipNvfBegCSI_e%K&oPB7)M5YL zawo|=gqm6X^BN+xfu)qdxl!TawB{l3(EBqeXhC8(D7?!wYpxz|wamMr#J4Jeb*`2j z-9!OssLmU`T$FFyriVU{ozn&KLe%a5a7yGLA+?sOwlI?`?jOs#wrka<3wc3gr%R$} zU%2f;t7Ly3>z#9g>8*RQ1admpUT+e!P8sP3q&row>Z$BxsX}62DAIP0+bm@oKm5Nl zSRwBn1Y!iO#}c21_80y~XZ74`_5jg>nUE;_JRS#C@lPY>U9+eQ;Y#cd>ZR{0tUrpW z;Q$CHro)S6%!UBBu0;Vr7PoRfs=G!vDl?%L!?6Rhgj1OGI;6M7VK%Q9{qz8I`c1xG zWTFer2UdK-Q>nu*XN1q(#6}qOh;_ipH0q{*S?UDq@0rQnDawVEbyG#^hifvRAO4g! zSko0HGt1PHtv2u54Y57l5CTXQHQyMwD;fyK;@`dq?aXD)nWNsdx`4M`-jc{rP?<4T z=4c4#lo-|vZFmkagqrc9@lNgCXJ6k8DPW|BO>jW^Pq)pD13+oy`AirdaA(!V{33sf2VHa+)(IWn20rk) z+gs@W8lZ;yf*~T-N>?)so;sMwDlhs}e_ExdY@|fBN3`0>FCqCZF7|J7gN9Cq-G^HJ z=q;tuS*)*)-~i&;Dk?glA$g^dy(AYzMPHw3Ht)Gx*sSkm&9-=lwoE}sEo^v!f`@H> zm($Z%qTA~t=wH9N`}F66)3&k1Jcd5o!p5WCub z;|@bDuP3L?t|!k%z6alSOJGOJE6Xajk^<2Gb{6lU=){yF#%-)q-<{MWcCu6v;IQn% zG5pC|?1~lb&(vS(!ab!xrbyZ*ow_Ler`vouEUO%9V}Q^q_ks(UMi-gk7s%ijc!uoa zEeWOT@Ar9Mb|L%Esx%FNiRbvCF`CvJ##b57(+|ju$acT(1cP;PE`LV-H1NZVoK&x3 zjLIiiQA(6FhQdI(9(I=UaRa0yO2LYwQLOQdl7rI zN)bwx&-2I39VEL=_lJj9w#RtJ1vz^mYtyJ;&f3dA7{{b2zbdj3Ir0#*@S)=^?(H@T znF*`rxB&*!VN5U?!y}fq)4i(EdB6G*z4HBSX8OovgYal))_xLZNoX&^A^YPr0Z<@Y z@aG-@!1vo#<7hiA2i5!}{kn#gG*|R`Fc$K#1x^H%OphL-CZ$=A&W0Nk1|%%0s~gmL zW2Gv8Jz6tUD)q4siG}D%;O__Ul8B7E#9Mm2ou^d_-(Wi^LHxcXW=yuO4R$+Og^X) zhpp;WD)@5cz66EY&GwBsrCPMn5gFbGS{AeiLuJN4cge=fF2bhn84DYffNnY1-N!ax zt~z$-+(N%iK?6yQpa4Zvn)OMDF`#q;Z7J(}gIP!uR~>uC{O2^@-{W92+S>C1&Nv>f zGr#vWgg!OcBM0|1+=WLKDGg2kN^7@pCd6Qd6arjsX7}Z@M=@zv_h5)#rT|et?_DJVAt6Bd4M|>T>(bF1 zs@R2&UK;p=C7J1)G(N{fSj$nH!o|zGE+`IGr(H=3z|$PVt)U2k0mB|(vXFWz_u~5j zWHHOs#`KZiQL_DM|CZEc=U!XWzPRFm583{(x34kaefgBRAjjKX(&RG>!AC#$xc)n$ z7fM%K@F#NNp_;iZs{6!m^okEOPft5&mA(*;?{QdSNL-EtzTX@7yqY3}e|w8?7btXd zYfm(_HN21y2Br^2JXI!4;N5S1o+ZD!sxtzg?L$qA6#~3<{Z($9c}E<)AP?`vBW}NR zFH&sx(L5bL`j}ReP6PEj=O#C)7`q|Z;_{pE!b@A83DBEMEdyrC&eGcEejmI8UK~a* zvpkoDdh}l<{k->KD77{}-IMA(cFyhi#^-TN_^Evrxm;A1&zBC_Q%1Wpsh|x zNoyj{^=JtrIA}czI{#hEGma~P8i{ddPQdjrZ)Bik@n^q*4J|r7QPyp}neJ=aQ0c|h zN2Z(RXBo{hTeUmQrf0_a_1{{X%@zs?!NlG3O$a(zxJkO?5+Ab%L4WOLNoB8^2GDBfS;JuE;T$|w90>!oLQONy(!>AwLzAb@I@~jJP zGi?}L4ZlWdaIiMZ3qB&@OALt&Y8X8AByN97(!)y@v*gJQ<&9dM*PEw>>OCyYxWWgO zYoD*;e?fF;0iFtlcq|oApi!j*S>WbKG%VX=ij`<>ea?|78^ZxYO5J%E0y$ml=)Yc_ zCa^+noewYLYZD}s9_mN6YKh9R#M*aBKML0y5wxvO^lspZPk@K{Gc?!9Hk@n*Z_Ky6 z+N}^Q2&!MSW#X?3r*omqt0Qu7Q<8?TXOtCJ3Ghagb$rr(ot>|Tea5nV<-+`(UzbtM-srEj zt!C!-QJF}PyF1Qb+q9nlt=a#~{a?)(b>{y~P}TAup@ysR@Mpf}!YS+>(ObvZO+H5e7OwPyGRPo6Q^A3NsqL&8GPHA9oRsGKKXR zr#}+)e|$B@RzrZBSsrZ7HlF67IJtdvFqKH1i*qc;yw`2=*QcdX3c}jlFI~ii_j!b7 zfHmd_|J`hD9K)*E?0;Dw;9+6LiDIS@= z(dieWI`R?qkKqR1dmKMq=ycYPnV@@m3X&SDQY>#MwS4h~= z*KcDDjnQyn7$D3D1wNX^fT7~Z9>^%dJg~){MWJh#r|YIENKXLsG#)Z2H`V8jc`=~?LD&r zG{SF`;BI~V28&uvrerJfl^90MBk%uSggObJvDtCUQOD(o#9~&!jkc|9AW@<0qCwi9vk?Ie^&ct58nL(L60Codp4UX zmFk)Yq&X85ixdQUH`L$U!(L8j+>rHUgps*yiI7W|J5O&pOEER59(d?6&c_V6sb7o> zYn;i|K2fF4HLT3lbrX37;P<^{MER|NBdzqq!_#h2AhIa0zwQoq50|F7@vS|6D6lqv zIYUQ{ewzKXZTc7cPcYQMru8Vjkt3<$Q$O2dM#dtpGEB)837mC7TZ`)E=lx;%_y%7B z^}!a%)ykvRndJ#$3wY>rW}1iMw4_V^TpytNzVLr^g}@1CT{8MU6kz;4J2HX;sc8O> zsxJGR{x5FoN$_8%;Hv*gSSOm88)A5XTD@ibFYcI>BJw)~)G(_Fe3Qz>!)a9boBSK5 zcje=YKjk|0Sxh<}IHz5r_>NJgY){!_tSa}5GH}dg`f^iR6v4!b2cM1v6^jq8MPeVS zoo)og9lsk&`Dm?13^c`MiH8Z`qYXRnF`|h$deT6inlrGF$4F+(Yi41yx#M0$scVf2pL$89bVZe{Jjl< zuJo8|@XXogd9|NTH-0!B&s(12kEAI3sl%feuAn&j4dE(KjPXn3xXI4Ap?iKs{BoBp z;5m%npCRdAYc-6UTJ?j0hw_Qz-2mR{x9^oxuhm*T7y-p!Chd5`#b)({$(jUrG>F2m zw1^U8V(O}+eBbk|#oMBT=>sQ{3(CaQD~6D#SI*R?-yHgQCOUW|IvgO6%t9#ci;Gh3Rz8GVKiWPpe zWJ&bcB`jJQ>Ss+Tc)^3;D@GyrM(P`E{HP%w7`i6Bk8gt-xOFnSU5C#ZjM_b!{j&}# zHFEzq$d+s=IjHXm1Fa-l=Fiw)PssULH&?~%H={aZP-i%{n{(@t?U_|>b*&c=UA7|n zB|p+JPw8>-Uhpd!_)VhTEX5Pt2@(|X=O=W@fb^^VG<@!(_3wg!qRIKt@O78)(t%@S z=SL{I1n0w}2qj{V-}oMD@6G9o_nbiK2y`iEiLd#B{i4^MN9d?46e?xID;)rc2ZV@Oi_McKsKxA4-v$4fRYv&|l|N#!J(=2D5JbIFx$&)4Y7b-L_QPsM zCLVtOb@rOkv$}F)AmN7SgCr^E78kUHn#leP22Bt65{b zMLrff(ekPRg)h3xxqc}-B6076a?F~?`-a1euho$e1%r5Y`B%%Dx@hk&!G9EQ zknu&nji5bN@%wO)A7)TNZrG^uZS)LprRtoeCitVA{Y}$U8KCgL7OQY2< z5}P6I$zch79ymG)g>&_Q*}GC+G^txv6Zwa(PqceqK9{1^BYGbRNm;w``SVcFa@4@6 zB@Sm zwz{-RVdsXxSCbE?x5F`bc*AJ)E5i-|(Vb5V92efV_u6JWZy~fEXfv0Btxp_D;igak zxg1HYuKl#>K7AhCUF3F_LBIy%W6MDRxJ#NA@q<-V*lcrVQYvtYfb;dBp{pwL3K6TR zmdf4~>N@{Da_-+Plgg0D6PLY?O{v+?l#KrR*b5~bG+dvT znmld>TLb5t8m8ra2lb}(i{%S_*oP^aArR#FfI8+&eakw=s>qpdZSX^iA$Q$w#9Ffr zs!74tZO|IdPRW|vF-l`}I5%8xxW5JuzJ9jo1T)u~f1@LlCgf0)rUbH7z1H;TJ{z=x>0%IJe*>OT&CF=qsI%p(!F14Yxpo&x*l)7vncwy(cb`eTp0R`Q)sFZ6ruB4*s9#oy51BeAYZ z%c!h#8jWhvVdq1GM_UE4PpUk1D(_o*h?oDi|slt-V8u z+^4ohJkBYh9LVXIv7c{E#-HgwshEa{F+e79FK{vUZ3F3(L7yG_sG2Y!Qya z;6~nzP9P&gb3H=y@4a9traz@~rPP_V3Ol3SA3Z?Dy#@(m08r4YQ1SdM6au6NEEuW71am*;Rys`V&C_>OF=(J zsAA?-2eOK^>D@m!E0WhlTipU!_h=2>0yuJH^4J`J-aiG#q`6o>2vGZVCf1}d5M;l0 zTInK2)0@=>`6Fo5kZqB2DTDzrbJo(WwwZ~XKx;#NEd=P5F}lH*Aq7^}=a;e!Y*bDu zsgvZRdzYer6OaPKW^3L#P(Uc);l<6%PwPtujqP9T)-NUD?$3+{8Asi=kP@A zph~Fr28%#_+NBW2y9msR0^Y|(B z8q7USDR{yIQ;aaMhXBoT?7YHimrJw)U(Rj^A%{)*J8QZZnVVy~xNr!Pbt~A~5Fnf= zS4O9k^fF1$;8V30ybcZ+HR=#j0z%h!r#;>?tz7WbV1|qz-M`mrb3*VfL%wa{)X5BU z=+Y2jp?C14c1FOm3D);d7#1-$^J{WhxGY?5^sP+0N2PP>+Dl8}Ba8B{Bo%7MdVI1F zjhN~7jgnU+;ksaIPv9d1xYW78U6^5NtKDsgEkw@-Ma#;XNNj&E@H-=569P7}wV7XL zlxPTA2Nl$!RmToCuc-mF>ap%+Bpa{Zpj^IT`E{D26JoL|yGGAv-G=3g9^B?b`W2Ft zq$1q^D8jvW@qvPytdiS$BwQ9DnpcWxdRI08lit)o!V)qzhZX`suWU5O?w@Ir6?On6yZFPDGe)WP!VCg1Kv zQX!(wo35gPWV+;CCvyFQ5>@~Q?l|CHd{eolx^!E2;6G8@Yh(x*FE~kc+i*}Yk(F4G zvjZ4j#cAc+@K!TbE7-;u#Sf|sxfibU7X@D43)qfQco}@Th4#P2rXR@^k4;$qRBKQ5 zPNT+4rJS27YK@h!=swZPO^cqtUmYL7D*gKq<;A^R7125$N&L6kcgu$lbwDmrc|(4B zddqQ1HnUoCc>l6$M?PJJoVl9k702_#Ds8J4d4FnPK^vsav!ZLi33+!OyqyU{k}#gc zi;$uZ7|)+U03VO#&kw;gSh(mLycO9gM|8NCF0(=_LH#x6D&vj z-%2Q=IvDKn?8DiBf>`vPZ=^%dV);W}feDAlgw64bLOT~MegHZuYu5{ZaJNhDJs|W! zGzs~D%~ic^*LMLViCtf=H=K506!(t&ZO(R!3JHt`X{kQFcSf!7PE-&;)jr_T2d~E) zKZBfzujSNgcriYgeZc{f*tSc&3&66`v7K8R%|;e+m;;vKps`cz=tJ?iuez&P^9Gz| z>2*=G%Gf~{)$2cXqU5U4%AYkaUC@u4Ty z&P{^iVZXM!mdm68_Xw5@T$8W$^k_jsz<)s>TlNCDP{5@&^{--=wA6Fd+&WgoO?7qaljY5c7h9 zi7R|p+H7bmd*OvW=h%vd@_4a~-vd^m#&zfzM&r7)<(-y{<%jkv(iP~jPMq>)b`eCy zclQx3c@*Py(F5(q2fw&EHOAmN^`)1vPaP}|l-eIIq^hN!Y1NSidHiNnmx^JL6l#U$ zL~(g-V6!u&ujsMoQkQ@ELb6$93<(S>HM_m>6rLIJDm(*}d9Jhmq%H&|)^ez-yexZ& zfT6>(d4V|jPUaFo>-FmfpT6o3%zb@ zr4`2T5AS06P1Rrfx=XNd--c-sHT*fq*~SkX2E|~ccZvJ*;rbKdUw<($w9Z>TINNpj zEYO@h=Ca3bc}=CBbGvp-#?_vL99=RkpBfuz&Dgd$7--e|vW<;#MfZDLQ$WVni5Dx$&Gr!^}J}p5f z@AbMEtyB~o{ZrrP@E&KH{-C}>OS&V={6z8+Ms&qtQLU0}T6{0{sk^y^`Uy;G!{W$U zKt85peNJ(?vk%TtI&v@#=c6br+;^fyiv4wUNEj`yw$LPm+or-luKGw@WvP6`NqKIY zmtp!=ExB>|Kq{zXbWJKho5TDEAze>Poa7o?{P%uDE(h%Z)l$L_niLO1UdLI5CXowiHiLA5NR#^Lx=i|Tk0I@ttYPHW} zHnGQlp@d{W&x6GFHtK~hY!g4?c4R^KzQ)KV(=f7faLTG5{#Gx%b?*6$dD+_q66@QR zq+qDP-ubY+s+?f@b@^M*PE+-2ehOid&CNyuuMKevRvKYR*WFjKR+?`TuVA1gwC_Eh zt0VK!gL8bl5xW;M72$7a25$bKj!1!MV|Hje_jhfn_}J;h9EML!+=49t@cxb1`{O6( z@v4DufTQhVH;_H|9tEfD(YrCU31@VN9!RZ51Bd{)5d*k8|9rtUB6Yzz)s1=i(Tj9C zyn7Hubx(kfXS?TkYGu2jvi#8%5uiq{5Vzg_uj4BL?fH|<}Y{9ax_MzC%L$(bg_`%~916Phw2z0&o@#P3_X{ER2Vzd;8++=?6D zHCEj-!=q@?qs<_+v)2h=^`lyl!BWaR{DVug9Di}aSvE7NE75J#GCwAQ{?Q_mATEtM zi1Nmi15{0YpzMY*wckwc3xV9sLHsF?!7KHalt(_UN4oc)k?+>>0JqvI-r4`8SUMDm z#P4on@0E{1oe*iud2$fHB?Qct5+T4R0@lmLqB-4sgtqEG#Gm$Mvw$Ur|3pl!OKPp} z)DbdOKd7PONV1^HO?Qx|wE=?w4M`zt%xb@m8^-ra|BYu)u*dy0nDzO4cbHtF{7at@ zmy__edz%T{%R%~}t?_E#b)U}yq3DX~{MHkXLgcJ+->hQsNQC+z>SwjRx^BeVc;hS0 z`AAirXI9U>)%*z{0nBV4{J)bdxBhEMaprUW2Iww)XIK1v@0`>-FJ2_u*g-0uz4*oa zW@(YubDaWDqerw{V>2F)$5=IEG(oua^y)Mz__qbYaCkIL0x6XLnS-rWEpR19CmF)BcAZ) z5NJ!!5PCFwAP^w!EB?eexd|D8PHrA4ThA^zd6DN_m-;XdBi1e)vc_%U)Cffjk?=ee zEw~@{cth{$OG?^eTAkr2(TUc-9ydgN3YQF|^1&2-PWbLK>RKmpn%DWg$UtJ@5!{oE zBU}t9uH{&-Cwo)PdoGYB^O4l~DM9ZriGzkOrV6b?9b&hIJxI%d@O?A84G8@}%~?6z zz`B11#2n-{h{Z^yP0M_zFqNh?mJTr};}1ru>=+(b-xJe%03$tNlE{?J_N&^Yv zXxE~cM8%$Z)82~5s7l<$M{~DOJ>&e28Bh?mR6RwWCvtfmPVU+4ZhAlxXn>}~p68x_ zk{N$%z}$Y`U7IJ`=n~k`ORo-+{~h}O(R5Z}QT=b%-!nslbayBz-92sK6!9_hGj(~Q>cHx$9VpSw*S0j z@v$+EYDk~H7?((azb&y^x~ZJ-mp>G52e_XWs^p1{R!`Yo zdUP%|#|~{$3WrXhFn=??Aq^3Uoq4{VkJixoj$_+!wsGuZa$Z$_V64>s49CcCGDSkL7cmLGfor8!F_j)sdyi7y?wZCiXwMH z6$eUG9?C4-l@z7=`3WaO0bhSCU|GeT8kzq~jXY0s8`*sQ$ODB^o4Ma&>S#NEwC@=k z13T%A&J5LAIdkj&7B^yo<4%|Nkrcrm|Gic^tu@AJU|@G1-&p);nNa15NeW;l(lf#) z9z>=+zfEmJ6qcLql%O!#0nH1;^Ukj^>4%`#=qTZtn{yWGLsz2A({cziYp7ItDG$)6 zPE!7+Q0B~m2===(I~1=Z=a#IFF9`I15!en3z_NH=bQ5Zq{rE?a&`*U*{xG?)=#Rnl z2(%02bicAqBX;Z&*jA8~?GAt9n|74zbE-9eeP%;aX$5WID{!y0Rdvr>Ia|?VPMKFCqQQ7sCT`OH0T37#tVp4-qt$I(bO{m0J9dUxg65x@`6u$=5zFpL|tU_g@q)H zh)I4QseX7T!VuoDq3rXjF2C1m78a)0NnCxa72=Z;QE(CvP1(69mTVqpZcle2f zTPwRl8eG^s<(Vge{9QVI4ev89|D2Pn9ZQI%_&fI~y-}%=pLml$-+A7V2G9-8ED|pN z$x&Oo`s%_MLK|LB5U^}=@f8GJ!Hv{}LS^&btgdDjQq|M-T+9g-P8G#3@3!KA|NAb2@-L@;B z{oA{>FZp;J4MV(gId7P1x0x(6b}78ho?E60+A!5a=$h_ zMAe^)sZh`WU7*)lmJzTe(PfZb$MI8uA*k-&lPT4mvIqH-Oy!jbT+U=joS||6A6;PT zvArKDCw~^}NPN8Jmg~qhc|tf0a154#WQkr|ycF0`(kCuhNgN3HQ2G-ZdH`C<7JIXF zLn9Xt5=Q7Pdq2!7k00i(=u?n+qqrJvLVOO}Vw4w_IIn95LapQE?SPr?I^stmFrcqh z0~7FA&`ujXPw*lD79J-M0*SPo?aLJPsDBubq~hTif-|M04VvQ{YH@bZ9*MW|e43q3 z1gC)N_vi8RmW5^L^$Lr5|8yq@2qbLd@Ns94U{h3fSLe>l4)Y+Aq*wGAZJhw5-J-S` z$Cud)Xi77T$i_g?Lm}P&UW!0D-H^My9g9~O9kU$U--2Uw{OJ~6GYW&l_1;Y5@{n94 zu{#zM!Fjt&6gXY_;o2~@=R7{Hmh1+_{G5R4!zHc%pj7Zkb$v-_GleiU-tRDh4ROT6E0iu8WL!*b46F~u+`2aAL%lU6c6A8=EpA|f z03b~m5GIf5vO6J1fCU7*)kG>47o>oIzkOzq7p1{~0KEKc72(MCe&?Q)z9E;@!uvj} z%Y{CeGAbtoKMwyTP^-%lzeU{5N1xyw&Bc+`^Qk{8qzPmuO4lG+`p;f9EayfI%|39O zzoFJTLSuygWa>J!{MBOKW&bty-EL>S!#6!>{uM_N^RGk2pOp0>UhD56wp#|HWV}Es zCJ;@kyF=4+Elz%4r?%;H{3|Tjmj+n3-Qq&AK@eUrb5l}*2M*on-;y6xk+0u{e(93G zAx(iYuMG!bR1bzY?$eUMDenr5B>9LmfOnBi-=l3eWprfDZ;|sn2!FymPs#;=x;t2- zip)PpfglegJcr!OeQz>|bia0)h3OdP^@X17`v*)1pnk<&)^&KTf^FUzTPG>U}%O`pDa&v^s`9^iC;>j)5h^@ol;Y zrmeb(X9`Rr5)0UJc&2Ei^lI_d=jzd6b^KqbPouP0JNdO=R@>SEL{QtUCtk0>a#GyL zQ3xKK0x6_nlM?(O*oJ>4>L#t9Xlm$@A*vREfH33Xt!lGPIj}d7U=l*Ns3%6Lyw=NJ z+8?6!stIj?7RiX?ryDs8IEOFK+R5qH$t(6Ca@NIL|4%eQndf3I`jn6j_+SDo~qQ%w6K3T;kB zt)#JiXL4|11Ix!w99tdaLV5oieYl?`01Wgdcv<%*wR|-Mw1522Uwi9Z6hjU)IBi~g zpPF`rZH=b9s^SePH)75`(!E=2%`beT8HCYD6p4)~DKTK_bUaTo(yjREX+CO$2B zF!veLykt4+hWks2wbICI$~zYlh3!rv2aM(z0H%AkPr%42LI00q%ci5ofw*Csy(qK- z%98^OwkvGSz8r1!!5y__$m$TA$m_Muxt9f{0{7CtX~fbTke?loxIce}yQhAyav__b z1(Jua&q=Ue`eaoD*Hjb9$Sg>MlWi*2gBQsqy$}d}vJz)10mKISF*d{;5lFtcszM)pNHi*QE>xkEP(USa*J%Dx{I`rf zbN+YL4`J!b-4RwN)h+-v_NauA-7?!*pk4^J#h}*H)*HxF8%lg;E^X!PTYe-(-Mna% zAJr!^WR22Hih)8r?f6aPw?Fn_wD3{Tm7lALUr{E&2&jMM+_rrEhyYj%DK-uy6+o9BFHh=;rz0l)@F3NpPib>tZ< zB0&s>FxfDl&{e}7FDEloMf5A_lyyILb(W0IlvMs>cpTpz(M8o3f6;G>_$&+$B(Ymh zIeHt}FfWcEU|Jnzk8jVcwcUuk)qg!#0y7+H&(H0SsIy4k=C7 zg}Nr}&znFX>eRvO%vo4~x^6l)^$9`#9Y}r33C00Rxlb+16fN1ksMzA8l?*xo&O*TP zfE$3DcP3{&2$=jwT?pfHcchF{(#?Id`KpwSzo39Gmu|@C6#$)7fq%^7j ztv5>_dqLb@g5NEUkY=(y7|*d^8}t`wdW9)`49PLTL4-|5NO_T*^50?q&c5@nZo!W} z=*q-%G{B1)4Q+n@2Y6k_kQjBh1M-FJUao}S1sTEs)GqaD{M;TM;55CM^=ypv75VKp>*6I z*mSYh9*(}3@0e?OFLCJY_U<ZE4ZMAMZZsK-4e$Vxo)Ml-N~lbKV0cFaf7w{*;-0 z;);Mg(;{{9x%|@a)!`&oGb&42*>0!C9KQX0Ay}0bENg^y)i~4|g1(j39Iany zBv5B-j?X*Sn%?jgkVbn~(Z_B%x-sE2!$au?#lLxWhi;7V+qql5oof$!<4opbjUB%b zwh>Wn)R$yL8bGGDxE>VCK#CXm_{VLTeOq>wh&mYK4atqks*4E)x8uLV)-8PxNjVyJ z&smEAf4O#|dR;p&0U0@NIAV-$0^U1A06SgZAygSPvBKjBmf!H+AICvAg_!=T=H$&& zpL8og_Gt`I4;ZY|0K;_f`=X=RF{KaD9Ovxu_l9k4c8i=k5YNpaq;(MEP*U28I6wG~ zKW2+e{K`CX-|!3)k*T;PA^0U*v5OJeVa41W?y|#BVR=L4W_|sjWs$prFfJUj%KU6f zcO*MJc+-jgeij{e@%JV4LZkb6c9njR^FW~Hm}Pl@>12>zee3hKbTOzo7_hu8a1V36 z-LkfLIeXu}l=HIcz<*>|UJwu{^p$p^`IJRnP2gAsrQwF$jL~u0WcKA5S5*%@nwpVT z|HNxtLftO4!n+Zr>yKX3WRCk;6o?H(SItD7G>$y|@eX8jh|i<0L&KZ@am_DEu~M)+ zoGmE0!v3Z>QB5L7AFrt?`B*6~wf&Ll8(-Xt@9bHnc<@z|hb44azzO$=64~>zaF3Jr zUg>40J^xSd%K_kBIX!ugwDc#*2RHcDOaJEu2yelHf4@vMeZpzp3XX6x_I)8mZLyN* zrYS~7v=ZTOkyEDF)&oZ@`gYx+m0`WRxElG%T&jAnV3zXSFk(M?1PUW|vMp5^;|D^P zSc>HhDOhF0Np>!0U>u^n$B<2&%}3ubQOw<^JLH(%B1d-!~~k!c~?0*bo5EX22h&rA7&~LOFO$y8gdFjdsDRrK`cZi;@Xf` zcQNi_j{MM1Led+J8Gv$gcp2PoagS@6t?bd6OvAI4<58oNscfZrsR#APP|vF;SBqw6 zt5`RXk>|hFQyDVy(Im8S>1I5IwMyEQU^mqK74IkcYtsswYhr7Ee3N#Lr|CqT*wL0m z;ZyXKHdnC6Z5N?z)+jt%CPlaUrk9io#A~P{$8#fT>c~aQf1T+eGCERSQ@3empxOVZ z?!f9*=y-N}xxbNB`|ef1tuN)wB>+!_f$(ue4OTf8HL2fXYn|{{b<^N-0CBR$k;Tjo z0cOH*VAi=23K)Y&9dvH2EoY2kp*Pb{uP1ev-RIw)G@3o;spD1t_6I<0{D`*14=W)a zy)=I!y+=@pH)D+7I)Rle3=CK=`-)3LfF9|q)gV(4DECD#EoK1gDuztxmrKo5za(+9 zk0xPRkg5>9&~*C|0Ne5 z0BX31T(jBK!ndF_Z}!waN4I~-Y>9q$AH;f-KGZ5g_yiA;o#39!#D#GIUAIWbJmkKC3Fcy8TE`P z(7G^P=P%(NXu7aew^bF;R=#J-VDmEPe;)7W?OBiYioJ5b4x>R34E?ichby~2dyAnP z-io`Mc89gz(Aecu|CMvoy!^IkCrL2zdYlm6XN<$CD2M?RCTYYYO!Blp%Yi_S&zuh6 z!3GAv2S@0fLV1@tWHa+)^KV{8w5_I>USmLs&(q&grtbOJa$(C(s+PQ>uN>!Jn=xGK z`Azl`n!Y7t-{iiS5YIX*I9=wvBIpIb-~e*Tn6v|w+0A)}#79w)54wMhe846a22-eW z%GGaR{`_}zpvxE$m%)@zviOc}URlY#!zbvq4h}ZS{)cGVFrdNR=S+U@m<|i!H(0mE zene=8g##qHO)Em6I)#8%h=S^+B`Bm&0-V@Pnh@a0zu|0_94P!wxLuVR3s`sYD#v}w zdaT~Y=7yl=452SjbCStY$$bSmT=nrxu#6D(fhKuF2Cgqz>*nR=T_|SE6<^;e&0p^` z5FA>nY;8U%jVA(6vb%@r_Vf0xz?;ywM_I6ZN@Bwse4=uw zI*Y@9gX$+Cy$Kg2#s{L6uZrD|%5O6+P{zZiukOm%_72AXr|to^_IeyxRVGb!Z{XtPBwr2D`Diiw>`>#3va}R&6O|j{wJYgOv@WSv;{Tf z69OiQh2VS<``QfL5)dG~l93_KKsq_0PtLVL$nQWFk|+7OFE~~+>iA$SR(?4vGd zRqv`t(7{LK!p~6#*}6-ZOfIa`Jstc2K>zp2UotEg!TQY&SCI0|MJ)H9por#*0ofiC(_^ zSNqWAy5-k|v>w3VZl}!+j>WWG=WfyENNX@d9J6B62HWBBF(Rh0SxvjhkBcYa=600L zMdnm0`{n|TySFYrV#<-1PuXsvaWyvI{#~?$7xh0VzvXl)`;}})u}ljaJuYHVOl9CJ z#TS#|?t4VsOxz4w{3jg)L+$QoSJy(5uNl0W`O0i>nH7i`F?03Acou{&-7|fTg877( z1}iF{ddpg>DkQ1H)`3I*ZKn*RxC@vM5Lp+uA+l9&EjrH=4yOHP_=l~gY{uJq>+Y;B zg2t`e_wNP{ZTv#c?|gX$06^xD9$j;ris}579Pt)XJ!}AA^*|-*{0^?7z>+_@Fn|F#9e83*B6PME|ATWogLaRl&Rb~jhD@FCD*!2U6 zqan0+8rSkVGVhT(3XY=064-XUZPBpdP$J>scB0E;Or#ltSd_Z7HoPp$)qo*ki{$I; zLG|W)$GO{n7;qN!@oOT*Pv%A(JDiNRBX^dQsS)#QyvmLC{JUd3DIOb0)~(AIcS|1jJ6(092gbEygQu2ye0k*(tVDXN1p|2{N>1H2_f}gVTAg&WA^pJcA0g8oNx5L{&L!$#c9k==qLs3l zU~@$$xFHJ}T=!rrlQjPWlTQCAKCk4YCP8Ar)MWt5^X;YpgVKJ}=Hu>F!Qb>UxQ%i| zQ3GoY(<@c--943bE(<@gLu)bTh)7<+)OD8-$7RnUWGAmh^MWZJ&@Hawwj7_L$+W8O zIHEUI&VG^Zm-2-{bz)Zxu)OOwl$~o@#b@GE!xP<;Yc6J9M7fVi8Zg+@!}ak~;zSu_K6@t6}GcG&0-Gv!DZ;}lHEcR z)MpQ(IKEXAn&j?@hgfj)Jj=-pySH84%x5lIEB4YE5q_ z_(oCRAsn-+>>5IVUlyApSfvpCB_c`ta$NXd-2Fjv8@x6Cht|Z9YAIw2?EMM6xDOV<+)Mxwe=26W{9bFQ$C2o8Vk8dQdHO0b9C6BYg2x zns?F?W43&c2!Oemou7A?`O>Sg2OL$9+YQ~W8%lna@+{0_-Gx(&bSC;f&lj+WnQ=r6CQcO2D{l!G2N(GfK@&-bfY z!3b?UxTUJ6W3LQ9A@IA@klU35`GEL=O@@V# zfnIGZW~gNSM;|^;E^#a%eLout*hWO>1MK<{Kj^a`*ohIR3wv(rA|-uE)RwL!t9^0x z52!&`i7Y?D^@o7AH?iYH;!qvNj+5Tux0uqec%=I;3mHRSdd}UKY?sizcNQHaOhnU+ zY}L5$+K2${(S^&r4t=h(-k2LJ*} zg|;4F6*ArdLbqjDfRR#nwGHa^TM-QF@Wy;}r=L^apXh?Dqu&vknG<`=4D>b{}21|M%h!zO}zy@6ZCt zyMgV@3RsQvAa?N&5W;W(PVb|(ATy*wy^Qi>m* z&fCH%z=D>Fy&=wL3_$K$)ydxxReTLv?}V9%M&G09;RfBLdmziO!8%oX`3=HR zWZ}zEnwO_TvMh}kEFb650aH%dR%A)0-JdI6y;b*O z5Ar_j@`n^tkE|0oihfH^t2#jyN$+)+(lAV8w>-eG0C~5!WWI+%ZxI6-vNu?M>d<_5 zkzJBqJ_^FT8b=Juh{U%c%>;Cqvrg@MnTHa?vtzG@KvLGNxCUh8pv>psQEo8=unI=V zG|xZYD4t|SmR>8p4Of98c4^tf`mZRZ|AII^Bj>{)qW&0KoqOi%%oB|&y#~4CQwjhu zFsfZnURw5!dbWn%(5+$!X??!Fw8ScCSwD@~xbl`dv59ggmtj(tMzvVo(Q-RVE zO?|(sj=h%xJ`x;1DK8s*0q4Y!;0=Qya9HZ2@TudZcAc$%y>Gvh7w|cho%yrHEI_1` z_$(TOaATL*(CAE45GPmHuq&^n_2QPqX{{C<5cg|qPQM;~rF>0mZae$tSfr(E{EC1A z(3|1eAZ!*J^PBpyF}=h9*luB&{|!ua7g&P;@5$1!0Es42z@ss8d(qe}u{w)NxIKAciVdwKGbOAh4GP^@W&Pt9`M0~snSD!mv=xc z-U=HSdqA5OrIqbL9d1u9liXxl6IWOJFbm-Q_Gky~njWcgWE6lcnMwYuz}rUu0H`RU z5(wR7c$|I5=eZ13KEMeI=lpq+T&Y%dU)(+pAfAmEQj>Q<5DMF_09=#nZ19!?CWQT< zC_m+DP_4)#@#s<{dWSzF zO4jgX)wTKU7y5A$tHF=;lN!=tvpKtUT3btwVsL_V0XR#b!q%x)lDzb!wC05FXfqqB zjh3WZxI+`YB|DItDPQBi*Ny@43%RSgD{w<|Wh@zH={g{2M7!jFH<6Gs)3x3^UZ&M- zaoxz3Jx{VG8lO(E)i2k4Nc^t*o`pou9#;iiL<5MO^lDyB-uJ{8H^+^Qqh<@LTl(tb zk^h9e@89>cj+;%W5g(}_PX66|3Wqt{bo(6L%YLc4r;6~|vQw^w8^KsfiypdhCa!%P z{O}RTv$h$lr10wL98wz=sr(^7l;szsE8Tvf#$&8|UD1fFJ6$#div-$iFah!g%OBy^ z;9#}6B?3B4@u=-EUie^km@+w>%ZEgshoYHWJgSi7a`}C0EvhSk>Ntd!uk*{JK{Sot zC>jrRZ+7zl%RATrX`bMdqb*YN%uD{VZS$>cl^yRS$3dY{Dlq{cg1EIRq})HkPeUQt zo2zCxzrk86kUk@y3;-vYGC-=(mT>t-7owJB%pc^WV^`Kk=Q+x{{DSSk_Yze0vlpcv z*G9RVvx|9z#!S9oLN484S#L4!`q6!xQCv7)phBUR@F`!i0;c01#QU8#|}PuY$mdL_8p`xhL5p%yp|HIpn_N{2qK> zA%J1rpPC271b}*eZ_KQ=Y73sMGRu2EOaZ0^rK`VDuaB$H3826mmX<&yH#22lh3aH$fohst?B{?ve zy}}qGeFg#*i?)`O?#}!Xo48jGC!9oyX@uT>TlIlCHQU=Ff`e%~;8HQC~eX8J|7ljLTCyVfNIH-8q%hZ{ngd zQ$ahW!ai?li?c^*C_e7z5LBfWjW$!>>65R8utM=j1>t`~T)mLWIgVGX;Gpc3F<$p> zr4|A_tnBs*_+@VU0H6C-tuwWu0}k9}m_(1968i?YRDzvjhXsug3@61i*h<7F0hD)6m!d1(Y|aT#X$qI{2cIBESk%>_8(sncj|Ij3Y9;& z;;S9L2!jn*g z6JGtya4DB%f@y$y(~>jIt&t9UaRv11`?Ge=9e*&Bz~-~vT&H^~bIC9fZwcLvBFTN_^|Bv+I-a zT>kIZ_ex(hXKA=uUAc`kpptGK~?{gD#B(D{&TnY zi=v9^7Z*UA$rEyGPh8^GI#B7yE$Va?!ouULo}_0ku95q3${_|t21A@f@`?4SkuUt0 z>!psxq>md}uiQV2c6|XmXO`!lTJkb`KYkjeyEbAW-?fq!5-~d}PHcxO@QgT#6YKH@gX>?ww8m2DVg5Pq1n{>xCp&hQb{*kqge#|cLb)ct|3k7PT75>tPjsd{?4?CHmJ9sY^U^^0; zP9CJc3jQ%Bjh>trVZJ4`;T+>l2&! z6ts%mJ#_$>v0MsQT9Q7rG1RzyME%e3#A7m@n-g z%U>kr4*7KL+zMmn? zDtJ5oChG|`AmrZz4@52k1O_$sUC~YrnGob|d}IzD!1+Ae8B9C9fRPyXU8f-_aRGxb z_(e_C0=Zj)z{uSEyY|tjX{d5SJwIp<80EawgXz0;h`(^jmIz;ai6X|fMh8;IQrU{> z0O?`O^MW?zs(&mPCx7Fpms=A9i9K#wBBX=A6P)jFT^Z_xZudXGL^`7|OAeM?d#ATI z;b}?axQsY_m^)O>uxabsCytr9Q#V z-()35E=@3hyWK{Zc~?vrn7J;&1HNniAW7pN<2U=?ff5b&0}tDLT20<)sq0FwhPr%9 zCz0$I#Ta5$UK7|?au&Rtw*bolV9If1^#8=OXfS>gGVe;M;P;EBa^HaS*M#?VV%Gfj zDP1iFu+4bVA7vcQ=>Tj8gc#tb(C+|zoJKz)J+FCWZZ_E}macF{FBmWmZcFXxg#DNr zR=h&mH3;SJ8jOA@AK=&8JehF$f^V>`t2bC0JGELQR%CfE^Fz*LHkVMi@oo3Q6Y;HaNErb3@mkT9uV2js zZ$*%&OoUidNng008c@&CS2>AU`N=g`@>?$B`H2yS{6EU{hR{nafO`4vpeYNy^?RR) zPrbio1V)%opT3m-rw~r^ZU4~;$#;#HdX&LNn@goYQrm($t(BPntE=%Ry&XIj2w%DU zHvi4n&w#BEiqQLfvyHl)5k3yiZc*G?_O8)(1yD-V}en5fxYR!~{t5s=cC}p|fP`R&u zS)A4D9{T+2+G-*zWCztfmhjf1!gi*z%O4-fC*yS_pT*R&B)Nx#!M5b>3myw!AwTeb zV&1|mde~^|8@?XV6r=E_RCwOEe-#js9D{VKWEn^t=*W_{u@|Flz! zqs=!=uCD>R39A$19v&>@da$K$4;eP_y7a>gn_9|JRw<_DevaTb<7YU!Yw#l|pjXOT zX;bBfJ9{ln?k<4xdsv?OeBjK-TF3pi%lM+(tDx;Vk|ttSyu_zTVodwgX%T~$IO^D%GwzYz0F5_ikq z-9HK6-&`6-90VRq^LSRr6_0O3w?82djoJKqQMm1VlE)c3lrnm{`0zyjJLc1PX8p_Q zUlfwE%y<49$QRDpyExvJK1F@R!=YA$dM3DuId%vyh>EOl2c(gFwm%g>ZN!xmOdjaDcD9(CjvHkD6EjD>YRX3kSlQky#(hdN3> zZ*tx)!z_PHOO*Y1_-3=?Q@k zv_GUeO#xzUFh>sca78>KTl!djG~Y+trx6Z36jD_U*nOEf%%A1p{r(XEUos@OGzM}x zY2RPc5JnuZ`cm5RW_RqDHCB7x-wIIWs4X)p+72-rDTeNI6yL

f3qDgK|vbGk^fx zq;6lCUw>i%`OGvYO-~8=%iNgBFem7uV)T}<--<22%zt%T_4Ma8u9!zKL2WRda1WOB zeX+{!9U~Ymrc}6>`>uP{dgVWrlII%RbLNnFj`*pn_J8Yh($j3ug z>Jv36cID~@pax?ICUn`@Y0h~KOVyrq)?IWR3tHm<>L)54QSi+C+k{#+BLJ@d;c*q6 zpslS>`S0y}CTc0kq{+gl)E>;#N~0IF53X^H_{1?*mhW_!7EG`eN)oEqx|n-&yzgPS z$nhyHCf%n3UwXfL-doX!tZlhu22#1uhck(i&^}?jq=Y27&5h4Yb19dVKZGecU(s6r z&ZTok8TT6T9{V=H_j41{7iSwaLS;c?{jzoa*|uWC|dC55zbAZV=uyVuE!|EL#G2%3;`Dr+O9^s#`?u zJp=7`y3sFk@dm;0ZUqh20tz7a^Qy|6 zi(mXEgrMIT{2GX8vFxFI4K{on z*{wt#0q1Pd6>qNcV0KgKCrtgv{+k651U-wmF_u81m{U37!=#@QHS!+@=!Gqf6bZ!* zNfn%ffvzpotpLv7ovI9m+)Lo#*2ey}!>MBF248uP@b^9U<~%?sC9v$}A^eEf@VyVK zXt%b@hG3CT!C#5d^WVliE*xBZpNqi~%iJ6+EfLQ=pD#{B!VrS7e|avY+K|K?1pvMa zBe*jHkSVuYbtP#>?bp)UJpeU%ytYlkgMBUtZ~)gD%ShBjV;TPx`22vaQ!ae>E;~Wz zE0`6WAR;-32m{)ww@j*VI02#$u|?nAd3v{kH%#T7vs=D_n{ms}wn&cvh& zY}l-Vq;!5F3k5b`_P3BFU0qPs(yeP8c#!xKWK*bQR=La?#h1dq&Z*vwTDhV2_^a(n<%ScfEeVS; zffJH*kzY1xG~?}rX+EidatQwE5rOCfUv>mbC`U{u#uVx_>k5kLm+_A zh2Acc69J+wx=QCPjv?R~->rrVk=xhJ?Mo$nZrUN&` z0#>(A-dr?N0nvMb-rlS{QB`ukZeF5E4u<6;p0>jVUueyKb3poI zM7)5A<}1wMJn_EopJ|YY>3G&BAzGgEj~o$U%@?(cd}~%3rk4#(ENLfXZ8kgNU{V;S zTQSotZ4QMbNHYD@9iNY)xpJb#CxZaKo_vwafx)e~#c{Sp>%-x~=l*`x6n8d~b3&2X zz8IVX3>s|n*x7V0ro3dn>XnHfNg^J_mKZ znfI0E%JPQnUu3^1^8Ne(02-~+=pBFd&G4N@yJ&aYHOdiu7&DZ=_ELRn>1e~Xf=U!&d|qbJ|ION6r8F*9?T z3ZCdC+*F$|bjtBdcA5b2KN0#>-;bG8)VOFB@aD-G*MqDd zV37Yw0*~r0S>W~-gVWnZ8T9!llt^GpA8c!J*r<{wyR_doIs)5A>e4v??=EZDNJYU* z{tj!Y1h8=_>X*+E1fO4VA|6?=|0aKUyEe7p8^hQr0H4hpnG0bw(J-Js0eVa6PcVRy zu2|fz=n;Dbr3ef79)!{Anyle4=-p7kV0HLyDb3ev&fcZMa_n`z^lEK<_R%jt0>Xk+ z1FD*!%8%JU6Kp8M^lHdSlY}Y*lTtWSUX(h5Lxqz0q&(LOhby+!3DcIfun#lnY`Dn@ zYzEJ_wR#t*eXonYQKEk!{f0Er$ebmb*zb1xrT@s>F8oX>!fGJa5UUM+p|K8CcLWkwc*K7cs2>!uu_kBL!I;Q`jOz&&6pKJ>v}+lFkY!q#eBieTb-LFZ zP3<)^%Vq}t!UR8qj&8=>qW5BoJvM5Jp2`RN zlR)6U!1L2u7m+V5!$cwAHQy>|MEwS@!OH?!nf##l)bQWqy0r-^02vlSd!oe1B?b>m zpUJO1@_6W#8~WOR=ITH`w;=%5xn$q<&Wg=|%MVvp#8zw<$8}WyM|5TvkHL9#>ikTf z4!Cs&e^r^L*2gzdAusFMu&g<*8&eN&4Wxc*mxJ79DEO0>1BhbD#U zJbK;9ilBhy1`+WI0ojxQvyM}KIVCHc*x-2_ynQlk8oabn>TLK7N1fH)M_OW*e{Qs% zgjro-T1&khrlEv;eLRR@9DSo?uE#A=+;&!fn)FB27!V_;)llGK#Il0#ZpLDHju3EZ z;Tx=Y7-~}!v@LJVpvW>#5e&W57%GV!nxg!4wAeYj%T{OZ-c&F3?3uG*V>Nqhz9OQJ9F_7KpZ z1O4sIsT{^!LxwZ4|01opVNdlib1Ob%7pD*&T?>J(%8=xLqF48S8x~H<5kWLR=UEL* zoS5ebuiqqB(diI!wc0$-cJkh+*YpTr)QnP+MimcSr=3Qy&NsJi+Z4Kw+QJsBWZvJb zXi5A#(Y1YS1(tZ`Q~d#o2NmrNIEiu8Gvm9FS!O`M-8F=JPx3^!HPO4uSLwL`p;r zm8`cZ9`uj~cH%P2wP+E{=-uDOILVXzM1Y+ITf z61{&JbZL30(41AaLk&=WuPELtPWTdfO`g5-6?H64e#Fpk{^OLvW9({j{dRCM=Q|yM z9LgD6uE{J2;BLJ4_8D|Ie_hNCqc2;t(_9V3dYhYoy!=bOWW9iK1Bswg{}IRdR3drv z@#H+t2qIlJ>=$^<{0B-wr!yJEQwqvc1h$F#-)aM$%HPi0C%@7gM!s(F0^j@rX;w_N zgMtTh!=2Q#Z_uXBatpkASipx`zfWdM$#rn+aL3GBDl3~=!h!ff<2Vh!>B3#2@q4an zWXA)ufN5qrxm=k=91H)n?-!n!mxuFRn?1BGAyoBWVvE9~zP~;u9?FzYxcN;m!aS7} znP>p9%9sYp`NjjeA**00!9=^l9LVBy4;xj4Z4a#{v;c?p+H{Rj+~nrN&avcf7546|m_8iWw+C)#o6?J*)+mDUKF)IrB+`T@kPd77@@78)wm}KkB=aiZ%i$>lF6IN3ujr%7X9gOnn{lG(WLeBM%lHH?N zBadm%aC^7G!Yd>`hcCxExh`;R(9yzcMB z=(`jVv~Oo2O;JM*7wcc2N}N)5qa-m7NszJ#Vm@(ZX~35+%&XZgOKiGc>FXlP5>q%} zI`ulu3CEaPdZ^u$+n(OcA8F=T44DSm?TC^AO7ncox64>y@B|;Cj=8c&Fjv~Uq-$cQW?H)Bhos|tK3oKn()>T3&blqC z@BjK|=w=A%1}Tx2h5@7$1PK)s7&@f8VQ7#BX>bsfR*;a825D*Ol-tlIs3iWUhB0Ot|{r}iw>i6tvWXDkzZXOa0^VorZyy)Ad+>ToE$M)=(>OB<&0hw zo)n*C<-`2*+lN8Q6C*N#x$`)MYa}BxctxVho;3Yn^sThA)*X0f?lS8NV+PLv;j8MB zTi8(JOuyVerG2ESF5l4>WGA*%YMw4#&cr~&Y@#+B6dyu{BZ$GQU`IH*PWBfgbOUY5?;tn50*UtqpLJm1fCFxa;FP4cu`Xk0VHeS=~Fc(BbZ@p_enAv8^spMLgZ z|33^XOfovWoQH$R0L(uW6($>91A?SEs#{DUszJKi zF&$^D=5`z;YP!CX5C*PIR9k}H6X>KS{L{LonHf0NHv08G zIG-xR>YfJI_c7i5Y7QFAls9~^>CIWT9eW^b5q+SRr{eo=fk~;3v|y=ozYP9wF^;}I z=$1)pjuBd5>u8H_4R1nFY!0s+WmY512XbT-S!`ulC*-WUU)0HI)CRrQHFqUz^UvPD zBmvorYNA_JD~MN0s9z+5QxyQVEefq8TiM+%Oj z&0RuM%%-C;Ylqlr7R9FU6ZkMYp0F}dX#cTMWe)k_j5E0cre#u@*|T88eiz&_ z1;M@cRl%C|;Yu5kx_7vU488a55`g?5x0(+NJ|HhD-zTwr2b*MI2|T76X^uk`2pn%s zs!kiX5dH9>xAJx7Glwv_x0HUz%y2tW{B(X;^IO2>w8sdH{S2&Ekz08g+Nvo$H0MGMFaaUgG>5PvYK z{&hujTwoDq>-b7Dhvap|Qb*{nxbtaQh5p)b3}RyplH322x+aGwLtM7;}FQPs`z|%N^>a-}~8u$#?BB87$=*Y@@Cf@<^(VH_E6ty1I zj^3cqU&LAVnwiPFgM3jo$~q$(EFSo>F?2CWFKrhnQ%`E^ai{rA{pyeM5$)HkU(0|6mwk0Y@GMcx)e~06me314o7VUlD&{D7qD{*5KL` z;-(=SjUh}bA^=P52VjrFcff>bKhOmb?1(OX-K0y>f0D}+CSCL46#ABVNMa{;= zSax!Wn|S4i1QrwzxTrO(n_gHq?oH0DW*qFmDAv^>Zrw~ z%O4j)zhD5$|!+r7M-QY zMb?)cEmS`Om9S#;?mGdS+L3n#?I+^mm3MzU$`{{tUv%Rb&V^`uxh&7y=G42BZ5jvC z4uSAP$c|pT#A1={;cK42oBi`bowvX3Pf$p2bj}^s@B}TWs)Jt&+_M_OjY{wWc%uxN z_~rH~kKtO)TN!%$XXt(q-?2ih7n^YauJtkSNYOHd) zcU#OHgxx(zrhJ_qV(8n+350vByT*e|i{xlQMu5f3M)&XfgFQ-`!Pj{C9@F`lLA#J9 z)v3yp->r)F{&A>oVu=;HEKkz-bvId)p8*pa!^4l!9cGrZ2d4CD?;%1G9F*sRgkYA+ ztm^Q^kW4M{XZ$hR)cm+)W0rNoF*bzcCerQBO>(-#laTy=BN*zS7B+C>N-AxvV!#{rd!WQ5z0Idg~1|>=k8l@i#ev`c&1Tn_X$kjAUuD`6U zdb}*SUOH%dXVi0F(bDm4xMF!U*Khi*k@Z}Gq)6!I5VCV-%DB5-eYn#wCsGool|Hf4kP{zXd>%G_`a#c?Ywtq%)~jPc_B8ShAdd~myao^eWdAPZ$FN6z zAHw!>*|FT@wwkmO1vUgNUa{xw#(Q+7K4Aw#$#Qf(FTJFli2rza7D(W#g)T3Eh z5SHA@auFoeWlB<@%FZhvDcXB2WQv9m)s8r%#|8TK#o0orGihs7xX9X7Yp~4$L-|Yr z9y@Q+)9a(}vn(Dh%?x|TEwobwQ|{i^0iebv*1bYvo(7R`i*wJJkz1}iHc_F+6L)HZ zw|>U59_6SExvlm-GD6eIc~TP1^1iBin#bE zMBfyEHf)DUyBW*lJ=WN(_!gY`-_udqRMxo4qfm>jQ%UI!lj8rfPC7Yo>TtGcxO8aDz zGD)6B`TpT_#sk7v>(5Tzp`ki{gv7Y5 z*Zb`JiA?{6dPvk2HyrLQ}=bcG5CW=+|J|YDO?A{Q{J$Xng0%moilh$ zI{PPmR+(qeP$>Tu@{rcuIs2 zuQ<^SNmh#X|%G0H% z6YrEq8pBmVPTobc)`;I3_D(wiUAI_H@vvmC((%-x<{9t*?+7SWU;BNBKM93a&b&;N z>bzr2CGXeAn(--R#}cv=jGx|34*ZD$)O$U|WSP9r>y3y%>fuzolZ8DUgeG485qVUv zXR;##POW7?>`g361*!dhpTT~N+p@6T?sBT9xUWcGOO0Po+GYE}f}I*6s1L}5 zS`GEGTgJ-#kvZ0^IGvkdb8g;`<99I#&*Law0$HlY3ae*xHpX|X zmF`Rn#gKu_U>@$bT$c)TyI?qR9c|{Ko0=?A4*I;|1+$fdsF{JZZ{Lk-+e`@8_GhYQ z;1>7CL=0TmdByCW(%6Wp=#R}`4|1(=Ph2~s6ifS6TM1j|6ekXs+iT18e|b=dqkU;f zot9SJC0*~bV`3x%FJz2;cOCe0

8wE#qOfu0P623a*4g1)77ln~kdhGuns7UgY!^ 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

~S%3O8k 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

B{$L!&)|81w|f%SZeCUCJeVUw=4zmk5N;rCO7d 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 literal 0 HcmV?d00001 From e67cb811e7134fe0af3e8865455ae14e7d597ab2 Mon Sep 17 00:00:00 2001 From: Aldin296 <99395958+Aldin296@users.noreply.github.com> Date: Wed, 8 Mar 2023 08:46:18 +0100 Subject: [PATCH 34/85] Started Setting Page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Settings Page wurde in der Sidebar verlinkt und die Plugs wurden hinzugefügt --- .../Elektrifikatsiya/App.razor | 3 +- .../Components/Layout/SideMenu.razor | 2 +- .../Elektrifikatsiya/Pages/Dashboard.razor | 25 ++++++- .../Elektrifikatsiya/Pages/Settings.razor | 61 ++++++++++++++++++ .../Elektrifikatsiya/UserDatabase.sqlite | Bin 0 -> 12288 bytes .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 0 -> 32768 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 7 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/App.razor b/src/Elektrifikatsiya/Elektrifikatsiya/App.razor index cf7da0a..f673a24 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/App.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/App.razor @@ -60,4 +60,5 @@ Primary = "#1a237e" } }; -} \ No newline at end of file +} + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor index 3691e03..3eeeced 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor @@ -32,7 +32,7 @@ - + Settings diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 2c3933f..7f8ca04 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -6,11 +6,21 @@

+ + + Plugs + + + Mode="ListGroupMode.Static" + Style="border-radius: 0px 0px"> @@ -42,11 +52,22 @@ + + + Plugs + + + Mode="ListGroupMode.Static" + Style="border-radius: 0px 0px"> +
@context.Item.EventName diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor new file mode 100644 index 0000000..415044c --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -0,0 +1,61 @@ +@page "/Settings" +@using Blazorise.Components; +@using Elektrifikatsiya.Models; + + + + + Plugs + + + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User +
+ Room: @context.Item.Room +
+ + @context.Item.PowerUsage W + +
+
+ + + +
+
+
+
+
+
+ + +@code { + + + List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; + +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..c3afa60a8c61dd5d4b0f0116c730a50451efa9ea GIT binary patch literal 12288 zcmeI#&r8EF6bJCM6NSNs;GwY7qo<7xFa8788MLg+YL|gKjq0Kfw-%R*ckv(aZ}cDW zZL|jm!~6I?NZR~*O+Gzkd>1VWLr?j7l@@d%PKE1=OClkJ%caJp3Wr~gss=wd?f=3R z=d)IWXSvO9(fr{G0Rad=00Izz00bZa0SG_<0ua~;#O|@z?K;yUeOMa%w&dIC%$m1% zlRfS>YyCt9T9OW~B1t=Q+gZ9YJzm-QY&j>M=Q&?z+nf_?)^=ODf7bikKA+l+I&t{n z+^0}!c_R~2BTZ@&Mbsauu}%W+CqEv{$|Z3U4ufP$139H&qDP_P%tNVkugs-*FFt8` z&uPk3)li&T`;o8bx2b*EGi7Y7UF4b0Urkm`;muSTqSO{q{=CSp(_-IOl6=WSyT@tN zJDa;XU-}UcfB*y_009U<00Izz00bZa0SFwh0Pg<>{Bv Date: Wed, 8 Mar 2023 09:01:17 +0100 Subject: [PATCH 35/85] Silas da tohl --- .../Elektrifikatsiya/Pages/AddPlug.razor | 83 ++++++++++++++++++ .../Elektrifikatsiya/UserDatabase.sqlite | Bin 0 -> 12288 bytes .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 0 -> 32768 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 4 files changed, 83 insertions(+) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor new file mode 100644 index 0000000..84f669d --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -0,0 +1,83 @@ +@page "/addplug" +@using Blazorise.Components; +@using Elektrifikatsiya.Models; +@inject IVersionProvider VersionProvider + + + + + + + + Add a plug via wifi + + + + + + + + + + IP: @context.Item.Address + + + + + + + + + + + + + + + + + + + + + Add a plug via IP + + + + +
+ + + +
+ +
+
+
+
+
+
+ +
+
+ +@code { + List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..eeeb96ffa3098bd6e50255479f5d1e5c5a3c0c6a GIT binary patch literal 12288 zcmeI#%SyvQ6b9hQ)C&|Wf{TEwLsl&$)9D$$NwY!ljvxECM7XY?sN zttn_x+?W5rOft8VnJ=s9Ux$;z(0#s`r3IaeLm{O&BN9SLE)_28aQJ0s-Qef4{a;9N zGCDrsS+e#nY9Cx7AOHafKmY;|fB*y_009U<00Q3xV!7uwo6fLEZ>Pr2r+i5rSu=k& z+1+Nd(oU4G6>0xGRJ1X-o~1L>;+2ipBWK@rUFU6gm2+Ut!mcX$W4*WP^Qc}W4lfvc z6hvBGs)VARrf3j`)b2%no%q~OUfda#E8-;R`pJ+wYDoS-_kxHMcU7cYU#TMAiAP%9 zaF#MtITEMVzT}JXRcar9pV2qgPV!9WPbOQ>;GLA~!_*dG{xHcd(&CR#B>9v_HcwJ* zEbr!g=|?~S0uX=z1Rwwb2tWV=5P$##Ah5*(xc_hQ&&AOo009U<00Izz00bZa0SG_< H0;Rwwql9r3 literal 0 HcmV?d00001 diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 Date: Wed, 8 Mar 2023 09:21:35 +0100 Subject: [PATCH 36/85] LoginPages dum --- .../Elektrifikatsiya/Layouts/LoginLayout.razor | 18 ++++++++++++++++++ .../Elektrifikatsiya/Pages/Login.razor | 4 ++++ 2 files changed, 22 insertions(+) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor new file mode 100644 index 0000000..4962196 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor @@ -0,0 +1,18 @@ +@using System.Diagnostics; +@inherits LayoutComponentBase + + + + + + + + + + +@code { + private void Clicked() + { + Debug.WriteLine("Button was clicked!"); + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor new file mode 100644 index 0000000..5c303a0 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor @@ -0,0 +1,4 @@ +@using System.Diagnostics; +@using Elektrifikatsiya.Layouts; +@page "/login" +@layout LoginLayout; \ No newline at end of file From ef7be64c05964cb3170d0e1fa95c9c2c1f5a50fb Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 8 Mar 2023 09:29:07 +0100 Subject: [PATCH 37/85] Logo color Changed color from orange to blue --- .../Elektrifikatsiya/wwwroot/logo.png | Bin 122304 -> 84270 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/logo.png b/src/Elektrifikatsiya/Elektrifikatsiya/wwwroot/logo.png index 20091eef7609a4d074c452b65a8ab38de284d1c9..413ea809169f5b934e20784a4aee3f1bcf0e190c 100644 GIT binary patch literal 84270 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
)_?CA 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

i_L>YUXri`?g4VJEX;c`lQGvtdbu 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 literal 122304 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Þ}FlL<2)0wz#K8X_y8x!<)9dUYt+K;Er1+n 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 Date: Wed, 8 Mar 2023 10:14:43 +0100 Subject: [PATCH 38/85] Dashboard fix Fix for responsive behaviour --- .../Elektrifikatsiya/Pages/Dashboard.razor | 162 +++++++++--------- 1 file changed, 82 insertions(+), 80 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index fa442fe..3faa8ed 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -3,88 +3,90 @@ @using Elektrifikatsiya.Models; @inject IVersionProvider VersionProvider - -

- - - - - - - @code { //TODO: insert new event here if plug produces one From ca58a76594e6901ba940f9484dd16dfa81f494b1 Mon Sep 17 00:00:00 2001 From: Aldin296 <99395958+Aldin296@users.noreply.github.com> Date: Wed, 8 Mar 2023 10:17:08 +0100 Subject: [PATCH 39/85] Settings Page Frontend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit weiter eingabe felder für die Settings Page hinzugefügt --- .../Elektrifikatsiya/Pages/Dashboard.razor | 2 +- .../Elektrifikatsiya/Pages/Settings.razor | 78 ++++++++++++++++-- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 32768 -> 0 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 4 files changed, 74 insertions(+), 6 deletions(-) delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index fa442fe..858b2c4 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -88,7 +88,7 @@ @code { //TODO: insert new event here if plug produces one - List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; + List events = new List() { new Event("Placeholder", "Event", DateTime.Now), new Event("Placeholder", "Event", DateTime.Now), new Event("Placeholder", "Event", DateTime.Now) }; //TODO: insert new Device here if user adds one List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 415044c..00e3089 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -23,7 +23,7 @@ - + @context.Item.Name @@ -35,21 +35,89 @@
Room: @context.Item.Room
- - @context.Item.PowerUsage W -
- + + + +
+ + + +
+ Plug Name +
+ + Here you can change the Name of your Plug + +
+ +
+
+
+ + +
+ Change Max Output +
+ + Here you can limit how much Power your Plug uses + +
+ +
+
+
+ + +
+ Electricity Price +
+ + Here you enter your electricity price. This is gonna calculate the overall Price of your System + +
+ +
+
+
+ + +
+ Select Room +
+ + Here you select or change the Room where you use your Plug. + +
+
+ + Rooms + + Room 1 + + Room 2 + + Room 3 + + +
+ + + +
+ diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Wed, 8 Mar 2023 12:07:55 +0100 Subject: [PATCH 40/85] =?UTF-8?q?Beep=20boop=20=F0=9F=A4=96=F0=9F=A4=96?= =?UTF-8?q?=F0=9F=A4=96=F0=9F=A4=96=F0=9F=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor | 3 --- .../Elektrifikatsiya/Pages/Dashboard.razor | 8 ++++---- .../Elektrifikatsiya/Pages/Settings.razor | 3 ++- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index 41cb0fb..f14522f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -34,9 +34,6 @@ - - @context.Item - diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 049c64e..a379b41 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -33,7 +33,7 @@ - User: @context.Item.User + User: @context.Item.User.Name
Room: @context.Item.Room
@@ -52,14 +52,14 @@
- + - Plugs + Logs events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; //TODO: insert new Device here if user adds one - List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; + List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; //code for graph LineChart lineChart; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 415044c..336dd20 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -1,6 +1,7 @@ @page "/Settings" @using Blazorise.Components; @using Elektrifikatsiya.Models; +@using System.Net plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; + List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; } From 9b5a9337104f2cba5e25bc8deea2c4ac0c400e3a Mon Sep 17 00:00:00 2001 From: Aldin296 <99395958+Aldin296@users.noreply.github.com> Date: Wed, 8 Mar 2023 10:17:08 +0100 Subject: [PATCH 41/85] Settings Page Frontend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit weiter eingabe felder für die Settings Page hinzugefügt --- .../Elektrifikatsiya/Pages/Dashboard.razor | 2 +- .../Elektrifikatsiya/Pages/Settings.razor | 78 ++++++++++++++++-- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 32768 -> 0 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 4 files changed, 74 insertions(+), 6 deletions(-) delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 049c64e..0991dfd 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -89,7 +89,7 @@ @code { //TODO: insert new event here if plug produces one - List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; + List events = new List() { new Event("Placeholder", "Event", DateTime.Now), new Event("Placeholder", "Event", DateTime.Now), new Event("Placeholder", "Event", DateTime.Now) }; //TODO: insert new Device here if user adds one List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; //code for graph diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 415044c..00e3089 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -23,7 +23,7 @@ - + @context.Item.Name @@ -35,21 +35,89 @@
Room: @context.Item.Room
- - @context.Item.PowerUsage W -
- + + + +
+ + + +
+ Plug Name +
+ + Here you can change the Name of your Plug + +
+ +
+
+
+ + +
+ Change Max Output +
+ + Here you can limit how much Power your Plug uses + +
+ +
+
+
+ + +
+ Electricity Price +
+ + Here you enter your electricity price. This is gonna calculate the overall Price of your System + +
+ +
+
+
+ + +
+ Select Room +
+ + Here you select or change the Room where you use your Plug. + +
+
+ + Rooms + + Room 1 + + Room 2 + + Room 3 + + +
+ + + +
+
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Wed, 8 Mar 2023 10:14:43 +0100 Subject: [PATCH 42/85] Dashboard fix Fix for responsive behaviour --- .../Elektrifikatsiya/Pages/Dashboard.razor | 162 +++++++++--------- 1 file changed, 82 insertions(+), 80 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 0991dfd..3dc0ff8 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -4,88 +4,90 @@ @using System.Net @inject IVersionProvider VersionProvider - -
- - - - Plugs - - - - - - - - - - @context.Item.Name - - - - - User: @context.Item.User -
- Room: @context.Item.Room -
- - @context.Item.PowerUsage W - -
-
- - - -
-
-
-
+
+ +
+ + + + Plugs + + + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User +
+ Room: @context.Item.Room +
+ + @context.Item.PowerUsage W + +
+
+ + + +
+
+
+
+
+ + + + Logs + + + + +
+ @context.Item.EventName + @context.Item.Date +
+ @context.Item.Description +
+
+
+
+
+ + + + - - - - Plugs - - - + +
- -
- @context.Item.EventName - @context.Item.Date -
- @context.Item.Description -
- -
-
-
- - - - - - @code { //TODO: insert new event here if plug produces one From c06940b5ddc8f42fa699a87e981a752e2aab86e4 Mon Sep 17 00:00:00 2001 From: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Wed, 8 Mar 2023 12:07:55 +0100 Subject: [PATCH 43/85] =?UTF-8?q?Beep=20boop=20=F0=9F=A4=96=F0=9F=A4=96?= =?UTF-8?q?=F0=9F=A4=96=F0=9F=A4=96=F0=9F=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Elektrifikatsiya/Pages/AddPlug.razor | 3 - .../Elektrifikatsiya/Pages/Dashboard.razor | 147 ++++++++---------- .../Elektrifikatsiya/Pages/Settings.razor | 3 +- 3 files changed, 66 insertions(+), 87 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index 41cb0fb..f14522f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -34,9 +34,6 @@ - - @context.Item - diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 3dc0ff8..81adb33 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -4,96 +4,77 @@ @using System.Net @inject IVersionProvider VersionProvider -
- -
- - - - Plugs - - - - - - - - - - @context.Item.Name - - - - - User: @context.Item.User -
- Room: @context.Item.Room -
- - @context.Item.PowerUsage W - -
-
- - - -
-
-
-
-
- - - - Logs - - - - -
- @context.Item.EventName - @context.Item.Date -
- @context.Item.Description -
-
-
-
-
- - - - + +
+ + + + Plugs + + + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User.Name +
+ Room: @context.Item.Room +
+ + @context.Item.PowerUsage W + +
+
+ + + +
+
+
+
- -
+ + + + Logs + + + @code { //TODO: insert new event here if plug produces one List events = new List() { new Event("Placeholder", "Event", DateTime.Now), new Event("Placeholder", "Event", DateTime.Now), new Event("Placeholder", "Event", DateTime.Now) }; //TODO: insert new Device here if user adds one - List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; + List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; //code for graph LineChart lineChart; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 00e3089..fa1eff0 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -1,6 +1,7 @@ @page "/Settings" @using Blazorise.Components; @using Elektrifikatsiya.Models; +@using System.Net plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") }; + List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; } From 2561a74b7f5dc456fb5b02e5d343469f8dc53ee8 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 8 Mar 2023 10:14:43 +0100 Subject: [PATCH 44/85] Dashboard fix Fix for responsive behaviour --- .../Elektrifikatsiya/Pages/Dashboard.razor | 147 ++++++++++-------- 1 file changed, 83 insertions(+), 64 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 81adb33..bc6f13a 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -1,73 +1,92 @@ -@page "/" +@page "/" @using Blazorise.Components; @using Elektrifikatsiya.Models; @using System.Net @inject IVersionProvider VersionProvider - -
- - - - Plugs - - - - - - - - - - @context.Item.Name - - - - - User: @context.Item.User.Name -
- Room: @context.Item.Room -
- - @context.Item.PowerUsage W - -
-
- - - -
-
-
-
+
+ +
+ + + + Plugs + + + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User +
+ Room: @context.Item.Room +
+ + @context.Item.PowerUsage W + +
+
+ + + +
+
+
+
+
+ + + + Logs + + + + +
+ @context.Item.EventName + @context.Item.Date +
+ @context.Item.Description +
+
+
+
+
+ + + + - - - - Logs - - - + +
@code { From f55ef88e14b7d55d2c97d9e9afdc03a1fa467b54 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 15 Mar 2023 08:58:39 +0100 Subject: [PATCH 45/85] Rebase --- .../Elektrifikatsiya/DeviceManagement.sqlite | Bin 0 -> 4096 bytes .../DeviceManagement.sqlite-shm | Bin 0 -> 32768 bytes .../DeviceManagement.sqlite-wal | Bin 0 -> 24752 bytes .../Properties/launchSettings.json | 2 +- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 0 -> 32768 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 6 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-wal create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..81dae899f351f43f4e0ef4b510c62a2f6b578c80 GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYCM3;st3JAlr;ljiVtj n8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O6ovo*DxU_5 literal 0 HcmV?d00001 diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..69987d0f42d29ae6a46a1e437b19d668cf7fc743 GIT binary patch literal 32768 zcmeI)tqsCJ7zW_uH%J7cumc+)Sp-2+K|;y^48SN%!7K<&Z9Uv4n$#lUo;UfD_R?N+ zPyJgxx2ex4rR6-|#9Zs!rF$J8tM;%yx6ST!@Ah@GSyW#>-|roJz6Tku$94X88t0kh zndX`0iFbqm0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAVA=s1)_CA2$U%heJetsOo3<`5&~rkM8}p8 zC{rNX<%B?)0(uq8{O?XpfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ SfB*pk1PBlyK!Ct+3w!`uAtna^ literal 0 HcmV?d00001 diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-wal b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-wal new file mode 100644 index 0000000000000000000000000000000000000000..f6e298cdd6f1408c04bdb250f88f38e9b0b75d9d GIT binary patch literal 24752 zcmeI)y>HV%7zbe6XV;S zhwZ^6*sLu&L(SHo58F-Gt#l9F{(RG|=krYiScObyO{&cp{8`(;h)JiZNsTnk6JL>Q zYDFc*g)>yAEDLEhpH?$87EO)!$q6+n3V!mu^)maYS+F2hBWlIeth7Mu+nW zGQ(zdh_*AcJjj8x5_Q4KY6gotPYo-~#D9{Uvpw&YTPx1m-dgu$DS5WSN^aG1uRGPS z3tMGjaNYLmx_hlu&DiySEhW<}v!>34!ZO6P`RDxBenE8dZR6?hJC|epW^*fnU!gz% z0uX=z1Rwwb2tWV=5P$##Akdov{QLgazQBvmA3l9~7x{yIf!<6uW(5HVKmY;|fB*y_ z009U<00I!`5b)mt2;VQ*{%F1W`u>T4eSr=oR3QKX2tWV=5P$##AOHafKmY>0DZpRf zX#HMbYGruy4cT6a@|$>%fGeOt00Izz00bZa0SG_<0uX=z1bSJ3{|`Yq{JlW!@!GvD i=f^MX3-ofzF*gW600Izz00bZa0SG_<0uX>eQ{XQt*f=); literal 0 HcmV?d00001 diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json index fe359ad..356daf5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json @@ -7,7 +7,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "https://localhost:56656;http://localhost:5255" + "applicationUrl": "https://localhost:5656;http://localhost:5255" }, "IIS Express": { "commandName": "IISExpress", diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 Date: Wed, 15 Mar 2023 10:34:42 +0100 Subject: [PATCH 46/85] Ignore sqlite files --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index dfcfd56..883ab1e 100644 --- a/.gitignore +++ b/.gitignore @@ -348,3 +348,6 @@ MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ + +# Project specific +*.sqlite* From 40b9d9aa614456f39e7ea4c0be18280f709d9543 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed, 15 Mar 2023 10:35:15 +0100 Subject: [PATCH 47/85] Improve device discovery service and add page --- .../DeviceManagementDatabaseContext.cs | 14 -- ...abaseContext.cs => MainDatabaseContext.cs} | 5 +- .../Elektrifikatsiya/Pages/AddPlug.razor | 226 +++++++++++------- .../Elektrifikatsiya/Program.cs | 23 +- .../Implementations/AuthenticationService.cs | 26 +- .../Implementations/DeviceManagmentService.cs | 224 ++++++++--------- .../Services/Implementations/UpdateService.cs | 17 +- .../Utilities/MdnsDiscovery.cs | 55 ++++- 8 files changed, 334 insertions(+), 256 deletions(-) delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs rename src/Elektrifikatsiya/Elektrifikatsiya/Database/{UserDatabaseContext.cs => MainDatabaseContext.cs} (58%) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs deleted file mode 100644 index 85d2699..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Database/DeviceManagementDatabaseContext.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Elektrifikatsiya.Models; -using Microsoft.EntityFrameworkCore; - -namespace Elektrifikatsiya.Database -{ - public class DeviceManagmentDatabaseContext : DbContext - { - public DbSet Devices { get; set; } - - public DeviceManagmentDatabaseContext(DbContextOptions options) : base(options) - { - } - } -} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs similarity index 58% rename from src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs rename to src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs index b3a6730..d58b2b1 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Database/UserDatabaseContext.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs @@ -4,11 +4,12 @@ using Microsoft.EntityFrameworkCore; namespace Elektrifikatsiya.Database; -public class UserDatabaseContext : DbContext +public class MainDatabaseContext : DbContext { - public UserDatabaseContext(DbContextOptions dbContextOptions) : base(dbContextOptions) + public MainDatabaseContext(DbContextOptions dbContextOptions) : base(dbContextOptions) { } public DbSet Users { get; set; } + public DbSet Devices { get; set; } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index f14522f..e3c034f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -5,98 +5,150 @@ @using Elektrifikatsiya.Services @using Elektrifikatsiya.Services.Implementations @using Elektrifikatsiya.Utilities +@using FluentResults; @inject IVersionProvider VersionProvider @inject IDeviceManagmentService DeviceManagmentService -@inject IAuthenticationService AuthenticationService +@inject IAuthenticationService AuthenticationService +@inject IMessageService MessageService -
- - - - - - - Add a plug via wifi - - - - - - - - - - - - IP: @context.Item - - - - - - - - - - - - - - - - - - - - - Add a plug via IP - - - - -
- - - -
- -
-
-
-
-
-
- -
-
+
+ + + + + + + Add a plug via wifi + + + + + + + + + + + + IP: @context.Item + + + + + + + + + + + + + + + + + + + + + Add a plug via IP + + + + +
+ + + + + + Please enter a ip address. + Ip address is valid. + Ip address is not valid! + + +
+ +
+
+
+
+
+
+
+ +
+
@code { - List ipAddresses = new List(); + List ipAddresses = new List(); - protected override void OnInitialized() - { - ipAddresses.AddRange(MdnsDiscovery.GetChachedDevices()); - MdnsDiscovery.OnDeviceFound += address => - { - ipAddresses.Add(address); - InvokeAsync(StateHasChanged); - }; - } + Validation? ipValidation; + + string ipText = null!; + + protected override void OnInitialized() + { + MdnsDiscovery.OnDeviceFound += async ipAddress => + { + if (!ipAddresses.Contains(ipAddress)) + { + ipAddresses.Add(ipAddress); + await InvokeAsync(StateHasChanged); + } + }; + + MdnsDiscovery.FetchChachedDevices(); + } + + private async Task RegisterDevice(IPAddress ipAddress) + { + Result result = await DeviceManagmentService.RegisterDevice(ipAddress, (await AuthenticationService.GetUserAsync()).ValueOrDefault); + + if (result.IsSuccess) + { + await MessageService.Success("Device added!"); + } + else + { + await MessageService.Error(string.Join(',', result.Errors.Select(e => e.Message)), "Adding device failed!"); + } + } + + public void ValidateIPv4(ValidatorEventArgs e) + { + string? input = Convert.ToString(e.Value); + + if (string.IsNullOrWhiteSpace(input)) + { + e.Status = ValidationStatus.None; + return; + } + + string[] splitValues = input.Split('.'); + if (splitValues.Length != 4) + { + e.Status = ValidationStatus.Error; + return; + } + + e.Status = splitValues.All(r => byte.TryParse(r, out _)) ? ValidationStatus.Success : ValidationStatus.Error; + } } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 3c21487..6bf5c06 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -4,7 +4,6 @@ using Blazorise.Icons.Material; using Blazorise.Material; using Elektrifikatsiya.Database; -using Elektrifikatsiya.Models; using Elektrifikatsiya.Services; using Elektrifikatsiya.Services.Implementations; @@ -22,13 +21,12 @@ builder.Services.AddTransient() builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); -builder.Services.AddDbContext(options => options.UseSqlite("Data Source=./UserDatabase.sqlite")); -builder.Services.AddDbContext((options) => options.UseSqlite("Data Source=./DeviceManagement.sqlite")); +builder.Services.AddDbContext(options => options.UseSqlite("Data Source=./MainDatabase.sqlite")); builder.Services.AddBootstrapProviders(); builder.Services.AddHttpClient(); builder.Services.AddBlazorise(options => { - options.Immediate = true; + options.Immediate = true; }); AddBlazorise(builder.Services); @@ -38,9 +36,9 @@ WebApplication app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { - _ = app.UseExceptionHandler("/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - _ = app.UseHsts(); + _ = app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + _ = app.UseHsts(); } app.UseHttpsRedirection(); @@ -53,16 +51,13 @@ app.MapFallbackToPage("/_Host"); app.MapControllers(); IServiceScope serviceScope = app.Services.GetRequiredService().CreateScope(); -serviceScope.ServiceProvider.GetRequiredService().Database.EnsureCreated(); - -AsyncServiceScope scope = app.Services.CreateAsyncScope(); -scope.ServiceProvider.GetRequiredService().Database.EnsureCreated(); +serviceScope.ServiceProvider.GetRequiredService().Database.EnsureCreated(); app.Run(); void AddBlazorise(IServiceCollection services) { - _ = services.AddBlazorise(); - _ = services.AddMaterialProviders(); - _ = services.AddMaterialIcons(); + _ = services.AddBlazorise(); + _ = services.AddMaterialProviders(); + _ = services.AddMaterialIcons(); } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs index 36ce68e..b0637e1 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs @@ -12,13 +12,13 @@ namespace Elektrifikatsiya.Services.Implementations; public class AuthenticationService : IAuthenticationService { - private readonly UserDatabaseContext userDatabaseContext; + private readonly MainDatabaseContext mainDatabaseContext; private readonly IHttpContextAccessor httpContextAccessor; private readonly ICookieService cookieService; - public AuthenticationService(UserDatabaseContext userDatabaseContext, IHttpContextAccessor httpContextAccessor, ICookieService cookieService) + public AuthenticationService(MainDatabaseContext mainDatabaseContext, IHttpContextAccessor httpContextAccessor, ICookieService cookieService) { - this.userDatabaseContext = userDatabaseContext; + this.mainDatabaseContext = mainDatabaseContext; this.httpContextAccessor = httpContextAccessor; this.cookieService = cookieService; } @@ -32,8 +32,8 @@ public class AuthenticationService : IAuthenticationService return getUserResult.ToResult(); } - _ = userDatabaseContext.Users.Remove(getUserResult.Value); - return (await Result.Try(() => userDatabaseContext.SaveChangesAsync())).ToResult(); + _ = mainDatabaseContext.Users.Remove(getUserResult.Value); + return (await Result.Try(() => mainDatabaseContext.SaveChangesAsync())).ToResult(); } public async Task> GetUserAsync() @@ -45,7 +45,7 @@ public class AuthenticationService : IAuthenticationService return Result.Fail("Token is not valid!"); } - User? user = await userDatabaseContext.Users.FirstOrDefaultAsync(u => u.SessionToken == token); + User? user = await mainDatabaseContext.Users.FirstOrDefaultAsync(u => u.SessionToken == token); if (user is null || DateTime.UtcNow - user.LastLoginDate > TimeSpan.FromDays(7)) { @@ -62,7 +62,7 @@ public class AuthenticationService : IAuthenticationService public async Task LoginUserAsync(string name, string password) { - User? user = await userDatabaseContext.Users.FirstOrDefaultAsync(u => u.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); + User? user = await mainDatabaseContext.Users.FirstOrDefaultAsync(u => u.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); if (user is null) { @@ -79,7 +79,7 @@ public class AuthenticationService : IAuthenticationService user.LastLoginDate = DateTime.UtcNow; user.SessionToken = newToken; - _ = await userDatabaseContext.SaveChangesAsync(); + _ = await mainDatabaseContext.SaveChangesAsync(); await cookieService.WriteCookieAsync("token", newToken, 7); @@ -97,7 +97,7 @@ public class AuthenticationService : IAuthenticationService return Result.Ok(); } - User? user = await userDatabaseContext.Users.FirstOrDefaultAsync(u => u.SessionToken == token); + User? user = await mainDatabaseContext.Users.FirstOrDefaultAsync(u => u.SessionToken == token); if (user is null) { @@ -106,7 +106,7 @@ public class AuthenticationService : IAuthenticationService user.SessionToken = null; - _ = await userDatabaseContext.SaveChangesAsync(); + _ = await mainDatabaseContext.SaveChangesAsync(); return Result.Ok(); } @@ -121,14 +121,14 @@ public class AuthenticationService : IAuthenticationService } User user = new User(name, BC.HashPassword(password), role); - _ = userDatabaseContext.Users.Add(user); + _ = mainDatabaseContext.Users.Add(user); - return (await Result.Try(() => userDatabaseContext.SaveChangesAsync())).ToResult(); + return (await Result.Try(() => mainDatabaseContext.SaveChangesAsync())).ToResult(); } public Task> UserExistsAsync(string name) { return Result.Try(() => - userDatabaseContext.Users.AnyAsync(u => u.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))); + mainDatabaseContext.Users.AnyAsync(u => u.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))); } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index 34916e0..b5df353 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -10,153 +10,153 @@ namespace Elektrifikatsiya.Services.Implementations; public class DeviceManagmentService : IDeviceManagmentService { - private readonly IServiceScopeFactory serviceScopeFactory; - private readonly IDeviceStatusService deviceStatusService; - private readonly ILogger logger; - private readonly HttpClient httpClient; + private readonly IServiceScopeFactory serviceScopeFactory; + private readonly IDeviceStatusService deviceStatusService; + private readonly ILogger logger; + private readonly HttpClient httpClient; - public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, ILogger logger, HttpClient httpClient) - { - this.serviceScopeFactory = serviceScopeFactory; - this.deviceStatusService = deviceStatusService; - this.logger = logger; - this.httpClient = httpClient; - } + public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, ILogger logger, HttpClient httpClient) + { + this.serviceScopeFactory = serviceScopeFactory; + this.deviceStatusService = deviceStatusService; + this.logger = logger; + this.httpClient = httpClient; + } - public Result GetDevice(string macAdress) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result GetDevice(string macAdress) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); + Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); - if (device is null) - { - return Result.Fail("Device does not exist!"); - } + if (device is null) + { + return Result.Fail("Device does not exist!"); + } - return device; - } + return device; + } - public Result> GetDevices() - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevices() + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.ToList(); - } + return getDevicesResult.Value.ToList(); + } - public Result> GetDevicesInRoom(string room) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevicesInRoom(string room) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.Where(d => d.Room == room).ToList(); - } + return getDevicesResult.Value.Where(d => d.Room == room).ToList(); + } - public Result> GetDevicesOfUser(int userId) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevicesOfUser(int userId) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); - } + return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); + } - public async Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default") - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); + public async Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default") + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); - ShellyResponse? shellyResponse = null; + ShellyResponse? shellyResponse = null; - try - { - shellyResponse = await httpClient.GetFromJsonAsync($"http://{ip}/shelly"); - } - catch (Exception ex) - { - logger.LogError("HTTP request failed! {message}", ex.Message); - } + try + { + shellyResponse = await httpClient.GetFromJsonAsync($"http://{ip}/shelly"); + } + catch (Exception ex) + { + logger.LogError("HTTP request failed! {message}", ex.Message); + } - if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") - { - return Result.Fail("Device is not reachable or not a \"SHPLG-S\"!"); - } + if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") + { + return Result.Fail("Device is not reachable or not a \"SHPLG-S\"!"); + } - string mac = shellyResponse.Mac; + string mac = shellyResponse.Mac; - if (!PhysicalAddress.TryParse(mac, out _)) - { - return Result.Fail("Invalid mac address!"); - } + if (!PhysicalAddress.TryParse(mac, out _)) + { + return Result.Fail("Invalid mac address!"); + } - Device device = new Device(mac, name ?? mac, ip, user, room); + Device device = new Device(mac, name ?? mac, ip, user, room); - _ = deviceManagmentDatabaseContext.Add(device); - Result saveDatabaseChangesResult = await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); + _ = mainDatabaseContext.Add(device); + Result saveDatabaseChangesResult = await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); - if (saveDatabaseChangesResult.IsFailed) - { - return saveDatabaseChangesResult; - } + if (saveDatabaseChangesResult.IsFailed) + { + return saveDatabaseChangesResult; + } - return deviceStatusService.TrackDevice(device); - } + return deviceStatusService.TrackDevice(device); + } - public async Task UnregisterDevice(string macAdress) - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); + public async Task UnregisterDevice(string macAdress) + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); - Result getDeviceResult = GetDevice(macAdress); + Result getDeviceResult = GetDevice(macAdress); - if (getDeviceResult.IsFailed) - { - return getDeviceResult.ToResult(); - } + if (getDeviceResult.IsFailed) + { + return getDeviceResult.ToResult(); + } - Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); + Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); - if (untrackDeviceResult.IsFailed) - { - return untrackDeviceResult; - } + if (untrackDeviceResult.IsFailed) + { + return untrackDeviceResult; + } - _ = deviceManagmentDatabaseContext.Remove(getDeviceResult.Value); + _ = mainDatabaseContext.Remove(getDeviceResult.Value); - return await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); - } + return await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); + } - public async Task UpdateDevice(Device device) - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService(); + public async Task UpdateDevice(Device device) + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); - Result result = deviceStatusService.UpdateDeviceStatus(device); + Result result = deviceStatusService.UpdateDeviceStatus(device); - if (result.IsFailed) - { - return result; - } + if (result.IsFailed) + { + return result; + } - _ = deviceManagmentDatabaseContext.Update(device); + _ = mainDatabaseContext.Update(device); - return await Result.Try(Task () => deviceManagmentDatabaseContext.SaveChangesAsync()); - } + return await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs index da74f9f..4055d80 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs @@ -1,8 +1,9 @@ using Elektrifikatsiya.Database; using Elektrifikatsiya.Models; + using FluentResults; + using Microsoft.EntityFrameworkCore; -using System.Threading.Tasks; namespace Elektrifikatsiya.Services.Implementations; @@ -22,22 +23,22 @@ public class UpdateService : IHostedService, IDisposable public async Task StartAsync(CancellationToken cancellationToken) { - IServiceScope serviceScope = serviceScopeFactory.CreateScope(); - DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = serviceScope.ServiceProvider.GetRequiredService(); + IServiceScope serviceScope = serviceScopeFactory.CreateScope(); + MainDatabaseContext mainDatabaseContext = serviceScope.ServiceProvider.GetRequiredService(); - logger.LogInformation("Starting update service..."); + logger.LogInformation("Starting update service..."); - foreach (Device device in await deviceManagmentDatabaseContext.Devices.AsNoTracking().ToListAsync(cancellationToken)) + foreach (Device device in await mainDatabaseContext.Devices.AsNoTracking().ToListAsync(cancellationToken)) { _ = deviceStatusService.TrackDevice(device); } - timer = new Timer(async (_) => await Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); + timer = new Timer((_) => Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); logger.LogInformation("Update service started."); } - private async Task Update() + private void Update() { Result> getDeviceStatusResult = deviceStatusService.GetDevices(); @@ -46,7 +47,7 @@ public class UpdateService : IHostedService, IDisposable logger.LogError("Updating devices failed!"); } - foreach(Device device in getDeviceStatusResult.Value) + foreach (Device device in getDeviceStatusResult.Value) { //TODO: Some update magic } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs index 55a8943..1041b79 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs @@ -1,4 +1,8 @@ -using System.Net; +using Elektrifikatsiya.Models; + +using Microsoft.Extensions.Caching.Memory; + +using System.Net; using Tmds.MDns; @@ -9,17 +13,56 @@ public static class MdnsDiscovery public static event Action OnDeviceFound = null!; private static readonly ServiceBrowser serviceBrowser = new ServiceBrowser(); + private static readonly HttpClient client = new(); + private static readonly MemoryCache memoryCache = new MemoryCache(new MemoryCacheOptions()); static MdnsDiscovery() { serviceBrowser.StartBrowse("_http._tcp"); - serviceBrowser.ServiceAdded += (_, eventArgs) => OnDeviceFound?.Invoke(eventArgs.Announcement.Addresses.First()); - serviceBrowser.ServiceChanged += (_, eventArgs) => OnDeviceFound?.Invoke(eventArgs.Announcement.Addresses.First()); - serviceBrowser.ServiceRemoved += (_, eventArgs) => OnDeviceFound?.Invoke(eventArgs.Announcement.Addresses.First()); + serviceBrowser.ServiceAdded += async (_, eventArgs) => await AddDevice(eventArgs.Announcement); + serviceBrowser.ServiceChanged += async (_, eventArgs) => await AddDevice(eventArgs.Announcement); + serviceBrowser.ServiceRemoved += async (_, eventArgs) => await AddDevice(eventArgs.Announcement); } - public static IEnumerable GetChachedDevices() + public static void FetchChachedDevices() { - return serviceBrowser.Services.Select(s => s.Addresses.First()); + serviceBrowser.Services.ToList().ForEach(async d => await AddDevice(d)); + } + + private static async Task AddDevice(ServiceAnnouncement announcement) + { + IPAddress ipAddress = announcement.Addresses.First(); + + if (!memoryCache.TryGetValue(ipAddress.ToString(), out bool isShellyDevice)) + { + isShellyDevice = await IsShellyDevice(ipAddress); + _ = memoryCache.Set(ipAddress.ToString(), isShellyDevice, TimeSpan.FromHours(1)); + } + + if (isShellyDevice) + { + OnDeviceFound?.Invoke(ipAddress); + } + } + + private static async Task IsShellyDevice(IPAddress ipAddress) + { + ShellyResponse? shellyResponse; + + try + { + shellyResponse = await client.GetFromJsonAsync($"http://{ipAddress}/shelly"); + } + catch (HttpRequestException) + { + return false; + } + + if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") + { + return false; + } + + return true; } } \ No newline at end of file From fc07db50ad8e19e7581772d105882a8f65973139 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:04:31 +0100 Subject: [PATCH 48/85] Design Improvements Addplug page new loading bar design, dashboard finetuning --- .../Components/Layout/SideMenu.razor | 12 ++- .../Elektrifikatsiya/DeviceManagement.sqlite | Bin 4096 -> 24576 bytes .../DeviceManagement.sqlite-shm | Bin 32768 -> 32768 bytes .../DeviceManagement.sqlite-wal | Bin 24752 -> 0 bytes .../Elektrifikatsiya/Elektrifikatsiya.csproj | 1 + .../Elektrifikatsiya/Pages/AddPlug.razor | 69 ++++++++++-------- .../Elektrifikatsiya/Pages/Dashboard.razor | 2 +- .../Elektrifikatsiya/Pages/_Host.cshtml | 1 + .../Elektrifikatsiya/_Imports.razor | 1 + 9 files changed, 51 insertions(+), 35 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor index c96b81f..01a573c 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor @@ -29,20 +29,24 @@ Add Plug - - Settings + + + + + + Logout + + @code { private bool pagesBarVisible = true; - - //TODO: replace logo png with transparent background one RenderFragment customIcon =@; } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite index 81dae899f351f43f4e0ef4b510c62a2f6b578c80..b7a73e251a9af12973c0b46e7f44df53659c3a0b 100644 GIT binary patch literal 24576 zcmeI&&u-H&90%|u{WDapWtUNjUM!zhZGaFjKxo|&Elo?BO06_eg~g1BHepQ$T)0ed zDATP`y_Ml7ezMucumqon5$DkoENL>H@R z^X9y;S8p`*9}iRi-IU82@~bGLdgd#eEibQDh$yt{UzkBK=Sf0|$3`A;dZG?(o3wh) zz;jK@@d)josXbHDcdf4Jj>#DtpU5DNKjUl5)sXdRdw4Z24<09Wa{c&NALlud%MyNd%_EWdMHJO7 ztmJ5I@F)_vCt_;z=8?WvKRndGFY=tpWz|?&tH}2_gy77o{FLM ziy|^q&Abn?4-^PM00Izz00bZa0SG_<0uX=z1a?&b@BdxREY1Z12tWV=5P$##AOHaf zKmY;|xD&wp|IPv}2tWV=5P$##AOHafKmY;|fWWQ_RI-EN|Npz1UYrX85P$##AOHaf nKmY;|fB*y_kPG1bkBa~S2tWV=5P$##AOHafKmY;|*nNS2>qP#F delta 26 gcmZoTz}TQLL7J73fq{W>Vxv8fp%*W;Nnj2?097*u{{R30 diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm index 69987d0f42d29ae6a46a1e437b19d668cf7fc743..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 100644 GIT binary patch delta 89 zcmZo@U}|V!;+1%$%K!t66BkO0TChv7nNGgVi7uf4lYpuIj|Mg_jCI<$LE9Dp%F!O} delta 205 zcmZo@U}|V!s+V}A%K!t63=9HnKn@7kWpovNd6s%WHV%7zbe6XV;S zhwZ^6*sLu&L(SHo58F-Gt#l9F{(RG|=krYiScObyO{&cp{8`(;h)JiZNsTnk6JL>Q zYDFc*g)>yAEDLEhpH?$87EO)!$q6+n3V!mu^)maYS+F2hBWlIeth7Mu+nW zGQ(zdh_*AcJjj8x5_Q4KY6gotPYo-~#D9{Uvpw&YTPx1m-dgu$DS5WSN^aG1uRGPS z3tMGjaNYLmx_hlu&DiySEhW<}v!>34!ZO6P`RDxBenE8dZR6?hJC|epW^*fnU!gz% z0uX=z1Rwwb2tWV=5P$##Akdov{QLgazQBvmA3l9~7x{yIf!<6uW(5HVKmY;|fB*y_ z009U<00I!`5b)mt2;VQ*{%F1W`u>T4eSr=oR3QKX2tWV=5P$##AOHafKmY>0DZpRf zX#HMbYGruy4cT6a@|$>%fGeOt00Izz00bZa0SG_<0uX=z1bSJ3{|`Yq{JlW!@!GvD i=f^MX3-ofzF*gW600Izz00bZa0SG_<0uX>eQ{XQt*f=); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 4dca5d7..287aa77 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -37,6 +37,7 @@ + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index f14522f..687d8b5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -9,7 +9,7 @@ @inject IDeviceManagmentService DeviceManagmentService @inject IAuthenticationService AuthenticationService -
+
@@ -20,36 +20,42 @@ Shadow="Shadow.Remove" Border="Border.Is1.RoundedTop"> - Add a plug via wifi + + Add a plug via wifi + + + + + - - - - - - - - - - IP: @context.Item - - - - - - - - - - + + + + + + + + + + IP: @context.Item + + + + + + + + + + @@ -90,6 +96,8 @@ @code { List ipAddresses = new List(); + bool visible = true; + protected override void OnInitialized() { ipAddresses.AddRange(MdnsDiscovery.GetChachedDevices()); @@ -97,6 +105,7 @@ { ipAddresses.Add(address); InvokeAsync(StateHasChanged); + visible = false; }; } -} +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index bc6f13a..9eccde6 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -83,7 +83,7 @@ - +
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml index 3e71a2d..6f92073 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/_Host.cshtml @@ -6,3 +6,4 @@ } + \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/_Imports.razor b/src/Elektrifikatsiya/Elektrifikatsiya/_Imports.razor index 971248a..9dc4cde 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/_Imports.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/_Imports.razor @@ -10,3 +10,4 @@ @using Elektrifikatsiya @using Blazorise @using Blazorise.Charts +@using Blazorise.LoadingIndicator From 6ed83ad4aed1b02323213db688ed5b4433015e5a Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:26:47 +0100 Subject: [PATCH 49/85] yes --- src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index 687d8b5..1d92e85 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -9,7 +9,6 @@ @inject IDeviceManagmentService DeviceManagmentService @inject IAuthenticationService AuthenticationService -
@@ -91,7 +90,6 @@ -
@code { List ipAddresses = new List(); From ff37097c2f48a9c08ae511b6042f39f467543c5b Mon Sep 17 00:00:00 2001 From: Aldin296 <99395958+Aldin296@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:27:28 +0100 Subject: [PATCH 50/85] Settings Page responisve --- .../Elektrifikatsiya/DeviceManagement.sqlite | Bin 4096 -> 24576 bytes .../DeviceManagement.sqlite-shm | Bin 32768 -> 32768 bytes .../DeviceManagement.sqlite-wal | Bin 24752 -> 0 bytes .../Elektrifikatsiya/Pages/Settings.razor | 230 +++++++++--------- 4 files changed, 120 insertions(+), 110 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite index 81dae899f351f43f4e0ef4b510c62a2f6b578c80..b7a73e251a9af12973c0b46e7f44df53659c3a0b 100644 GIT binary patch literal 24576 zcmeI&&u-H&90%|u{WDapWtUNjUM!zhZGaFjKxo|&Elo?BO06_eg~g1BHepQ$T)0ed zDATP`y_Ml7ezMucumqon5$DkoENL>H@R z^X9y;S8p`*9}iRi-IU82@~bGLdgd#eEibQDh$yt{UzkBK=Sf0|$3`A;dZG?(o3wh) zz;jK@@d)josXbHDcdf4Jj>#DtpU5DNKjUl5)sXdRdw4Z24<09Wa{c&NALlud%MyNd%_EWdMHJO7 ztmJ5I@F)_vCt_;z=8?WvKRndGFY=tpWz|?&tH}2_gy77o{FLM ziy|^q&Abn?4-^PM00Izz00bZa0SG_<0uX=z1a?&b@BdxREY1Z12tWV=5P$##AOHaf zKmY;|xD&wp|IPv}2tWV=5P$##AOHafKmY;|fWWQ_RI-EN|Npz1UYrX85P$##AOHaf nKmY;|fB*y_kPG1bkBa~S2tWV=5P$##AOHafKmY;|*nNS2>qP#F delta 26 gcmZoTz}TQLL7J73fq{W>Vxv8fp%*W;Nnj2?097*u{{R30 diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm index 69987d0f42d29ae6a46a1e437b19d668cf7fc743..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 100644 GIT binary patch delta 89 zcmZo@U}|V!;+1%$%K!t66BkO0TChv7nNGgVi7uf4lYpuIj|Mg_jCI<$LE9Dp%F!O} delta 205 zcmZo@U}|V!s+V}A%K!t63=9HnKn@7kWpovNd6s%WHV%7zbe6XV;S zhwZ^6*sLu&L(SHo58F-Gt#l9F{(RG|=krYiScObyO{&cp{8`(;h)JiZNsTnk6JL>Q zYDFc*g)>yAEDLEhpH?$87EO)!$q6+n3V!mu^)maYS+F2hBWlIeth7Mu+nW zGQ(zdh_*AcJjj8x5_Q4KY6gotPYo-~#D9{Uvpw&YTPx1m-dgu$DS5WSN^aG1uRGPS z3tMGjaNYLmx_hlu&DiySEhW<}v!>34!ZO6P`RDxBenE8dZR6?hJC|epW^*fnU!gz% z0uX=z1Rwwb2tWV=5P$##Akdov{QLgazQBvmA3l9~7x{yIf!<6uW(5HVKmY;|fB*y_ z009U<00I!`5b)mt2;VQ*{%F1W`u>T4eSr=oR3QKX2tWV=5P$##AOHafKmY>0DZpRf zX#HMbYGruy4cT6a@|$>%fGeOt00Izz00bZa0SG_<0uX=z1bSJ3{|`Yq{JlW!@!GvD i=f^MX3-ofzF*gW600Izz00bZa0SG_<0uX>eQ{XQt*f=); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index fa1eff0..b58022e 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -2,124 +2,134 @@ @using Blazorise.Components; @using Elektrifikatsiya.Models; @using System.Net - - - - - Plugs - - - - - - - +
+ +
+ + + + Plugs + + + + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User +
+ Room: @context.Item.Room +
+
+
+ + + + +
+
- - @context.Item.Name - + + + - - - User: @context.Item.User -
- Room: @context.Item.Room -
-
-
- - - - - - - - - - - - - - -
- Plug Name -
- - Here you can change the Name of your Plug - -
- -
-
-
- - -
- Change Max Output -
- - Here you can limit how much Power your Plug uses - -
- -
-
-
- - -
- Electricity Price -
- - Here you enter your electricity price. This is gonna calculate the overall Price of your System - -
- -
-
-
- - -
- Select Room -
- - Here you select or change the Room where you use your Plug. - -
+ + + + + +
+ + + +
+ Plug Name +
+ + Here you can change the Name of your Plug + +
+ +

- - Rooms - - Room 1 - - Room 2 - - Room 3 - - - +
+ + +
+ Change Max Output +
+ + Here you can limit how much Power your Plug uses + +
+ +
+
+
+ + +
+ Electricity Price +
+ + Here you enter your electricity price. This is gonna calculate the overall Price of your System + +
+ +
+
+
+ + +
+ Select Room +
+ + Here you select or change the Room where you use your Plug. + +
+
+ + Rooms + + Room 1 + + Room 2 + + Room 3 + + +
+
+
+
-
@code { From 8c1c78d1454c75bab96c615cdfa5497581ac3add Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:58:34 +0100 Subject: [PATCH 51/85] Update Addplug yes --- .../Elektrifikatsiya/Pages/AddPlug.razor | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index 1d92e85..a779fc5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -33,7 +33,8 @@ Data="@ipAddresses" TextField="@((_)=>(""))" ValueField="@((_)=>(""))" - Mode="ListGroupMode.Static"> + Mode="ListGroupMode.Static" + Style="border-radius: 0px 0px"> @@ -94,16 +95,33 @@ @code { List ipAddresses = new List(); - bool visible = true; + bool visible = false; + + DateTime time = DateTime.UtcNow; protected override void OnInitialized() { ipAddresses.AddRange(MdnsDiscovery.GetChachedDevices()); + + System.Timers.Timer aTimer = new System.Timers.Timer(1000); + aTimer.Elapsed += (_, _) => { + DateTime dateTime = DateTime.UtcNow; + if(dateTime >= time.AddSeconds(5)) + { + visible = false; + InvokeAsync(StateHasChanged); + } + }; + aTimer.Start(); + MdnsDiscovery.OnDeviceFound += address => { + visible = true; + ipAddresses.Add(address); InvokeAsync(StateHasChanged); - visible = false; + + time = DateTime.UtcNow; }; } } \ No newline at end of file From 0aff5026d306ec50b745a069f704d306fdfdadbe Mon Sep 17 00:00:00 2001 From: Aldin296 <99395958+Aldin296@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:58:56 +0100 Subject: [PATCH 52/85] fixed responsive design in AddPlug page --- .../DeviceManagement.sqlite-shm | Bin 32768 -> 0 bytes .../DeviceManagement.sqlite-wal | 0 .../Elektrifikatsiya/Pages/AddPlug.razor | 4 ++-- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 32768 -> 0 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 5 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-wal delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 + @@ -58,7 +58,7 @@ - + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Wed, 22 Mar 2023 11:21:14 +0100 Subject: [PATCH 53/85] Settings improvement --- .../Components/Layout/SideMenu.razor | 12 +- .../DeviceManagement.sqlite-shm | Bin 0 -> 32768 bytes .../DeviceManagement.sqlite-wal | 0 .../Elektrifikatsiya/Pages/AddPlug.razor | 158 ++++++------ .../Elektrifikatsiya/Pages/Settings.razor | 240 +++++++++--------- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 0 -> 32768 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 7 files changed, 208 insertions(+), 202 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-wal create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor index 01a573c..956a1a0 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/SideMenu.razor @@ -23,18 +23,18 @@ Admin - - - - Add Plug - - Settings + + + + Add Plug + + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 - - - - - - - Add a plug via wifi - - - - - - - - - - - - - - - - - IP: @context.Item - - - - - - - - - - - - - - + + - - - - - Add a plug via IP - - - - -
- - - -
- -
-
-
-
-
-
- + + + + Add a plug via wifi + + + + + + + + + + + + + + + + + IP: @context.Item + + + + + + + + + +
+
+ + + + + + + + Add a plug via IP + + + + +
+ + + +
+ +
+
+
+
+
+
+ +
+
@code { List ipAddresses = new List(); @@ -106,7 +106,7 @@ System.Timers.Timer aTimer = new System.Timers.Timer(1000); aTimer.Elapsed += (_, _) => { DateTime dateTime = DateTime.UtcNow; - if(dateTime >= time.AddSeconds(5)) + if(dateTime >= time.AddSeconds(3)) { visible = false; InvokeAsync(StateHasChanged); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index b58022e..b9ba91d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -3,129 +3,131 @@ @using Elektrifikatsiya.Models; @using System.Net
- +
- - - - Plugs - - - - - - - - - - - @context.Item.Name - - - - - User: @context.Item.User -
- Room: @context.Item.Room -
-
-
- - - - -
-
+ + + + Plugs + + + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User +
+ Room: @context.Item.Room +
+
+
+ + + + +
+
+ - - +
-
-
-
-
-
- - - -
- Plug Name -
- - Here you can change the Name of your Plug - -
- -
-
-
- - -
- Change Max Output -
- - Here you can limit how much Power your Plug uses - -
- -
-
-
- - -
- Electricity Price -
- - Here you enter your electricity price. This is gonna calculate the overall Price of your System - -
- -
-
-
- - -
- Select Room -
- - Here you select or change the Room where you use your Plug. - -
-
- - Rooms - - Room 1 - - Room 2 - - Room 3 - - -
- - + + + + + + + + + + + -
@@ -133,8 +135,12 @@ @code { - - List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; + private bool hideButtonSettings = true; + + private void Toggle() + { + hideButtonSettings = !hideButtonSettings; + } } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 Date: Wed, 22 Mar 2023 14:09:30 +0100 Subject: [PATCH 54/85] UHHHM * Added Login System * Added Query from Prom * Changed Dashboard to display data --- .../Components/Layout/NewFile.txt | 1 + .../Components/Protected.razor | 42 +++++++ .../Elektrifikatsiya/Elektrifikatsiya.csproj | 12 +- .../Layouts/LoginLayout.razor | 34 ++++- .../Elektrifikatsiya/Layouts/MainLayout.razor | 39 +++--- ...0230322092207_fix foreign keys.Designer.cs | 96 +++++++++++++++ .../20230322092207_fix foreign keys.cs | 68 ++++++++++ .../MainDatabaseContextModelSnapshot.cs | 93 ++++++++++++++ .../Elektrifikatsiya/Models/Device.cs | 2 +- .../Models/PrometheusQueryResult.cs | 52 +++++++- .../Elektrifikatsiya/Models/User.cs | 11 +- .../Elektrifikatsiya/Pages/Dashboard.razor | 50 +++++--- .../Elektrifikatsiya/Program.cs | 12 +- .../Properties/launchSettings.json | 2 +- .../Implementations/AuthenticationService.cs | 4 +- .../Implementations/DeviceManagmentService.cs | 3 + .../Services/Implementations/UpdateService.cs | 116 +++++++++--------- .../Utilities/MdnsDiscovery.cs | 2 +- .../Utilities/PrometheusQuery.cs | 11 +- src/Elektrifikatsiya/docker-compose.yml | 13 +- 20 files changed, 554 insertions(+), 109 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/NewFile.txt create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Components/Protected.razor create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Migrations/20230322092207_fix foreign keys.Designer.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Migrations/20230322092207_fix foreign keys.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Migrations/MainDatabaseContextModelSnapshot.cs diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/NewFile.txt b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/NewFile.txt new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Layout/NewFile.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/Protected.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Protected.razor new file mode 100644 index 0000000..38b04b4 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Components/Protected.razor @@ -0,0 +1,42 @@ +@using Elektrifikatsiya.Models +@inject Services.IAuthorizationService AuthorizationService + +@if (IsAuthorized) +{ + @Authorized +} +else if (!loaded && UseLoadingScreen) +{ + @Loading +} +else if (loaded) +{ + @NotAuthorized +} + +@code { + [Parameter] + public RenderFragment? Authorized { get; set; } + + [Parameter] + public RenderFragment? NotAuthorized { get; set; } + + [Parameter] + public RenderFragment? Loading { get; set; } + + [Parameter] + public Role RequiredRole { get; set; } + + [Parameter] + public bool UseLoadingScreen { get; set; } + + public bool IsAuthorized { get; set; } + private bool loaded; + + protected override async Task OnParametersSetAsync() + { + IsAuthorized = (await AuthorizationService.IsAuthorized(RequiredRole)).ValueOrDefault; + StateHasChanged(); + loaded = true; + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 4dca5d7..c19f966 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -40,10 +40,14 @@ - - - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor index 4962196..83982b9 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor @@ -1,18 +1,40 @@ @using System.Diagnostics; +@using FluentResults +@inject Elektrifikatsiya.Services.IAuthenticationService AuthenticationService +@inject NavigationManager NavigationManager @inherits LayoutComponentBase - + - + - + @code { - private void Clicked() + private string username = string.Empty; + private string password = string.Empty; + private Color color = Color.Primary; + private bool disabled; + private async Task Clicked() { - Debug.WriteLine("Button was clicked!"); + color = Color.Primary; + disabled = true; + + Result loginResult = await AuthenticationService.LoginUserAsync(username, password); + + if (loginResult.IsSuccess) + { + NavigationManager.NavigateTo("/", true); + } + else + { + color = Color.Danger; + disabled = false; + } } -} \ No newline at end of file +} + + \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor index e268a9f..1cc0b66 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/MainLayout.razor @@ -1,15 +1,26 @@ -@using Elektrifikatsiya.Components.Layout +@using Elektrifikatsiya.Components +@using Elektrifikatsiya.Components.Layout +@using Elektrifikatsiya.Models @inherits LayoutComponentBase - - - - - - - - - - @Body - - - +@inject NavigationManager NavigationManager + + + + + + + + + + + @Body + + + + + + @{ + NavigationManager.NavigateTo("/login"); + } + + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Migrations/20230322092207_fix foreign keys.Designer.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Migrations/20230322092207_fix foreign keys.Designer.cs new file mode 100644 index 0000000..1b26893 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Migrations/20230322092207_fix foreign keys.Designer.cs @@ -0,0 +1,96 @@ +// +using System; +using Elektrifikatsiya.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elektrifikatsiya.Migrations +{ + [DbContext(typeof(MainDatabaseContext))] + [Migration("20230322092207_fix foreign keys")] + partial class fixforeignkeys + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.4"); + + modelBuilder.Entity("Elektrifikatsiya.Models.Device", b => + { + b.Property("MacAddress") + .HasColumnType("TEXT"); + + b.Property("IpAddress") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Room") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("MacAddress"); + + b.HasIndex("UserId"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("Elektrifikatsiya.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("LastLoginDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PasswordHash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Role") + .HasColumnType("INTEGER"); + + b.Property("SessionToken") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("Elektrifikatsiya.Models.Device", b => + { + b.HasOne("Elektrifikatsiya.Models.User", "User") + .WithMany("Devices") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Elektrifikatsiya.Models.User", b => + { + b.Navigation("Devices"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Migrations/20230322092207_fix foreign keys.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Migrations/20230322092207_fix foreign keys.cs new file mode 100644 index 0000000..4617cb2 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Migrations/20230322092207_fix foreign keys.cs @@ -0,0 +1,68 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Elektrifikatsiya.Migrations +{ + /// + public partial class fixforeignkeys : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Name = table.Column(type: "TEXT", nullable: false), + PasswordHash = table.Column(type: "TEXT", nullable: false), + Role = table.Column(type: "INTEGER", nullable: false), + SessionToken = table.Column(type: "TEXT", nullable: true), + LastLoginDate = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Devices", + columns: table => new + { + MacAddress = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + IpAddress = table.Column(type: "TEXT", nullable: false), + UserId = table.Column(type: "INTEGER", nullable: false), + Room = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Devices", x => x.MacAddress); + table.ForeignKey( + name: "FK_Devices_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_Devices_UserId", + table: "Devices", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Devices"); + + migrationBuilder.DropTable( + name: "Users"); + } + } +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Migrations/MainDatabaseContextModelSnapshot.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Migrations/MainDatabaseContextModelSnapshot.cs new file mode 100644 index 0000000..01b1092 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Migrations/MainDatabaseContextModelSnapshot.cs @@ -0,0 +1,93 @@ +// +using System; +using Elektrifikatsiya.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Elektrifikatsiya.Migrations +{ + [DbContext(typeof(MainDatabaseContext))] + partial class MainDatabaseContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.4"); + + modelBuilder.Entity("Elektrifikatsiya.Models.Device", b => + { + b.Property("MacAddress") + .HasColumnType("TEXT"); + + b.Property("IpAddress") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Room") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("INTEGER"); + + b.HasKey("MacAddress"); + + b.HasIndex("UserId"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("Elektrifikatsiya.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("LastLoginDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PasswordHash") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Role") + .HasColumnType("INTEGER"); + + b.Property("SessionToken") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("Elektrifikatsiya.Models.Device", b => + { + b.HasOne("Elektrifikatsiya.Models.User", "User") + .WithMany("Devices") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Elektrifikatsiya.Models.User", b => + { + b.Navigation("Devices"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs index 4d15c15..815208e 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs @@ -19,7 +19,7 @@ public class Device public User User { get; set; } [NotMapped] - public int PowerUsage { get; set; } + public double PowerUsage { get; set; } public string Room { get; set; } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs index 9732592..2192c33 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs @@ -1,5 +1,4 @@ using System.Text.Json.Serialization; - namespace Elektrifikatsiya.Models; public enum Status @@ -24,6 +23,8 @@ public class PrometheusQueryResult public string? Error { get; set; } public List? Warnings { get; set; } + public PrometheusDataWrapper? Data { get; set; } + public PrometheusQueryResult(Status status, string? errorType, string? error, List? warnings) { Status = status; @@ -33,7 +34,7 @@ public class PrometheusQueryResult } } -internal class PrometheusDataWrapper +public class PrometheusDataWrapper { public ResultType ResultType { get; set; } public List Result { get; set; } @@ -43,9 +44,52 @@ internal class PrometheusDataWrapper ResultType = resultType; Result = result; } + + public FluentResults.Result> MatrixTypeToTimestampFloatTuple() + { + if (ResultType != ResultType.Matrix) + { + return FluentResults.Result.Fail("The response did not have the Matrix Type"); + } + + List<(double, double)> result = new List<(double, double)>(); + + if (Result[0]?.Value is null) + { + return FluentResults.Result.Fail("There was no result in the Response Body"); + } + + foreach (PrometheusData prometheusData in Result) + { + + string[] segment = prometheusData.Value.ToString()!.Split(","); + + result.Add((Convert.ToDouble(segment[0][2..^1]), Convert.ToDouble(segment[1][1..^2]))); + } + + return result; + } + + public FluentResults.Result<(double, double)> VectorTypeToTimestampFloatTuple() + { + if (ResultType != ResultType.Vector) + { + return FluentResults.Result.Fail("The response did not have the Vector Type"); + } + + string[]? segment = Result.FirstOrDefault()?.Value.ToString()?.Split(",") ?? null; + + if (segment is null) + { + return FluentResults.Result.Fail("There was no result in the Response Body"); + } + + return((Convert.ToDouble(segment[0][2..^1]), Convert.ToDouble(segment[1][1..^2]))); + } } -internal class PrometheusDataMetric + +public class PrometheusDataMetric { [JsonPropertyName("__name__")] public string Name { get; set; } @@ -60,7 +104,7 @@ internal class PrometheusDataMetric } } -internal class PrometheusData +public class PrometheusData { public PrometheusDataMetric Metric { get; set; } public object Value { get; set; } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs index 175c25d..be6b1d8 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs @@ -9,11 +9,20 @@ public class User [Key] public int Id { get; private set; } + [Required] public string Name { get; private set; } + + [Required] public string PasswordHash { get; private set; } + + [Required] + public Role Role { get; set; } + public string? SessionToken { get; set; } public DateTime LastLoginDate { get; set; } - public Role Role { get; set; } + + [Required] + public List Devices { get; set; } = new(); public User(string name, string passwordHash, Role role) { diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index a379b41..2b96602 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -2,8 +2,11 @@ @using Blazorise.Components; @using Elektrifikatsiya.Models; @using System.Net +@using Elektrifikatsiya.Services +@using Elektrifikatsiya.Utilities +@using System.Diagnostics @inject IVersionProvider VersionProvider - +@inject IDeviceStatusService DeviceStatusService
@@ -91,10 +94,20 @@ //TODO: insert new event here if plug produces one List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; //TODO: insert new Device here if user adds one - List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; + List plugs = new List(); //code for graph LineChart lineChart; + protected override void OnInitialized() + { + plugs = DeviceStatusService.GetDevices().ValueOrDefault ?? new List(); + + DeviceStatusService.OnDeviceStatusChanged += (_, e) => + { + InvokeAsync(StateHasChanged); + }; + } + protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) @@ -105,18 +118,19 @@ async Task HandleRedraw() { + await lineChart.Clear(); - await lineChart.AddLabelsDatasetsAndUpdate(Labels, GetLineChartDataset()); + await lineChart.AddLabelsDatasetsAndUpdate(Labels, await GetLineChartDataset()); } //TODO: insert dataset of current and last voltage usages - LineChartDataset GetLineChartDataset() + async Task> GetLineChartDataset() { return new LineChartDataset { Label = "# of random number in thousands", - Data = RandomizeData(), + Data = await RandomizeData(), BackgroundColor = backgroundColors, BorderColor = borderColors, Fill = true, @@ -129,17 +143,25 @@ List backgroundColors = new List { ChartColor.FromRgba(255, 99, 132, 0.2f), ChartColor.FromRgba(54, 162, 235, 0.2f), ChartColor.FromRgba(255, 206, 86, 0.2f), ChartColor.FromRgba(75, 192, 192, 0.2f), ChartColor.FromRgba(153, 102, 255, 0.2f), ChartColor.FromRgba(255, 159, 64, 0.2f) }; List borderColors = new List { ChartColor.FromRgba(255, 99, 132, 1f), ChartColor.FromRgba(54, 162, 235, 1f), ChartColor.FromRgba(255, 206, 86, 1f), ChartColor.FromRgba(75, 192, 192, 1f), ChartColor.FromRgba(153, 102, 255, 1f), ChartColor.FromRgba(255, 159, 64, 1f) }; - List RandomizeData() + async Task> RandomizeData() { + PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); + + string plugnames = ""; + foreach (Device device in plugs) + { + plugnames += $"shellyplug-s-{device.MacAddress}/relay/0|"; + } + plugnames = plugnames[0..^1]; + + Debug.WriteLine($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""); + + PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; + var r = new Random(DateTime.Now.Millisecond); - return new List { - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble() }; + return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => x.Item2).ToList() ?? new List(); } -} +} +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 6bf5c06..a9408b5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -4,6 +4,7 @@ using Blazorise.Icons.Material; using Blazorise.Material; using Elektrifikatsiya.Database; +using Elektrifikatsiya.Models; using Elektrifikatsiya.Services; using Elektrifikatsiya.Services.Implementations; @@ -51,7 +52,16 @@ app.MapFallbackToPage("/_Host"); app.MapControllers(); IServiceScope serviceScope = app.Services.GetRequiredService().CreateScope(); -serviceScope.ServiceProvider.GetRequiredService().Database.EnsureCreated(); + +MainDatabaseContext mainDatabase = serviceScope.ServiceProvider.GetRequiredService(); +mainDatabase.Database.EnsureCreated(); + +IAuthenticationService authenticationService = serviceScope.ServiceProvider.GetRequiredService(); + +if (!mainDatabase.Users.Any()) +{ + authenticationService.RegisterUserAsync("admin", "admin", Role.Admin); +} app.Run(); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json index fe359ad..a35b142 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Properties/launchSettings.json @@ -7,7 +7,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "https://localhost:56656;http://localhost:5255" + "applicationUrl": "https://localhost:56656;http://localhost:55552" }, "IIS Express": { "commandName": "IISExpress", diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs index b0637e1..69b3ba9 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs @@ -62,7 +62,7 @@ public class AuthenticationService : IAuthenticationService public async Task LoginUserAsync(string name, string password) { - User? user = await mainDatabaseContext.Users.FirstOrDefaultAsync(u => u.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)); + User? user = await mainDatabaseContext.Users.FirstOrDefaultAsync(u => u.Name == name); if (user is null) { @@ -129,6 +129,6 @@ public class AuthenticationService : IAuthenticationService public Task> UserExistsAsync(string name) { return Result.Try(() => - mainDatabaseContext.Users.AnyAsync(u => u.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase))); + mainDatabaseContext.Users.AnyAsync(u => u.Name == name)); } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index b5df353..3343c76 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -5,6 +5,7 @@ using FluentResults; using System.Net; using System.Net.NetworkInformation; +using Microsoft.EntityFrameworkCore; namespace Elektrifikatsiya.Services.Implementations; @@ -108,6 +109,8 @@ public class DeviceManagmentService : IDeviceManagmentService Device device = new Device(mac, name ?? mac, ip, user, room); + mainDatabaseContext.Entry(user).State = EntityState.Unchanged; + _ = mainDatabaseContext.Add(device); Result saveDatabaseChangesResult = await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs index 4055d80..a0b7ef0 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs @@ -1,6 +1,6 @@ using Elektrifikatsiya.Database; using Elektrifikatsiya.Models; - +using Elektrifikatsiya.Utilities; using FluentResults; using Microsoft.EntityFrameworkCore; @@ -9,69 +9,75 @@ namespace Elektrifikatsiya.Services.Implementations; public class UpdateService : IHostedService, IDisposable { - private readonly ILogger logger; - private readonly IDeviceStatusService deviceStatusService; - private readonly IServiceScopeFactory serviceScopeFactory; - private Timer? timer = null; + private readonly ILogger logger; + private readonly IDeviceStatusService deviceStatusService; + private readonly IServiceScopeFactory serviceScopeFactory; + private Timer? timer = null; - public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, IServiceScopeFactory serviceScopeFactory) - { - this.logger = logger; - this.deviceStatusService = deviceStatusService; - this.serviceScopeFactory = serviceScopeFactory; - } + public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, IServiceScopeFactory serviceScopeFactory) + { + this.logger = logger; + this.deviceStatusService = deviceStatusService; + this.serviceScopeFactory = serviceScopeFactory; + } - public async Task StartAsync(CancellationToken cancellationToken) - { - IServiceScope serviceScope = serviceScopeFactory.CreateScope(); - MainDatabaseContext mainDatabaseContext = serviceScope.ServiceProvider.GetRequiredService(); + public async Task StartAsync(CancellationToken cancellationToken) + { + IServiceScope serviceScope = serviceScopeFactory.CreateScope(); + MainDatabaseContext mainDatabaseContext = serviceScope.ServiceProvider.GetRequiredService(); - logger.LogInformation("Starting update service..."); + logger.LogInformation("Starting update service..."); - foreach (Device device in await mainDatabaseContext.Devices.AsNoTracking().ToListAsync(cancellationToken)) - { - _ = deviceStatusService.TrackDevice(device); + foreach (Device device in await mainDatabaseContext.Devices.Include(d=>d.User).AsNoTracking().ToListAsync(cancellationToken)) + { + _ = deviceStatusService.TrackDevice(device); + } + + timer = new Timer((_) => Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); + + logger.LogInformation("Update service started."); + } + + private async void Update() + { + Result> getDeviceStatusResult = deviceStatusService.GetDevices(); + + if (getDeviceStatusResult.IsFailed) + { + logger.LogError("Updating devices failed!"); + } + PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); + foreach (Device device in getDeviceStatusResult.Value) + { + PrometheusDataWrapper? deviceData = (await promQueryer.Query($"power{{sensor=\"shellyplug-s-{device.MacAddress}/relay/0\"}}"))?.Data; + + if (deviceData is not null) + { + device.PowerUsage = deviceData.VectorTypeToTimestampFloatTuple()?.ValueOrDefault.Item2 ?? 0; + deviceStatusService.UpdateDeviceStatus(device); + } } + } - timer = new Timer((_) => Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); + public Task StopAsync(CancellationToken cancellationToken) + { + logger.LogInformation("Stopping update service."); - logger.LogInformation("Update service started."); - } + _ = timer?.Change(Timeout.Infinite, 0); - private void Update() - { - Result> getDeviceStatusResult = deviceStatusService.GetDevices(); + logger.LogInformation("Stopped update service."); - if (getDeviceStatusResult.IsFailed) - { - logger.LogError("Updating devices failed!"); - } + return Task.CompletedTask; + } - foreach (Device device in getDeviceStatusResult.Value) - { - //TODO: Some update magic - } - } + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } - public Task StopAsync(CancellationToken cancellationToken) - { - logger.LogInformation("Stopping update service."); - - _ = timer?.Change(Timeout.Infinite, 0); - - logger.LogInformation("Stopped update service."); - - return Task.CompletedTask; - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - timer?.Dispose(); - } + protected virtual void Dispose(bool disposing) + { + timer?.Dispose(); + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs index 1041b79..813c50c 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/MdnsDiscovery.cs @@ -31,7 +31,7 @@ public static class MdnsDiscovery private static async Task AddDevice(ServiceAnnouncement announcement) { - IPAddress ipAddress = announcement.Addresses.First(); + IPAddress ipAddress = announcement.Addresses.First(); if (!memoryCache.TryGetValue(ipAddress.ToString(), out bool isShellyDevice)) { diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs index a635857..456521f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs @@ -2,6 +2,7 @@ using System.Net.Sockets; using System.Text.Encodings.Web; using System.Text.Json; +using System.Text.Json.Serialization; using Elektrifikatsiya.Models; using FluentResults; @@ -20,6 +21,14 @@ public class PrometheusQuery public Task Query(string query) { - return client.GetFromJsonAsync($"/v1/query?{UrlEncoder.Create().Encode(query)}"); + var res = client.GetStringAsync($"/api/v1/query?query={UrlEncoder.Create().Encode(query)}").Result; + return client.GetFromJsonAsync($"/api/v1/query?query={UrlEncoder.Create().Encode(query)}", new JsonSerializerOptions() + { + PropertyNameCaseInsensitive = true, + Converters = + { + new JsonStringEnumConverter() + } + }); } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/docker-compose.yml b/src/Elektrifikatsiya/docker-compose.yml index dc7c374..70891b2 100644 --- a/src/Elektrifikatsiya/docker-compose.yml +++ b/src/Elektrifikatsiya/docker-compose.yml @@ -1,10 +1,15 @@ version: '3.4' services: - elektrifikatsiya: - build: - context: . - dockerfile: Elektrifikatsiya/Dockerfile + #elektrifikatsiya: + # build: + # context: . + # dockerfile: Elektrifikatsiya/Dockerfile + # ports: + # - target: 5353 + # published: 5353 + # protocol: udp + # mode: host prometheus: image: prom/prometheus:latest volumes: From a73ba26b8f19618b68ad30c920d0fac93b15d43f Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 19 Apr 2023 08:27:04 +0200 Subject: [PATCH 55/85] yes --- .../DeviceManagement.sqlite-shm | Bin 32768 -> 0 bytes .../DeviceManagement.sqlite-wal | 0 .../Layouts/LoginLayout.razor | 21 +++++++++--------- .../Elektrifikatsiya/Pages/Settings.razor | 8 +++---- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 32768 -> 0 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 6 files changed, 14 insertions(+), 15 deletions(-) delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-wal delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 - - - - - - - + + + + + + + + + @code { - private void Clicked() - { - Debug.WriteLine("Button was clicked!"); - } + } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index b9ba91d..89b851b 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -43,7 +43,7 @@
@@ -69,7 +69,7 @@ Plug Name - Here you can change the Name of your Plug + Here you can change the name of your plug @@ -82,7 +82,7 @@ Change Max Output - Here you can limit how much Power your Plug uses + Here you can limit how much power your plug uses @@ -95,7 +95,7 @@ Select Room - Here you select or change the Room where you use your Plug. + Here you select or change the room the plug belongs to.
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Wed, 19 Apr 2023 09:46:32 +0200 Subject: [PATCH 56/85] verscuch button color zu wechseln, nicht geklappt (ignorieren) --- .../Elektrifikatsiya/Pages/Dashboard.razor | 12 +++++++++++- .../Elektrifikatsiya/Pages/Dashboard.razor.cs | 7 +------ .../Elektrifikatsiya/Pages/Settings.razor | 10 +++++++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 9eccde6..a2b1a5e 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -44,7 +44,8 @@
- @@ -143,5 +144,14 @@ r.Next( 3, 50 ) * r.NextDouble(), r.Next( 3, 50 ) * r.NextDouble() }; } + + //private Background buttonColor = Background.Primary; + + private void ChangeButtonColor() + { + //device.on = !device.on; + } + + } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs index ed25e93..fa4bbf2 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs @@ -18,11 +18,6 @@ namespace Elektrifikatsiya.Pages { public partial class Dashboard { - string bgcolor { get; set; } = "00f"; // (starting value) - void SetColor() - { - bgcolor = "#fd7"; - StateHasChanged(); // may not be required, but I'm at work right now, so can't check - } + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index b58022e..bb1bf15 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -42,8 +42,13 @@ -
@@ -136,5 +141,4 @@ List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; - } From a96dbddf3be785c86a95676bcb793dc7984897da Mon Sep 17 00:00:00 2001 From: Silence Date: Wed, 19 Apr 2023 09:49:31 +0200 Subject: [PATCH 57/85] admin --- .../Elektrifikatsiya/Pages/Admin.razor | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor new file mode 100644 index 0000000..af079a3 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor @@ -0,0 +1,28 @@ +@page "/admin" +@using Blazorise.Components +@using Elektrifikatsiya.Models; +@using System.Net +
+ +
+ + + + Users + + + + + + +
+
+
+@code { +} From 9eedadec4af328284c8bc389f73369f6289f244f Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 19 Apr 2023 10:12:13 +0200 Subject: [PATCH 58/85] yes2 --- .../Elektrifikatsiya/Database/MainDatabaseContext.cs | 1 + src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs | 2 +- src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs | 8 +++++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs index d58b2b1..95caf56 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs @@ -12,4 +12,5 @@ public class MainDatabaseContext : DbContext public DbSet Users { get; set; } public DbSet Devices { get; set; } + public DbSet Events { get; set; } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs index 815208e..b41d572 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs @@ -35,5 +35,5 @@ public class Device Room = room; } - private Device(){} + private Device(){} } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs index 5c76207..40c67ac 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs @@ -1,7 +1,13 @@ -namespace Elektrifikatsiya.Models +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace Elektrifikatsiya.Models { public class Event { + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Key] + public int Id { get; private set; } public string EventName { get; set; } public string Description { get; set; } public DateTime Date { get; set; } From f54b70ef63b9d8b6cb898037c66608e504255c7f Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 19 Apr 2023 10:18:47 +0200 Subject: [PATCH 59/85] Settings fix --- .../DeviceManagement.sqlite-shm | Bin 0 -> 32768 bytes .../DeviceManagement.sqlite-wal | 0 .../Elektrifikatsiya/Pages/Settings.razor | 199 +++++++++++++----- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 0 -> 32768 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 5 files changed, 148 insertions(+), 51 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-wal create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 - - - - Plugs - - - - - - - - - - @context.Item.Name - - - - - User: @context.Item.User -
- Room: @context.Item.Room -
- - @context.Item.PowerUsage W - -
-
- - - -
-
-
-
-
- +
+ +
+ + + + Plugs + + + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User +
+ Room: @context.Item.Room +
+
+
+ + + + +
+
+ + + + + + +
+
+
+
+
+ + + + + + + +
+
+
@code { - - List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; + private bool hideButtonSettings = true; + + private void Toggle() + { + hideButtonSettings = !hideButtonSettings; + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm new file mode 100644 index 0000000000000000000000000000000000000000..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 GIT binary patch literal 32768 zcmeIuAr62r3 Date: Wed, 19 Apr 2023 11:09:34 +0200 Subject: [PATCH 60/85] Fixes! --- .../Models/PrometheusQueryResult.cs | 26 +++++++++---------- .../Elektrifikatsiya/Pages/Dashboard.razor | 21 +++++++-------- src/Elektrifikatsiya/docker-compose.dcproj | 3 --- .../docker-compose.override.yml | 13 ---------- 4 files changed, 21 insertions(+), 42 deletions(-) delete mode 100644 src/Elektrifikatsiya/docker-compose.override.yml diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs index 2192c33..72ef231 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs @@ -1,4 +1,7 @@ -using System.Text.Json.Serialization; +using System.Diagnostics; +using System.Text.Json.Serialization; +using Microsoft.AspNetCore.Mvc.Diagnostics; + namespace Elektrifikatsiya.Models; public enum Status @@ -44,7 +47,7 @@ public class PrometheusDataWrapper ResultType = resultType; Result = result; } - + public FluentResults.Result> MatrixTypeToTimestampFloatTuple() { if (ResultType != ResultType.Matrix) @@ -54,19 +57,19 @@ public class PrometheusDataWrapper List<(double, double)> result = new List<(double, double)>(); - if (Result[0]?.Value is null) + if (Result[0]?.Values is null || Result[0]?.Values?[0] is null) { return FluentResults.Result.Fail("There was no result in the Response Body"); } - foreach (PrometheusData prometheusData in Result) + foreach (object value in Result[0].Values) { - string[] segment = prometheusData.Value.ToString()!.Split(","); + string[] segment = value.ToString()!.Split(","); result.Add((Convert.ToDouble(segment[0][2..^1]), Convert.ToDouble(segment[1][1..^2]))); } - + Debug.WriteLine(result); return result; } @@ -106,12 +109,7 @@ public class PrometheusDataMetric public class PrometheusData { - public PrometheusDataMetric Metric { get; set; } - public object Value { get; set; } - - public PrometheusData(PrometheusDataMetric metric, object value) - { - Metric = metric; - Value = value; - } + public PrometheusDataMetric? Metric { get; set; } = null; + public object? Value { get; set; } = null; + public List? Values { get; set; } = null; } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 2b96602..77373e1 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -118,10 +118,9 @@ async Task HandleRedraw() { - + labels.Clear(); await lineChart.Clear(); - - await lineChart.AddLabelsDatasetsAndUpdate(Labels, await GetLineChartDataset()); + await lineChart.AddLabelsDatasetsAndUpdate(labels, await GetLineChartDataset()); } //TODO: insert dataset of current and last voltage usages @@ -129,19 +128,15 @@ { return new LineChartDataset { - Label = "# of random number in thousands", + Label = "Wattage", Data = await RandomizeData(), - BackgroundColor = backgroundColors, - BorderColor = borderColors, Fill = true, PointRadius = 3, CubicInterpolationMode = "monotone", }; } - string[] Labels = { "Red", "Blue", "Yellow", "Green", "Purple", "Orange" }; - List backgroundColors = new List { ChartColor.FromRgba(255, 99, 132, 0.2f), ChartColor.FromRgba(54, 162, 235, 0.2f), ChartColor.FromRgba(255, 206, 86, 0.2f), ChartColor.FromRgba(75, 192, 192, 0.2f), ChartColor.FromRgba(153, 102, 255, 0.2f), ChartColor.FromRgba(255, 159, 64, 0.2f) }; - List borderColors = new List { ChartColor.FromRgba(255, 99, 132, 1f), ChartColor.FromRgba(54, 162, 235, 1f), ChartColor.FromRgba(255, 206, 86, 1f), ChartColor.FromRgba(75, 192, 192, 1f), ChartColor.FromRgba(153, 102, 255, 1f), ChartColor.FromRgba(255, 159, 64, 1f) }; + List labels = new List(); async Task> RandomizeData() { @@ -160,8 +155,10 @@ var r = new Random(DateTime.Now.Millisecond); - return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => x.Item2).ToList() ?? new List(); + return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => + { + labels.Add(DateTimeOffset.FromUnixTimeSeconds(long.Parse($"1{x.Item1}0")).UtcDateTime.ToLocalTime().ToShortTimeString()); + return x.Item2; + }).ToList() ?? new List(); } - -} } \ No newline at end of file diff --git a/src/Elektrifikatsiya/docker-compose.dcproj b/src/Elektrifikatsiya/docker-compose.dcproj index 8ee605c..8901d12 100644 --- a/src/Elektrifikatsiya/docker-compose.dcproj +++ b/src/Elektrifikatsiya/docker-compose.dcproj @@ -9,9 +9,6 @@ elektrifikatsiya - - docker-compose.yml - diff --git a/src/Elektrifikatsiya/docker-compose.override.yml b/src/Elektrifikatsiya/docker-compose.override.yml deleted file mode 100644 index 42bf3e9..0000000 --- a/src/Elektrifikatsiya/docker-compose.override.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: '3.4' - -services: - elektrifikatsiya: - environment: - - ASPNETCORE_ENVIRONMENT=Development - - ASPNETCORE_URLS=https://+:443;http://+:80 - ports: - - "80" - - "443" - volumes: - - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro - - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro \ No newline at end of file From c08740f9ffeef51092607700fe9e2bc13fe02e98 Mon Sep 17 00:00:00 2001 From: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Wed, 3 May 2023 09:02:33 +0200 Subject: [PATCH 61/85] Fix issue with 0 plugs --- .../Elektrifikatsiya/Models/PrometheusQueryResult.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs index 72ef231..7121698 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs @@ -57,12 +57,12 @@ public class PrometheusDataWrapper List<(double, double)> result = new List<(double, double)>(); - if (Result[0]?.Values is null || Result[0]?.Values?[0] is null) + if (Result.Count == 0 || Result[0]?.Values is null || Result[0]?.Values?[0] is null) { return FluentResults.Result.Fail("There was no result in the Response Body"); } - foreach (object value in Result[0].Values) + foreach (object value in Result[0]!.Values!) { string[] segment = value.ToString()!.Split(","); From 358bbdacce42c3e178f500c91a50c61fbfb2a44a Mon Sep 17 00:00:00 2001 From: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Wed, 3 May 2023 09:30:19 +0200 Subject: [PATCH 62/85] Fix merge bugs --- .../Elektrifikatsiya/Pages/AddPlug.razor | 79 ++++++++++++------- .../Elektrifikatsiya/Pages/Dashboard.razor | 78 ++++++++++-------- 2 files changed, 97 insertions(+), 60 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index 37fee70..d78020d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -6,12 +6,12 @@ @using Elektrifikatsiya.Services.Implementations @using Elektrifikatsiya.Utilities @using FluentResults; +@using Blazorise.LoadingIndicator; @inject IVersionProvider VersionProvider @inject IDeviceManagmentService DeviceManagmentService @inject IAuthenticationService AuthenticationService @inject IMessageService MessageService -@inject IAuthenticationService AuthenticationService @@ -27,8 +27,8 @@ Add a plug via wifi - - + + @@ -97,36 +97,61 @@ @code { - List ipAddresses = new List(); - List ipAddresses = new List(); - bool visible = false; + Validation? ipValidation; - DateTime time = DateTime.UtcNow; + bool visible = true; + + string ipText = null!; protected override void OnInitialized() { - ipAddresses.AddRange(MdnsDiscovery.GetChachedDevices()); - - System.Timers.Timer aTimer = new System.Timers.Timer(1000); - aTimer.Elapsed += (_, _) => { - DateTime dateTime = DateTime.UtcNow; - if(dateTime >= time.AddSeconds(3)) - { - visible = false; - InvokeAsync(StateHasChanged); - } - }; - aTimer.Start(); - - MdnsDiscovery.OnDeviceFound += address => + MdnsDiscovery.OnDeviceFound += async ipAddress => { - visible = true; - - ipAddresses.Add(address); - InvokeAsync(StateHasChanged); - - time = DateTime.UtcNow; + visible = false; + if (!ipAddresses.Contains(ipAddress)) + { + ipAddresses.Add(ipAddress); + await InvokeAsync(StateHasChanged); + } }; + + MdnsDiscovery.FetchChachedDevices(); } + + private async Task RegisterDevice(IPAddress ipAddress) + { + Result result = await DeviceManagmentService.RegisterDevice(ipAddress, (await AuthenticationService.GetUserAsync()).ValueOrDefault); + + if (result.IsSuccess) + { + await MessageService.Success("Device added!"); + } + else + { + await MessageService.Error(string.Join(',', result.Errors.Select(e => e.Message)), "Adding device failed!"); + } + } + + public void ValidateIPv4(ValidatorEventArgs e) + { + string? input = Convert.ToString(e.Value); + + if (string.IsNullOrWhiteSpace(input)) + { + e.Status = ValidationStatus.None; + return; + } + + string[] splitValues = input.Split('.'); + if (splitValues.Length != 4) + { + e.Status = ValidationStatus.Error; + return; + } + + e.Status = splitValues.All(r => byte.TryParse(r, out _)) ? ValidationStatus.Success : ValidationStatus.Error; + } + +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index a2b1a5e..5b11650 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -2,8 +2,13 @@ @using Blazorise.Components; @using Elektrifikatsiya.Models; @using System.Net +@using Elektrifikatsiya.Services +@using Elektrifikatsiya.Utilities +@using System.Diagnostics @inject IVersionProvider VersionProvider +@inject IDeviceStatusService DeviceStatusService; +
@@ -34,7 +39,7 @@ - User: @context.Item.User + User: @context.Item.User.Name
Room: @context.Item.Room
@@ -44,7 +49,7 @@
- @@ -92,12 +97,22 @@ @code { //TODO: insert new event here if plug produces one - List events = new List() { new Event("Placeholder", "Event", DateTime.Now), new Event("Placeholder", "Event", DateTime.Now), new Event("Placeholder", "Event", DateTime.Now) }; + List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; //TODO: insert new Device here if user adds one - List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; + List plugs = new List(); //code for graph LineChart lineChart; + protected override void OnInitialized() + { + plugs = DeviceStatusService.GetDevices().ValueOrDefault ?? new List(); + + DeviceStatusService.OnDeviceStatusChanged += (_, e) => + { + InvokeAsync(StateHasChanged); + }; + } + protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) @@ -108,50 +123,47 @@ async Task HandleRedraw() { + labels.Clear(); await lineChart.Clear(); - - await lineChart.AddLabelsDatasetsAndUpdate(Labels, GetLineChartDataset()); + await lineChart.AddLabelsDatasetsAndUpdate(labels, await GetLineChartDataset()); } //TODO: insert dataset of current and last voltage usages - LineChartDataset GetLineChartDataset() + async Task> GetLineChartDataset() { return new LineChartDataset { - Label = "# of random number in thousands", - Data = RandomizeData(), - BackgroundColor = backgroundColors, - BorderColor = borderColors, + Label = "Wattage", + Data = await RandomizeData(), Fill = true, PointRadius = 3, CubicInterpolationMode = "monotone", }; } - string[] Labels = { "Red", "Blue", "Yellow", "Green", "Purple", "Orange" }; - List backgroundColors = new List { ChartColor.FromRgba(255, 99, 132, 0.2f), ChartColor.FromRgba(54, 162, 235, 0.2f), ChartColor.FromRgba(255, 206, 86, 0.2f), ChartColor.FromRgba(75, 192, 192, 0.2f), ChartColor.FromRgba(153, 102, 255, 0.2f), ChartColor.FromRgba(255, 159, 64, 0.2f) }; - List borderColors = new List { ChartColor.FromRgba(255, 99, 132, 1f), ChartColor.FromRgba(54, 162, 235, 1f), ChartColor.FromRgba(255, 206, 86, 1f), ChartColor.FromRgba(75, 192, 192, 1f), ChartColor.FromRgba(153, 102, 255, 1f), ChartColor.FromRgba(255, 159, 64, 1f) }; + List labels = new List(); - List RandomizeData() + async Task> RandomizeData() { + PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); + + string plugnames = ""; + foreach (Device device in plugs) + { + plugnames += $"shellyplug-s-{device.MacAddress}/relay/0|"; + } + plugnames = plugnames[0..^1]; + + Debug.WriteLine($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""); + + PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; + var r = new Random(DateTime.Now.Millisecond); - return new List { - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble(), - r.Next( 3, 50 ) * r.NextDouble() }; + return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => + { + labels.Add(DateTimeOffset.FromUnixTimeSeconds(long.Parse($"1{x.Item1}0")).UtcDateTime.ToLocalTime().ToShortTimeString()); + return x.Item2; + }).ToList() ?? new List(); } - - //private Background buttonColor = Background.Primary; - - private void ChangeButtonColor() - { - //device.on = !device.on; - } - - -} - +} \ No newline at end of file From 54a65e98337de38d3feec7c1b87ab9ebe84c72b9 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 4 May 2023 21:45:47 +0200 Subject: [PATCH 63/85] Fix formatting and other stuff whoopsie --- .../Components/TodoApp/BaseTodoItems.cs | 74 ----- .../Components/TodoApp/Filter.cs | 8 - .../Components/TodoApp/Todo.cs | 8 - .../Components/TodoApp/TodoItem.razor | 22 -- .../Components/TodoApp/TodoItems.razor | 57 ---- .../Layouts/LoginLayout.razor | 35 ++- .../Models/PrometheusQueryResult.cs | 43 ++- .../Elektrifikatsiya/Pages/AddPlug.razor | 257 +++++++++--------- .../Elektrifikatsiya/Pages/Dashboard.razor | 6 + .../Elektrifikatsiya/Pages/TodoAppPage.razor | 3 - .../Elektrifikatsiya/Program.cs | 2 +- .../Services/Implementations/UpdateService.cs | 4 +- .../Elektrifikatsiya/UserDatabase.sqlite-shm | Bin 32768 -> 0 bytes .../Elektrifikatsiya/UserDatabase.sqlite-wal | 0 .../Utilities/PrometheusQuery.cs | 3 - 15 files changed, 194 insertions(+), 328 deletions(-) delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/BaseTodoItems.cs delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/Filter.cs delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/Todo.cs delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/TodoItem.razor delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/TodoItems.razor delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Pages/TodoAppPage.razor delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-wal diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/BaseTodoItems.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/BaseTodoItems.cs deleted file mode 100644 index 9a7799c..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/BaseTodoItems.cs +++ /dev/null @@ -1,74 +0,0 @@ -using Blazorise; - -using Elektrifikatsiya.Components.TodoApp; - -using Microsoft.AspNetCore.Components; - -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Elektrifikatsiya.Components.TodoApp; -public abstract class BaseTodoItems : ComponentBase -{ - protected Validations validations; - - protected string description; - - protected Filter filter = Filter.All; - - protected List todos = new() - { - new() { Description = "Buy milk" }, - new() { Description = "Call John regarding the meeting" }, - new() { Description = "Walk a dog" }, - }; - - protected IEnumerable Todos - { - get - { - var query = from t in todos select t; - - if (filter == Filter.Active) - query = from q in query where !q.Completed select q; - - if (filter == Filter.Completed) - query = from q in query where q.Completed select q; - - return query; - } - } - - protected void SetFilter(Filter filter) - { - this.filter = filter; - } - - protected void OnCheckAll(bool isChecked) - { - todos.ForEach(x => x.Completed = isChecked); - } - - protected async Task OnAddTodo() - { - if (await validations.ValidateAll()) - { - todos.Add(new() { Description = description }); - description = null; - - await validations.ClearAll(); - } - } - - protected void OnClearCompleted() - { - todos.RemoveAll(x => x.Completed); - filter = Filter.All; - } - - protected Task OnTodoStatusChanged(bool isChecked) - { - return InvokeAsync(StateHasChanged); - } -} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/Filter.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/Filter.cs deleted file mode 100644 index 7cd3ac5..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/Filter.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Elektrifikatsiya.Components.TodoApp; - -public enum Filter -{ - All, - Active, - Completed, -} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/Todo.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/Todo.cs deleted file mode 100644 index fdf4888..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/Todo.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Elektrifikatsiya.Components.TodoApp; - -public class Todo -{ - public bool Completed { get; set; } - - public string Description { get; set; } -} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/TodoItem.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/TodoItem.razor deleted file mode 100644 index 8233b49..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/TodoItem.razor +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - @Todo.Description - - - -@code{ - Task OnCheckedChanged( bool isChecked ) - { - Todo.Completed = isChecked; - - return StatusChanged?.Invoke( isChecked ); - } - - [Parameter] public Todo Todo { get; set; } - - [Parameter] public Func StatusChanged { get; set; } -} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/TodoItems.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/TodoItems.razor deleted file mode 100644 index a9db980..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Components/TodoApp/TodoItems.razor +++ /dev/null @@ -1,57 +0,0 @@ -@inherits BaseTodoItems - - - - - - Todo List - - - - - All - - - - - - - - - - - - - - - - - - - - @foreach ( var todo in Todos ) - { - - } - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor index 091b551..daca9d9 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor @@ -1,17 +1,42 @@ @using System.Diagnostics; +@using FluentResults; + +@inject Elektrifikatsiya.Services.IAuthenticationService AuthenticationService +@inject NavigationManager NavigationManager + @inherits LayoutComponentBase - + - + - - + + @code { - + private string username = string.Empty; + private string password = string.Empty; + private Color color = Color.Primary; + private bool disabled; + private async Task Clicked() + { + color = Color.Primary; + disabled = true; + + Result loginResult = await AuthenticationService.LoginUserAsync(username, password); + + if (loginResult.IsSuccess) + { + NavigationManager.NavigateTo("/", true); + } + else + { + color = Color.Danger; + disabled = false; + } + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs index 7121698..a8f8d06 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/PrometheusQueryResult.cs @@ -1,6 +1,6 @@ using System.Diagnostics; +using System.Globalization; using System.Text.Json.Serialization; -using Microsoft.AspNetCore.Mvc.Diagnostics; namespace Elektrifikatsiya.Models; @@ -47,51 +47,50 @@ public class PrometheusDataWrapper ResultType = resultType; Result = result; } - + public FluentResults.Result> MatrixTypeToTimestampFloatTuple() { - if (ResultType != ResultType.Matrix) - { - return FluentResults.Result.Fail("The response did not have the Matrix Type"); - } + if (ResultType != ResultType.Matrix) + { + return FluentResults.Result.Fail("The response did not have the Matrix Type"); + } List<(double, double)> result = new List<(double, double)>(); if (Result.Count == 0 || Result[0]?.Values is null || Result[0]?.Values?[0] is null) { - return FluentResults.Result.Fail("There was no result in the Response Body"); + return FluentResults.Result.Fail("There was no result in the Response Body"); } foreach (object value in Result[0]!.Values!) - { + { - string[] segment = value.ToString()!.Split(","); + string[] segment = value.ToString()!.Split(","); - result.Add((Convert.ToDouble(segment[0][2..^1]), Convert.ToDouble(segment[1][1..^2]))); - } + result.Add((Convert.ToDouble(segment[0][2..^1], CultureInfo.InvariantCulture), Convert.ToDouble(segment[1][1..^2], CultureInfo.InvariantCulture))); + } Debug.WriteLine(result); return result; } public FluentResults.Result<(double, double)> VectorTypeToTimestampFloatTuple() { - if (ResultType != ResultType.Vector) - { - return FluentResults.Result.Fail("The response did not have the Vector Type"); - } + if (ResultType != ResultType.Vector) + { + return FluentResults.Result.Fail("The response did not have the Vector Type"); + } - string[]? segment = Result.FirstOrDefault()?.Value.ToString()?.Split(",") ?? null; + string[]? segment = Result.FirstOrDefault()?.Value?.ToString()?.Split(","); - if (segment is null) - { - return FluentResults.Result.Fail("There was no result in the Response Body"); - } + if (segment is null) + { + return FluentResults.Result.Fail("There was no result in the Response Body"); + } - return((Convert.ToDouble(segment[0][2..^1]), Convert.ToDouble(segment[1][1..^2]))); + return (Convert.ToDouble(segment[0][2..^1]), Convert.ToDouble(segment[1][1..^2], CultureInfo.InvariantCulture)); } } - public class PrometheusDataMetric { [JsonPropertyName("__name__")] public string Name { get; set; } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor index d78020d..d7c1b7f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor @@ -14,144 +14,155 @@ - - - - - - - Add a plug via wifi - - - - - - - - - - - - - - - - - IP: @context.Item - - - - - - - - - - - - + + + + + + + Add a plug via wifi + + + + + + + + + + + + + + + + + IP: @context.Item + + + + + + + + + + + + - - - - - - - Add a plug via IP - - - - -
- - - -
- -
-
-
-
-
-
- -
+ + + + + + + Add a plug via IP + + + + +
+ + + + + + Please enter a ip address. + Ip address is valid. + Ip address is not valid! + + +
+ +
+
+
+
+
+
+
+ +
@code { - List ipAddresses = new List(); + List ipAddresses = new List(); - Validation? ipValidation; + Validation? ipValidation; - bool visible = true; + bool visible = true; + bool disabled = false; - string ipText = null!; + string ipText = null!; - protected override void OnInitialized() - { - MdnsDiscovery.OnDeviceFound += async ipAddress => - { - visible = false; - if (!ipAddresses.Contains(ipAddress)) - { - ipAddresses.Add(ipAddress); - await InvokeAsync(StateHasChanged); - } - }; + protected override void OnInitialized() + { + MdnsDiscovery.OnDeviceFound += async ipAddress => + { + visible = false; + if (!ipAddresses.Contains(ipAddress)) + { + ipAddresses.Add(ipAddress); + await InvokeAsync(StateHasChanged); + } + }; - MdnsDiscovery.FetchChachedDevices(); - } + MdnsDiscovery.FetchChachedDevices(); + } - private async Task RegisterDevice(IPAddress ipAddress) - { - Result result = await DeviceManagmentService.RegisterDevice(ipAddress, (await AuthenticationService.GetUserAsync()).ValueOrDefault); + private async Task RegisterDevice(IPAddress ipAddress) + { + disabled = true; + Result result = await DeviceManagmentService.RegisterDevice(ipAddress, (await AuthenticationService.GetUserAsync()).ValueOrDefault); - if (result.IsSuccess) - { - await MessageService.Success("Device added!"); - } - else - { - await MessageService.Error(string.Join(',', result.Errors.Select(e => e.Message)), "Adding device failed!"); - } - } + if (result.IsSuccess) + { + await MessageService.Success("Device added!"); + } + else + { + await MessageService.Error(string.Join(',', result.Errors.Select(e => e.Message)), "Adding device failed!"); + } + disabled = false; + } - public void ValidateIPv4(ValidatorEventArgs e) - { - string? input = Convert.ToString(e.Value); + public void ValidateIPv4(ValidatorEventArgs e) + { + string? input = Convert.ToString(e.Value); - if (string.IsNullOrWhiteSpace(input)) - { - e.Status = ValidationStatus.None; - return; - } + if (string.IsNullOrWhiteSpace(input)) + { + e.Status = ValidationStatus.None; + return; + } - string[] splitValues = input.Split('.'); - if (splitValues.Length != 4) - { - e.Status = ValidationStatus.Error; - return; - } + string[] splitValues = input.Split('.'); + if (splitValues.Length != 4) + { + e.Status = ValidationStatus.Error; + return; + } - e.Status = splitValues.All(r => byte.TryParse(r, out _)) ? ValidationStatus.Success : ValidationStatus.Error; - } + e.Status = splitValues.All(r => byte.TryParse(r, out _)) ? ValidationStatus.Success : ValidationStatus.Error; + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 5b11650..a09d7f5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -152,6 +152,12 @@ { plugnames += $"shellyplug-s-{device.MacAddress}/relay/0|"; } + + if(string.IsNullOrEmpty(plugnames)) + { + return new(); + } + plugnames = plugnames[0..^1]; Debug.WriteLine($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/TodoAppPage.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/TodoAppPage.razor deleted file mode 100644 index ed5201a..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/TodoAppPage.razor +++ /dev/null @@ -1,3 +0,0 @@ -@using Elektrifikatsiya.Components.TodoApp -@page "/apps/todo" - \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index a9408b5..02d9c9d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -60,7 +60,7 @@ IAuthenticationService authenticationService = serviceScope.ServiceProvider.GetR if (!mainDatabase.Users.Any()) { - authenticationService.RegisterUserAsync("admin", "admin", Role.Admin); + _ = authenticationService.RegisterUserAsync("admin", "admin", Role.Admin); } app.Run(); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs index a0b7ef0..f31d184 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs @@ -33,12 +33,12 @@ public class UpdateService : IHostedService, IDisposable _ = deviceStatusService.TrackDevice(device); } - timer = new Timer((_) => Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); + timer = new Timer(async (_) => await Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); logger.LogInformation("Update service started."); } - private async void Update() + private async Task Update() { Result> getDeviceStatusResult = deviceStatusService.GetDevices(); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Query(string query) { - var res = client.GetStringAsync($"/api/v1/query?query={UrlEncoder.Create().Encode(query)}").Result; return client.GetFromJsonAsync($"/api/v1/query?query={UrlEncoder.Create().Encode(query)}", new JsonSerializerOptions() { PropertyNameCaseInsensitive = true, From f6fd7c17eed52b97558060dbac1440dd561ea339 Mon Sep 17 00:00:00 2001 From: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Thu, 4 May 2023 21:51:38 +0200 Subject: [PATCH 64/85] Make settings page work Idiot big forgot to commit :/ --- .../Elektrifikatsiya/Models/Device.cs | 14 ++++ .../Elektrifikatsiya/Pages/Dashboard.razor | 1 + .../Elektrifikatsiya/Pages/Settings.razor | 73 ++++++++++++++----- 3 files changed, 70 insertions(+), 18 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs index b41d572..86c3d8c 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs @@ -1,6 +1,8 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Net; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.AspNetCore.Server.IIS.Core; namespace Elektrifikatsiya.Models; @@ -35,5 +37,17 @@ public class Device Room = room; } + public static Device CopyDevice(Device device) => new Device(device.MacAddress, device.Name, device.IpAddress, device.User, device.Room); + + public void OverwiteDevice(Device overwriter) + { + this.Room = overwriter.Room; + this.Available = overwriter.Available; + this.PowerUsage = overwriter.PowerUsage; + this.Name = overwriter.Name; + this.User = overwriter.User; + this.MacAddress = overwriter.MacAddress; + this.IpAddress = overwriter.IpAddress; + } private Device(){} } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 5b11650..2952361 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -5,6 +5,7 @@ @using Elektrifikatsiya.Services @using Elektrifikatsiya.Utilities @using System.Diagnostics +@using Elektrifikatsiya.Services.Implementations @inject IVersionProvider VersionProvider @inject IDeviceStatusService DeviceStatusService; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 46f8278..60e82b6 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -2,6 +2,13 @@ @using Blazorise.Components; @using Elektrifikatsiya.Models; @using System.Net +@using System.Text.Json +@using Elektrifikatsiya.Services.Implementations +@using Elektrifikatsiya.Services; +@using FluentResults + +@inject IDeviceManagmentService DeviceManagmentService +
@@ -34,7 +41,7 @@ - User: @context.Item.User + User: @context.Item.User.Name
Room: @context.Item.Room
@@ -43,14 +50,14 @@

- @@ -62,6 +69,9 @@ + + @if (DeviceCopy is not null) + { + } - +
+ @code { - List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "Josne", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Josne", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), }; + List plugs = new List(); private bool hideButtonSettings = true; - private void Toggle() + Device? SelectedDevice = null; + Device? DeviceCopy = null; + + protected override void OnInitialized() + { + Result> getDevicesResult = DeviceManagmentService.GetDevices(); + + if (getDevicesResult.IsSuccess) + { + plugs = getDevicesResult.Value; + } + } + + private void Toggle(Device device) { hideButtonSettings = !hideButtonSettings; + SelectedDevice = device; + DeviceCopy = Device.CopyDevice(device); } + + private void OnSave() + { + if (hideButtonSettings || DeviceCopy is null) + { + + } + else + { + SelectedDevice.OverwiteDevice(DeviceCopy); + DeviceManagmentService.UpdateDevice(SelectedDevice); + } + } + + private void Delete(Device contextItem) + { + DeviceManagmentService.UnregisterDevice(contextItem.MacAddress); + } + } \ No newline at end of file From 461298d14d318df3a5e0928fd6373c66e340449f Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 4 May 2023 22:09:27 +0200 Subject: [PATCH 65/85] Fix delete things --- .../Elektrifikatsiya/Pages/Settings.razor | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 60e82b6..b4afa9f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -8,6 +8,7 @@ @using FluentResults @inject IDeviceManagmentService DeviceManagmentService +@inject IMessageService MessageService
@@ -176,7 +177,7 @@ private void OnSave() { - if (hideButtonSettings || DeviceCopy is null) + if (hideButtonSettings || DeviceCopy is null || SelectedDevice is null) { } @@ -187,9 +188,22 @@ } } - private void Delete(Device contextItem) + private async Task Delete(Device contextItem) { - DeviceManagmentService.UnregisterDevice(contextItem.MacAddress); - } + bool succ = await MessageService.Confirm($"Do you really want to delete the device \"{contextItem.Name}\"?"); + if(!succ) + { + return; + } + + await DeviceManagmentService.UnregisterDevice(contextItem.MacAddress); + + int index = plugs.FindIndex(x => x.MacAddress == contextItem.MacAddress); + + if(index != -1) + { + plugs.RemoveAt(index); + } + } } \ No newline at end of file From 711955dd09fa53d64405b43158f6c874e135a2fb Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 4 May 2023 23:11:53 +0200 Subject: [PATCH 66/85] Turn on and off button thingy --- .../Elektrifikatsiya/Elektrifikatsiya.csproj | 1 + .../Elektrifikatsiya/Models/Device.cs | 27 +- .../Elektrifikatsiya/Pages/Dashboard.razor | 244 ++++++------------ .../Elektrifikatsiya/Pages/Dashboard.razor.cs | 110 ++++++-- .../Elektrifikatsiya/Pages/Settings.razor | 2 +- .../Elektrifikatsiya/Program.cs | 32 ++- .../Implementations/DeviceManagmentService.cs | 25 +- .../Implementations/DeviceStatusService.cs | 12 +- .../Services/Implementations/UpdateService.cs | 111 ++++---- 9 files changed, 299 insertions(+), 265 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj index 72696db..89ebdd6 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Elektrifikatsiya.csproj @@ -42,6 +42,7 @@ + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs index 86c3d8c..000e5ef 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs @@ -1,8 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Net; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Microsoft.AspNetCore.Server.IIS.Core; namespace Elektrifikatsiya.Models; @@ -26,7 +24,7 @@ public class Device public string Room { get; set; } [NotMapped] - public bool Available { get; set; } + public bool Enabled { get; set; } public Device(string macAddress, string name, IPAddress address, User user, string room) { @@ -37,17 +35,22 @@ public class Device Room = room; } - public static Device CopyDevice(Device device) => new Device(device.MacAddress, device.Name, device.IpAddress, device.User, device.Room); + public Device CopyDevice() + { + return new Device(MacAddress, Name, IpAddress, User, Room); + } public void OverwiteDevice(Device overwriter) { - this.Room = overwriter.Room; - this.Available = overwriter.Available; - this.PowerUsage = overwriter.PowerUsage; - this.Name = overwriter.Name; - this.User = overwriter.User; - this.MacAddress = overwriter.MacAddress; - this.IpAddress = overwriter.IpAddress; + Room = overwriter.Room; + Enabled = overwriter.Enabled; + PowerUsage = overwriter.PowerUsage; + Name = overwriter.Name; + User = overwriter.User; + MacAddress = overwriter.MacAddress; + IpAddress = overwriter.IpAddress; } - private Device(){} + + private Device() + { } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 70a9522..66a3051 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -9,168 +9,88 @@ @inject IVersionProvider VersionProvider @inject IDeviceStatusService DeviceStatusService; +@inject IDeviceManagmentService DeviceManagmentService;
- -
- - - - Plugs - - - - - - - - - - @context.Item.Name - - - - - User: @context.Item.User.Name -
- Room: @context.Item.Room -
- - @context.Item.PowerUsage W - -
-
- - - -
-
-
-
-
- - - - Logs - - - - -
- @context.Item.EventName - @context.Item.Date -
- @context.Item.Description -
-
-
-
-
- - - - - - + +
+ + + + Plugs + + + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User.Name +
+ Room: @context.Item.Room +
+ + @context.Item.PowerUsage W + +
+
+ + + +
+
+
+
+
+ + + + Logs + + + + +
+ @context.Item.EventName + @context.Item.Date +
+ @context.Item.Description +
+
+
+
+
+ + + + + +
- - -@code { - //TODO: insert new event here if plug produces one - List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; - //TODO: insert new Device here if user adds one - List plugs = new List(); - //code for graph - LineChart lineChart; - - protected override void OnInitialized() - { - plugs = DeviceStatusService.GetDevices().ValueOrDefault ?? new List(); - - DeviceStatusService.OnDeviceStatusChanged += (_, e) => - { - InvokeAsync(StateHasChanged); - }; - } - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await HandleRedraw(); - } - } - - async Task HandleRedraw() - { - labels.Clear(); - await lineChart.Clear(); - await lineChart.AddLabelsDatasetsAndUpdate(labels, await GetLineChartDataset()); - } - - //TODO: insert dataset of current and last voltage usages - async Task> GetLineChartDataset() - { - return new LineChartDataset - { - Label = "Wattage", - Data = await RandomizeData(), - Fill = true, - PointRadius = 3, - CubicInterpolationMode = "monotone", - }; - } - - List labels = new List(); - - async Task> RandomizeData() - { - PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); - - string plugnames = ""; - foreach (Device device in plugs) - { - plugnames += $"shellyplug-s-{device.MacAddress}/relay/0|"; - } - - if(string.IsNullOrEmpty(plugnames)) - { - return new(); - } - - plugnames = plugnames[0..^1]; - - Debug.WriteLine($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""); - - PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; - - var r = new Random(DateTime.Now.Millisecond); - - return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => - { - labels.Add(DateTimeOffset.FromUnixTimeSeconds(long.Parse($"1{x.Item1}0")).UtcDateTime.ToLocalTime().ToShortTimeString()); - return x.Item2; - }).ToList() ?? new List(); - } -} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs index fa4bbf2..3d70f26 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs @@ -1,23 +1,97 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Components; -using System.Net.Http; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Components.Authorization; -using Microsoft.AspNetCore.Components.Forms; -using Microsoft.AspNetCore.Components.Routing; -using Microsoft.AspNetCore.Components.Web; -using Microsoft.AspNetCore.Components.Web.Virtualization; -using Microsoft.JSInterop; -using Elektrifikatsiya; -using Blazorise; +using Blazorise.Charts; -namespace Elektrifikatsiya.Pages +using Elektrifikatsiya.Models; +using Elektrifikatsiya.Utilities; + +using System.Diagnostics; +using System.Text; + +namespace Elektrifikatsiya.Pages; + +public partial class Dashboard { - public partial class Dashboard - { + //TODO: insert new event here if plug produces one + private readonly List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; + //TODO: insert new Device here if user adds one + private List plugs = new List(); + + //code for graph + private LineChart lineChart; + + protected override void OnInitialized() + { + plugs = DeviceStatusService.GetDevices().ValueOrDefault ?? new List(); + + DeviceStatusService.OnDeviceStatusChanged += (_, e) => + { + _ = InvokeAsync(StateHasChanged); + }; + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + await HandleRedraw(); + } + } + + private async Task Switch(Device device) + { + device.Enabled = !device.Enabled; + _ = await DeviceManagmentService.UpdateDevice(device); + } + + private async Task HandleRedraw() + { + labels.Clear(); + await lineChart.Clear(); + await lineChart.AddLabelsDatasetsAndUpdate(labels, await GetLineChartDataset()); + } + + //TODO: insert dataset of current and last voltage usages + private async Task> GetLineChartDataset() + { + return new LineChartDataset + { + Label = "Wattage", + Data = await DeviceData(), + Fill = true, + PointRadius = 3, + CubicInterpolationMode = "monotone", + }; + } + + private readonly List labels = new List(); + + private async Task> DeviceData() + { + PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); + + StringBuilder builder = new(); + foreach (Device device in plugs) + { + _ = builder.Append($"shellyplug-s-{device.MacAddress}/relay/0|"); + } + + if (builder.Length <= 1) + { + return new(); + } + + string plugnames = builder.ToString()[..^1]; + + Debug.WriteLine($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""); + + PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; + + Random r = new Random(DateTime.Now.Millisecond); + + return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => + { + labels.Add(DateTimeOffset.FromUnixTimeSeconds(long.Parse($"1{x.Item1}0")).UtcDateTime.ToLocalTime().ToShortTimeString()); + return x.Item2; + }).ToList() ?? new List(); } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index b4afa9f..263b2af 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -172,7 +172,7 @@ { hideButtonSettings = !hideButtonSettings; SelectedDevice = device; - DeviceCopy = Device.CopyDevice(device); + DeviceCopy = device.CopyDevice(); } private void OnSave() diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 02d9c9d..6615bf5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -8,6 +8,9 @@ using Elektrifikatsiya.Models; using Elektrifikatsiya.Services; using Elektrifikatsiya.Services.Implementations; +using HiveMQtt.Client; +using HiveMQtt.Client.Options; + using Microsoft.EntityFrameworkCore; WebApplicationBuilder builder = WebApplication.CreateBuilder(args); @@ -18,6 +21,19 @@ builder.Services.AddServerSideBlazor(); builder.Services.AddHttpContextAccessor(); builder.Services.AddHostedService(); builder.Services.AddSingleton(); +builder.Services.AddSingleton((provider)=> +{ + HiveMQClientOptions options = new() + { + Host = "localhost", + Port = 1883, + UseTLS = false, + }; + + HiveMQClient client = new(options); + client.ConnectAsync().ConfigureAwait(false); + return client; +}); builder.Services.AddTransient(); builder.Services.AddScoped(); builder.Services.AddScoped(); @@ -27,7 +43,7 @@ builder.Services.AddBootstrapProviders(); builder.Services.AddHttpClient(); builder.Services.AddBlazorise(options => { - options.Immediate = true; + options.Immediate = true; }); AddBlazorise(builder.Services); @@ -37,9 +53,9 @@ WebApplication app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { - _ = app.UseExceptionHandler("/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - _ = app.UseHsts(); + _ = app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + _ = app.UseHsts(); } app.UseHttpsRedirection(); @@ -60,14 +76,14 @@ IAuthenticationService authenticationService = serviceScope.ServiceProvider.GetR if (!mainDatabase.Users.Any()) { - _ = authenticationService.RegisterUserAsync("admin", "admin", Role.Admin); + _ = authenticationService.RegisterUserAsync("admin", "admin", Role.Admin); } app.Run(); void AddBlazorise(IServiceCollection services) { - _ = services.AddBlazorise(); - _ = services.AddMaterialProviders(); - _ = services.AddMaterialIcons(); + _ = services.AddBlazorise(); + _ = services.AddMaterialProviders(); + _ = services.AddMaterialIcons(); } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index 3343c76..12e4bb1 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -3,9 +3,13 @@ using Elektrifikatsiya.Models; using FluentResults; +using HiveMQtt.Client; +using HiveMQtt.Client.Results; + +using Microsoft.EntityFrameworkCore; + using System.Net; using System.Net.NetworkInformation; -using Microsoft.EntityFrameworkCore; namespace Elektrifikatsiya.Services.Implementations; @@ -14,13 +18,15 @@ public class DeviceManagmentService : IDeviceManagmentService private readonly IServiceScopeFactory serviceScopeFactory; private readonly IDeviceStatusService deviceStatusService; private readonly ILogger logger; + private readonly IHiveMQClient hiveMQClient; private readonly HttpClient httpClient; - public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, ILogger logger, HttpClient httpClient) + public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, ILogger logger, IHiveMQClient hiveMQClient, HttpClient httpClient) { this.serviceScopeFactory = serviceScopeFactory; this.deviceStatusService = deviceStatusService; this.logger = logger; + this.hiveMQClient = hiveMQClient; this.httpClient = httpClient; } @@ -151,13 +157,22 @@ public class DeviceManagmentService : IDeviceManagmentService using IServiceScope scope = serviceScopeFactory.CreateScope(); MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); - Result result = deviceStatusService.UpdateDeviceStatus(device); + Result getDeviceResult = GetDevice(device.MacAddress); - if (result.IsFailed) + if (getDeviceResult.IsFailed) { - return result; + return getDeviceResult.ToResult(); } + Result updateDeviceResult = deviceStatusService.UpdateDeviceStatus(device); + + if (updateDeviceResult.IsFailed) + { + return updateDeviceResult; + } + + PublishResult res = await hiveMQClient.PublishAsync($"shellies/shellyplug-s-{device.MacAddress}/relay/0/command", device.Enabled ? "on" : "off"); + _ = mainDatabaseContext.Update(device); return await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs index 2e6e904..becc6f4 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs @@ -6,15 +6,17 @@ namespace Elektrifikatsiya.Services.Implementations; public class DeviceStatusService : IDeviceStatusService { - private readonly ILogger logger; - public event EventHandler? OnDeviceStatusChanged; + private readonly ILogger logger; + + public event EventHandler? OnDeviceStatusChanged; private readonly Dictionary devices = new(); - + public DeviceStatusService(ILogger logger) { - this.logger = logger; + this.logger = logger; } + public Result> GetDevices() { return devices.Values.ToList(); @@ -30,7 +32,7 @@ public class DeviceStatusService : IDeviceStatusService } modDevice.PowerUsage = device.PowerUsage; - modDevice.Available = device.Available; + modDevice.Enabled = device.Enabled; modDevice.IpAddress = device.IpAddress; modDevice.Name = device.Name; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs index f31d184..0a3ef4a 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs @@ -1,6 +1,7 @@ using Elektrifikatsiya.Database; using Elektrifikatsiya.Models; using Elektrifikatsiya.Utilities; + using FluentResults; using Microsoft.EntityFrameworkCore; @@ -9,75 +10,77 @@ namespace Elektrifikatsiya.Services.Implementations; public class UpdateService : IHostedService, IDisposable { - private readonly ILogger logger; - private readonly IDeviceStatusService deviceStatusService; - private readonly IServiceScopeFactory serviceScopeFactory; - private Timer? timer = null; + private readonly ILogger logger; + private readonly IDeviceStatusService deviceStatusService; + private readonly IServiceScopeFactory serviceScopeFactory; + private Timer? timer = null; - public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, IServiceScopeFactory serviceScopeFactory) - { - this.logger = logger; - this.deviceStatusService = deviceStatusService; - this.serviceScopeFactory = serviceScopeFactory; - } + public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, IServiceScopeFactory serviceScopeFactory) + { + this.logger = logger; + this.deviceStatusService = deviceStatusService; + this.serviceScopeFactory = serviceScopeFactory; + } - public async Task StartAsync(CancellationToken cancellationToken) - { - IServiceScope serviceScope = serviceScopeFactory.CreateScope(); - MainDatabaseContext mainDatabaseContext = serviceScope.ServiceProvider.GetRequiredService(); + public async Task StartAsync(CancellationToken cancellationToken) + { + IServiceScope serviceScope = serviceScopeFactory.CreateScope(); + MainDatabaseContext mainDatabaseContext = serviceScope.ServiceProvider.GetRequiredService(); - logger.LogInformation("Starting update service..."); + logger.LogInformation("Starting update service..."); - foreach (Device device in await mainDatabaseContext.Devices.Include(d=>d.User).AsNoTracking().ToListAsync(cancellationToken)) - { - _ = deviceStatusService.TrackDevice(device); - } + foreach (Device device in await mainDatabaseContext.Devices.Include(d => d.User).AsNoTracking().ToListAsync(cancellationToken)) + { + _ = deviceStatusService.TrackDevice(device); + } - timer = new Timer(async (_) => await Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); + timer = new Timer(async (_) => await Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); - logger.LogInformation("Update service started."); - } + logger.LogInformation("Update service started."); + } - private async Task Update() - { - Result> getDeviceStatusResult = deviceStatusService.GetDevices(); + private async Task Update() + { + Result> getDeviceStatusResult = deviceStatusService.GetDevices(); - if (getDeviceStatusResult.IsFailed) - { - logger.LogError("Updating devices failed!"); - } - PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); - foreach (Device device in getDeviceStatusResult.Value) - { - PrometheusDataWrapper? deviceData = (await promQueryer.Query($"power{{sensor=\"shellyplug-s-{device.MacAddress}/relay/0\"}}"))?.Data; + if (getDeviceStatusResult.IsFailed) + { + logger.LogError("Updating devices failed!"); + } + PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); + foreach (Device device in getDeviceStatusResult.Value) + { + PrometheusDataWrapper? devicePowerData = (await promQueryer.Query($"power{{sensor=\"shellyplug-s-{device.MacAddress}/relay/0\"}}"))?.Data; + PrometheusDataWrapper? deviceStatusData = (await promQueryer.Query($"state{{sensor=\"shellyplug-s-{device.MacAddress}/relay\"}}"))?.Data; - if (deviceData is not null) - { - device.PowerUsage = deviceData.VectorTypeToTimestampFloatTuple()?.ValueOrDefault.Item2 ?? 0; - deviceStatusService.UpdateDeviceStatus(device); + if (devicePowerData is not null && deviceStatusData is not null) + { + device.PowerUsage = devicePowerData.VectorTypeToTimestampFloatTuple()?.ValueOrDefault.Item2 ?? 0; + device.Enabled = (deviceStatusData.VectorTypeToTimestampFloatTuple()?.ValueOrDefault.Item2 ?? 0) == 1; + _ = deviceStatusService.UpdateDeviceStatus(device); } } - } + } - public Task StopAsync(CancellationToken cancellationToken) - { - logger.LogInformation("Stopping update service."); + public Task StopAsync(CancellationToken cancellationToken) + { + logger.LogInformation("Stopping update service."); - _ = timer?.Change(Timeout.Infinite, 0); + _ = timer?.Change(Timeout.Infinite, 0); - logger.LogInformation("Stopped update service."); + logger.LogInformation("Stopped update service."); - return Task.CompletedTask; - } + return Task.CompletedTask; + } - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } - protected virtual void Dispose(bool disposing) - { - timer?.Dispose(); - } + protected virtual void Dispose(bool disposing) + { + timer?.Dispose(); + } } \ No newline at end of file From 036401676657e4be9e1833275a108c00446b6793 Mon Sep 17 00:00:00 2001 From: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Thu, 1 Jun 2023 15:24:29 +0200 Subject: [PATCH 67/85] Merge items from Stefan-5422/feature-Dashboard --- .../Layouts/LoginLayout.razor | 10 +- .../Elektrifikatsiya/Pages/Admin.razor | 216 +++++++++++++++++- .../Elektrifikatsiya/Pages/Dashboard.razor | 199 +++++++++------- 3 files changed, 328 insertions(+), 97 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor index daca9d9..0055775 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor @@ -7,12 +7,12 @@ @inherits LayoutComponentBase - - - + + + - - + + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor index af079a3..0cc6258 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor @@ -1,28 +1,224 @@ -@page "/admin" -@using Blazorise.Components +@page "/Admin" +@using Blazorise.Components; @using Elektrifikatsiya.Models; @using System.Net +@using Elektrifikatsiya.Services; + +@inject IAuthenticationService AuthenthicationService;
- + +
- + - Users + + Users + + + + - + + + + - - + + + + + + + + + @context.Item.Name + + + + + Name: @context.Item.Name +
+ Rolle: @context.Item.Role +
+
+
+ + + + + + + + + Add User + + + + + User Name + + + + User Password + + + + + + + + + + + + + + Delete User + + + + + Admin Password + + + + + + + + + + +
+
+ + + + + + +
+
+
+
+
+ +
+ + +

+ User Settings +

+
+
+ + +
+ User Name +
+ + Here you can change the name of the User + +
+ +
+
+
+ + +
+ Password +
+ + Here you can change the password of a User + +
+ +
+ +
+
+
+ + +
+ Select Role +
+ + Here you select or change the role of to User or Admin + +
+
+ + Roles + + Admin + + User + + +
+
+ + +
+ @code { + List users = new List() { new User("Silas", "aldjlfasd", Role.Admin), new User("Joe", "qiowruioewjfopa", Role.Admin), new User("Stefan", "adfadsdf", Role.Admin), new User("Manu", "öhöfldaösldf", Role.User) }; + + private Modal? modalRefDelete; + + public Admin() + { + } + + private Task ShowModalDelete() + { + return modalRefDelete!.Show(); + } + + private Task HideModalDelete() => modalRefDelete!.Hide(); + + private Modal? modalRefAddUser; + + + private Task ShowModalAddUser() + { + return modalRefAddUser!.Show(); + } + + private Task HideModalAddUser() => modalRefAddUser!.Hide(); + private async Task AddModalAddUser(string name, string passwort) + { + await AuthenthicationService.RegisterUserAsync(name, passwort, Role.User); + await HideModalAddUser(); + } + + + } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 66a3051..45ab648 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -12,85 +12,120 @@ @inject IDeviceManagmentService DeviceManagmentService;
- -
- - - - Plugs - - - - - - - - - - @context.Item.Name - - - - - User: @context.Item.User.Name -
- Room: @context.Item.Room -
- - @context.Item.PowerUsage W - -
-
- - - -
-
-
-
-
- - - - Logs - - - - -
- @context.Item.EventName - @context.Item.Date -
- @context.Item.Description -
-
-
-
-
- - - - - - -
+ +
+ + + + Plugs + + + + + + + + + + @context.Item.Name + + + + + User: @context.Item.User.Name +
+ Room: @context.Item.Room +
+ + @context.Item.PowerUsage W + +
+
+ + + +
+
+
+
+
+ + + + Logs + + + + +
+ @context.Item.EventName + @context.Item.Date +
+ @context.Item.Description +
+
+
+
+
+ + + + + Electricity Cost + + + + + +
+ Daily Cost +
+ 2 +
+ +
+ Monthly Cost +
+ 60 +
+ +
+ Yearly Cost +
+ 720 +
+ +
+
+
+ + + + + + +
\ No newline at end of file From 1028cbfb401ab7cf937a333599fae2dcf2c3f7df Mon Sep 17 00:00:00 2001 From: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Thu, 1 Jun 2023 15:33:18 +0200 Subject: [PATCH 68/85] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit a0adfc850db648720e3a251838cdee89e4884845 Author: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Thu Jun 1 15:28:39 2023 +0200 Revert using Prom.Net commit 08a5bd477257dec4281d18b892ac284d7d5f6c19 Merge: a47c252 9d64698 Author: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Thu Jun 1 15:27:48 2023 +0200 Merge remote-tracking branch 'origin/feature-DeviceRegistration' into feature-DeviceRegistration commit a47c2525e1635c0f459f8d0dd23151a51b6d6eaf Author: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Thu Jun 1 15:27:30 2023 +0200 Revert using Prom.Net commit 9d646988d12626f006db096ee26fc89df630c2a5 Merge: 889fc5e 4ef3958 Author: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Thu Jun 1 15:24:56 2023 +0200 Merge branch 'feature-DeviceRegistration' of https://github.com/Stefan-5422/-T5-Elektrifikatsiya into feature-DeviceRegistration commit 889fc5e3ddf4e7d6e9e1c48ed2b97f03e5d0c1ff Author: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Thu Jun 1 15:24:21 2023 +0200 Final2 commit 92a7538996797483705c7b9fec50a2a808c5bec7 Merge: d5f5ec2 f04724e Author: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Thu Jun 1 15:23:59 2023 +0200 Merge branch 'feature-DeviceRegistration' of https://github.com/Stefan-5422/-T5-Elektrifikatsiya into feature-DeviceRegistration commit 4ef3958da39d96618a4829502f6521325aee8556 Author: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu Jun 1 15:23:10 2023 +0200 Fix .gitignore commit d5f5ec2d0e2000af9e481ecbf12f6df5d4f7cd88 Author: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Thu Jun 1 15:21:37 2023 +0200 Final commit 236c2418c538487e8e64ffeb6220558129a1d4e0 Author: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Thu Jun 1 15:18:57 2023 +0200 Update .gitignore commit f04724e258c0fe0d915c8713b7ad7e1317e6b9b5 Merge: 9b2db9c f74cff3 Author: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Thu Jun 1 15:15:57 2023 +0200 Merge remote-tracking branch 'origin/feature-DeviceRegistration' into feature-DeviceRegistration commit 9b2db9c97deda1a4f35f90053050c5d37b5e8608 Author: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Thu Jun 1 15:15:44 2023 +0200 Changes 🐙 commit f74cff3d39c9777277ab35b3167531deb656d07f Author: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed May 24 11:48:07 2023 +0200 Update appsettings.Development.json commit 2f79ccb22da1ee850a91a00277d6a4990444c36b Author: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed May 24 11:45:16 2023 +0200 Update appsettings.Development.json commit 104bd37bcb1b0309f1aca5a735b5d25d6546d611 Author: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed May 24 11:44:58 2023 +0200 Update appsettings.Development.json commit bdac3581deacac236aaba988d1e36c23396002c4 Author: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Wed May 24 11:29:38 2023 +0200 Revert test shid commit 5b583186992fd77795f457bfc1b3ba5eae639e09 Merge: 5b342c1 b054b9c Author: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Wed May 24 11:28:20 2023 +0200 Merge remote-tracking branch 'origin/feature-DeviceRegistration' into feature-DeviceRegistration commit 5b342c1a8fe27e525c957fdc0a627c4d5b018b82 Author: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Wed May 24 11:28:12 2023 +0200 Add `ScheduledService` and email things ༼ つ ◕_◕ ༽つ commit b054b9cfe33912c9ea48f37e49c5876d75adb84a Author: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed May 24 11:16:18 2023 +0200 EventService finish commit 9520fa04b825482e3eaec5c30835bb75a47b3bb8 Author: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Wed May 10 12:13:31 2023 +0200 Email Inferstructure --- .gitignore | 1 + .../Database/MainDatabaseContext.cs | 14 +- .../Elektrifikatsiya/DeviceManagement.sqlite | Bin 24576 -> 0 bytes .../DeviceManagement.sqlite-shm | Bin 32768 -> 0 bytes .../DeviceManagement.sqlite-wal | 0 .../Elektrifikatsiya/Elektrifikatsiya.csproj | 3 + ...rgs.cs => DeviceStatusChangedEventArgs.cs} | 4 +- .../Models/EnergyPriceChange.cs | 23 ++++ .../Elektrifikatsiya/Models/Event.cs | 7 +- .../Models/EventServiceEventArgs.cs | 11 ++ .../Elektrifikatsiya/Models/User.cs | 39 +++--- .../Elektrifikatsiya/Pages/Dashboard.razor | 3 + .../Elektrifikatsiya/Pages/Dashboard.razor.cs | 122 ++++++++++-------- .../Elektrifikatsiya/Pages/Login.razor | 17 ++- .../Elektrifikatsiya/Pages/Settings.razor | 39 +++--- .../Elektrifikatsiya/Program.cs | 24 +++- .../Services/IDeviceStatusService.cs | 2 +- .../Services/IEmailService.cs | 8 ++ .../Services/IEventService.cs | 10 ++ .../Services/INotifcationService.cs | 8 ++ .../Services/IUpdateService.cs | 8 ++ .../Implementations/DeviceManagmentService.cs | 2 + .../Implementations/DeviceStatusService.cs | 8 +- .../Services/Implementations/EmailService.cs | 43 ++++++ .../Services/Implementations/EventService.cs | 55 ++++++++ .../Implementations/NotifcationService.cs | 24 ++++ .../Implementations/ServiceScheduler.cs | 61 +++++++++ .../Services/Implementations/UpdateService.cs | 43 +----- .../Elektrifikatsiya/UserDatabase.sqlite | Bin 12288 -> 0 bytes .../Utilities/EmailSettings.cs | 23 ++++ .../Utilities/IScheduledService.cs | 9 ++ .../appsettings.Development.json | 9 -- src/Elektrifikatsiya/assets/DailyNotif.html | 26 ++++ src/Elektrifikatsiya/assets/DailyNotif.mjml | 49 +++++++ 34 files changed, 529 insertions(+), 166 deletions(-) delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-wal rename src/Elektrifikatsiya/Elektrifikatsiya/Models/{DeviceStatusChagedEventArgs.cs => DeviceStatusChangedEventArgs.cs} (53%) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Models/EnergyPriceChange.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Models/EventServiceEventArgs.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/IEmailService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/IEventService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/INotifcationService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/IUpdateService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EmailService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EventService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/ServiceScheduler.cs delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Utilities/EmailSettings.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Utilities/IScheduledService.cs delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json create mode 100644 src/Elektrifikatsiya/assets/DailyNotif.html create mode 100644 src/Elektrifikatsiya/assets/DailyNotif.mjml diff --git a/.gitignore b/.gitignore index 883ab1e..a2dcdb0 100644 --- a/.gitignore +++ b/.gitignore @@ -351,3 +351,4 @@ MigrationBackup/ # Project specific *.sqlite* +src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs index 95caf56..63fcd63 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Database/MainDatabaseContext.cs @@ -6,11 +6,13 @@ namespace Elektrifikatsiya.Database; public class MainDatabaseContext : DbContext { - public MainDatabaseContext(DbContextOptions dbContextOptions) : base(dbContextOptions) - { - } + public DbSet Devices { get; set; } - public DbSet Users { get; set; } - public DbSet Devices { get; set; } - public DbSet Events { get; set; } + public DbSet Users { get; set; } + + public DbSet EnergyPriceChanges { get; set; } + + public MainDatabaseContext(DbContextOptions dbContextOptions) : base(dbContextOptions) + { + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite deleted file mode 100644 index b7a73e251a9af12973c0b46e7f44df53659c3a0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 zcmeI&&u-H&90%|u{WDapWtUNjUM!zhZGaFjKxo|&Elo?BO06_eg~g1BHepQ$T)0ed zDATP`y_Ml7ezMucumqon5$DkoENL>H@R z^X9y;S8p`*9}iRi-IU82@~bGLdgd#eEibQDh$yt{UzkBK=Sf0|$3`A;dZG?(o3wh) zz;jK@@d)josXbHDcdf4Jj>#DtpU5DNKjUl5)sXdRdw4Z24<09Wa{c&NALlud%MyNd%_EWdMHJO7 ztmJ5I@F)_vCt_;z=8?WvKRndGFY=tpWz|?&tH}2_gy77o{FLM ziy|^q&Abn?4-^PM00Izz00bZa0SG_<0uX=z1a?&b@BdxREY1Z12tWV=5P$##AOHaf zKmY;|xD&wp|IPv}2tWV=5P$##AOHafKmY;|fWWQ_RI-EN|Npz1UYrX85P$##AOHaf nKmY;|fB*y_kPG1bkBa~S2tWV=5P$##AOHafKmY;|*nNS2>qP#F diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm b/src/Elektrifikatsiya/Elektrifikatsiya/DeviceManagement.sqlite-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 + + @@ -50,6 +52,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChagedEventArgs.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChangedEventArgs.cs similarity index 53% rename from src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChagedEventArgs.cs rename to src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChangedEventArgs.cs index 8b85cd5..caad485 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChagedEventArgs.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/DeviceStatusChangedEventArgs.cs @@ -1,10 +1,10 @@ namespace Elektrifikatsiya.Models; -public class DeviceStatusChagedEventArgs : EventArgs +public class DeviceStatusChangedEventArgs : EventArgs { public string MacAddress { get; set; } - public DeviceStatusChagedEventArgs(string macAddress) + public DeviceStatusChangedEventArgs(string macAddress) { MacAddress = macAddress; } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/EnergyPriceChange.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/EnergyPriceChange.cs new file mode 100644 index 0000000..82214fb --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/EnergyPriceChange.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; + +namespace Elektrifikatsiya.Models; + +public class EnergyPriceChange +{ + [Key] + public DateTime DateTime { get; set; } + public double EnergyPrice { get; set; } + + + public EnergyPriceChange(DateTime dateTime, double energyPrice) + { + DateTime = dateTime; + EnergyPrice = energyPrice; + } + + public EnergyPriceChange(double energyPrice) + { + EnergyPrice = energyPrice; + DateTime = DateTime.Now; + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs index 40c67ac..01a91d3 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Event.cs @@ -11,14 +11,15 @@ namespace Elektrifikatsiya.Models public string EventName { get; set; } public string Description { get; set; } public DateTime Date { get; set; } + public Device Plug { get; set; } - //if Plug Class implemented -> Property for which plug this event is from - - public Event(string eventName, string description, DateTime date) + public Event() { } + public Event(string eventName, string description, DateTime date, Device plug) { EventName = eventName; Description = description; Date = date; + Plug = plug; } } } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/EventServiceEventArgs.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/EventServiceEventArgs.cs new file mode 100644 index 0000000..4065bb5 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/EventServiceEventArgs.cs @@ -0,0 +1,11 @@ +namespace Elektrifikatsiya.Models +{ + public class EventServiceEventArgs : EventArgs + { + public Event NewEvent { get; set; } = new Event(); + public EventServiceEventArgs(Event newEvent) + { + NewEvent = newEvent; + } + } +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs index be6b1d8..72aaeb2 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs @@ -5,29 +5,30 @@ namespace Elektrifikatsiya.Models; public class User { - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] - [Key] - public int Id { get; private set; } + [Required] + public List Devices { get; set; } = new(); - [Required] - public string Name { get; private set; } + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + [Key] + public int Id { get; private set; } - [Required] - public string PasswordHash { get; private set; } + public DateTime LastLoginDate { get; set; } - [Required] - public Role Role { get; set; } + [Required] + public string Name { get; private set; } - public string? SessionToken { get; set; } - public DateTime LastLoginDate { get; set; } + [Required] + public string PasswordHash { get; private set; } - [Required] - public List Devices { get; set; } = new(); + [Required] + public Role Role { get; set; } - public User(string name, string passwordHash, Role role) - { - Name = name; - PasswordHash = passwordHash; - Role = role; - } + public string? SessionToken { get; set; } + + public User(string name, string passwordHash, Role role) + { + Name = name; + PasswordHash = passwordHash; + Role = role; + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 45ab648..d63777f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -1,5 +1,6 @@ @page "/" @using Blazorise.Components; +@using Elektrifikatsiya.Database; @using Elektrifikatsiya.Models; @using System.Net @using Elektrifikatsiya.Services @@ -10,6 +11,8 @@ @inject IDeviceStatusService DeviceStatusService; @inject IDeviceManagmentService DeviceManagmentService; +@inject IEventService EventService; +@inject MainDatabaseContext MainDatabaseContext;
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs index 3d70f26..6fb0007 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs @@ -5,29 +5,23 @@ using Elektrifikatsiya.Utilities; using System.Diagnostics; using System.Text; +using Elektrifikatsiya.Services.Implementations; +using Elektrifikatsiya.Database; namespace Elektrifikatsiya.Pages; public partial class Dashboard { //TODO: insert new event here if plug produces one - private readonly List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) }; + private List events = new List() { new Event("Text", "Text", DateTime.Today, null) }; - //TODO: insert new Device here if user adds one - private List plugs = new List(); + private List labels = new List(); //code for graph private LineChart lineChart; - protected override void OnInitialized() - { - plugs = DeviceStatusService.GetDevices().ValueOrDefault ?? new List(); - - DeviceStatusService.OnDeviceStatusChanged += (_, e) => - { - _ = InvokeAsync(StateHasChanged); - }; - } + //TODO: insert new Device here if user adds one + private List plugs = new List(); protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -37,10 +31,63 @@ public partial class Dashboard } } - private async Task Switch(Device device) + protected override void OnInitialized() { - device.Enabled = !device.Enabled; - _ = await DeviceManagmentService.UpdateDevice(device); + plugs = DeviceStatusService.GetDevices().ValueOrDefault ?? new List(); + events = EventService.Events; + + EventService.OnEventCalled += (_, e) => + { + _ = InvokeAsync(StateHasChanged); + }; + DeviceStatusService.OnDeviceStatusChanged += (_, e) => + { + _ = InvokeAsync(StateHasChanged); + }; + } + + private async Task> GetData() + { + if (plugs.Count == 0) + { + return new(); + } + PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); + + string plugnames = ""; + foreach (Device device in plugs) + { + plugnames += $"shellyplug-s-{device.MacAddress}/relay/0|"; + } + plugnames = plugnames[0..^1]; + + double energyPrice = MainDatabaseContext.EnergyPriceChanges.OrderByDescending(e =>e.DateTime).FirstOrDefault()?.EnergyPrice ?? 0; + + PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; + PrometheusDataWrapper? priceData = (await promQueryer.Query($$"""sum(sum_over_time(power{sensor=~"{{plugnames}}"}[1y])*{{energyPrice}})"""))?.Data; + + Console.WriteLine(priceData.VectorTypeToTimestampFloatTuple()); + + var r = new Random(DateTime.Now.Millisecond); + + return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => + { + labels.Add(DateTimeOffset.FromUnixTimeSeconds(long.Parse($"1{x.Item1}0")).UtcDateTime.ToLocalTime().ToShortTimeString()); + return x.Item2; + }).ToList() ?? new List(); + } + + //TODO: insert dataset of current and last voltage usages + private async Task> GetLineChartDataset() + { + return new LineChartDataset + { + Label = "Wattage", + Data = await GetData(), + Fill = true, + PointRadius = 3, + CubicInterpolationMode = "monotone", + }; } private async Task HandleRedraw() @@ -50,48 +97,9 @@ public partial class Dashboard await lineChart.AddLabelsDatasetsAndUpdate(labels, await GetLineChartDataset()); } - //TODO: insert dataset of current and last voltage usages - private async Task> GetLineChartDataset() + private async Task Switch(Device device) { - return new LineChartDataset - { - Label = "Wattage", - Data = await DeviceData(), - Fill = true, - PointRadius = 3, - CubicInterpolationMode = "monotone", - }; - } - - private readonly List labels = new List(); - - private async Task> DeviceData() - { - PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); - - StringBuilder builder = new(); - foreach (Device device in plugs) - { - _ = builder.Append($"shellyplug-s-{device.MacAddress}/relay/0|"); - } - - if (builder.Length <= 1) - { - return new(); - } - - string plugnames = builder.ToString()[..^1]; - - Debug.WriteLine($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""); - - PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; - - Random r = new Random(DateTime.Now.Millisecond); - - return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => - { - labels.Add(DateTimeOffset.FromUnixTimeSeconds(long.Parse($"1{x.Item1}0")).UtcDateTime.ToLocalTime().ToShortTimeString()); - return x.Item2; - }).ToList() ?? new List(); + device.Enabled = !device.Enabled; + _ = await DeviceManagmentService.UpdateDevice(device); } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor index 5c303a0..f62fe54 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Login.razor @@ -1,4 +1,19 @@ @using System.Diagnostics; @using Elektrifikatsiya.Layouts; +@using Elektrifikatsiya.Services; +@inject IAuthenticationService AuthenticationService; +@inject NavigationManager NavigationManager @page "/login" -@layout LoginLayout; \ No newline at end of file +@layout LoginLayout; + +@code { + protected override async Task OnAfterRenderAsync(bool firstRender) + { + bool isAuthenticated = (await AuthenticationService.IsAuthenticated()).ValueOrDefault; + + if (isAuthenticated) + { + NavigationManager.NavigateTo("/"); + } + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 263b2af..4b68b99 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -1,5 +1,6 @@ @page "/Settings" @using Blazorise.Components; +@using Elektrifikatsiya.Database; @using Elektrifikatsiya.Models; @using System.Net @using System.Text.Json @@ -9,6 +10,7 @@ @inject IDeviceManagmentService DeviceManagmentService @inject IMessageService MessageService +@inject MainDatabaseContext MainDatabaseContext
@@ -90,21 +92,7 @@ Here you can change the name of your plug - - -
-
- - -
- Change Max Output -
- - Here you can limit how much power your plug uses - -
- - +


@@ -117,7 +105,7 @@ Here you select or change the room the plug belongs to. - +
} @@ -138,7 +126,7 @@ Here you enter your electricity price. This is gonna calculate the overall Price of your System - +
@@ -153,7 +141,9 @@ @code { List plugs = new List(); - private bool hideButtonSettings = true; + bool hideButtonSettings = true; + + double electricityPrice = 0; Device? SelectedDevice = null; Device? DeviceCopy = null; @@ -166,6 +156,8 @@ { plugs = getDevicesResult.Value; } + + electricityPrice = MainDatabaseContext.EnergyPriceChanges.OrderByDescending(e=>e.DateTime).FirstOrDefault()?.EnergyPrice ?? 0; } private void Toggle(Device device) @@ -175,16 +167,19 @@ DeviceCopy = device.CopyDevice(); } - private void OnSave() + private async void OnSave() { - if (hideButtonSettings || DeviceCopy is null || SelectedDevice is null) + if (hideButtonSettings) { + MainDatabaseContext.EnergyPriceChanges.Add(new EnergyPriceChange(electricityPrice)); + await MainDatabaseContext.SaveChangesAsync(); } - else + else if(DeviceCopy is not null && SelectedDevice is not null) { + SelectedDevice.OverwiteDevice(DeviceCopy); - DeviceManagmentService.UpdateDevice(SelectedDevice); + await DeviceManagmentService.UpdateDevice(SelectedDevice); } } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 6615bf5..1e0c08d 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -1,3 +1,5 @@ +global using INotificationService = Elektrifikatsiya.Services.INotifcationService; + using Blazorise; using Blazorise.Bootstrap; using Blazorise.Icons.Material; @@ -7,20 +9,31 @@ using Elektrifikatsiya.Database; using Elektrifikatsiya.Models; using Elektrifikatsiya.Services; using Elektrifikatsiya.Services.Implementations; - +using Elektrifikatsiya.Utilities; using HiveMQtt.Client; using HiveMQtt.Client.Options; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; WebApplicationBuilder builder = WebApplication.CreateBuilder(args); +// Read configuration +builder.Services.Configure(builder.Configuration.GetRequiredSection("EmailSettings")); + // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); +builder.Services.AddOptions(); builder.Services.AddHttpContextAccessor(); -builder.Services.AddHostedService(); +builder.Services.AddHostedService(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(s => s.GetRequiredService()); +builder.Services.AddSingleton(s => s.GetRequiredService()); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddSingleton((provider)=> { HiveMQClientOptions options = new() @@ -30,7 +43,7 @@ builder.Services.AddSingleton((provider)=> UseTLS = false, }; - HiveMQClient client = new(options); + HiveMQClient client = new(options); client.ConnectAsync().ConfigureAwait(false); return client; }); @@ -67,6 +80,9 @@ app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.MapControllers(); + +app.Services.GetRequiredService>().Value.CompileTemplates(); + IServiceScope serviceScope = app.Services.GetRequiredService().CreateScope(); MainDatabaseContext mainDatabase = serviceScope.ServiceProvider.GetRequiredService(); @@ -81,7 +97,7 @@ if (!mainDatabase.Users.Any()) app.Run(); -void AddBlazorise(IServiceCollection services) +static void AddBlazorise(IServiceCollection services) { _ = services.AddBlazorise(); _ = services.AddMaterialProviders(); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs index 61e1cc1..ef10788 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceStatusService.cs @@ -6,7 +6,7 @@ namespace Elektrifikatsiya.Services; public interface IDeviceStatusService { - public event EventHandler OnDeviceStatusChanged; + public event EventHandler OnDeviceStatusChanged; public Result> GetDevices(); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IEmailService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IEmailService.cs new file mode 100644 index 0000000..01caf9d --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IEmailService.cs @@ -0,0 +1,8 @@ +namespace Elektrifikatsiya.Services; + +public interface IEmailService +{ + Task SendAsync(string to, string subject, string html, string? from = null); + + Task SendWithTemeplateAsync(string to, string subject, string templateKey, string? from = null, Dictionary? templateParameters = null); +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IEventService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IEventService.cs new file mode 100644 index 0000000..9445447 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IEventService.cs @@ -0,0 +1,10 @@ +using Elektrifikatsiya.Models; + +namespace Elektrifikatsiya.Services +{ + public interface IEventService + { + public List Events { get; } + public event EventHandler OnEventCalled; + } +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/INotifcationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/INotifcationService.cs new file mode 100644 index 0000000..96e1b23 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/INotifcationService.cs @@ -0,0 +1,8 @@ +using Elektrifikatsiya.Utilities; + +namespace Elektrifikatsiya.Services; + +public interface INotifcationService : IScheduledService +{ + +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IUpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IUpdateService.cs new file mode 100644 index 0000000..acfae54 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IUpdateService.cs @@ -0,0 +1,8 @@ +using Elektrifikatsiya.Utilities; + +namespace Elektrifikatsiya.Services; + +public interface IUpdateService : IScheduledService +{ + +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index 12e4bb1..57f2180 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -173,6 +173,8 @@ public class DeviceManagmentService : IDeviceManagmentService PublishResult res = await hiveMQClient.PublishAsync($"shellies/shellyplug-s-{device.MacAddress}/relay/0/command", device.Enabled ? "on" : "off"); + device.User = mainDatabaseContext.Users.First(u => u.Id == device.User.Id); + _ = mainDatabaseContext.Update(device); return await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs index becc6f4..4c4f35b 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceStatusService.cs @@ -1,5 +1,4 @@ using Elektrifikatsiya.Models; - using FluentResults; namespace Elektrifikatsiya.Services.Implementations; @@ -7,15 +6,14 @@ namespace Elektrifikatsiya.Services.Implementations; public class DeviceStatusService : IDeviceStatusService { private readonly ILogger logger; - - public event EventHandler? OnDeviceStatusChanged; + public event EventHandler? OnDeviceStatusChanged; private readonly Dictionary devices = new(); public DeviceStatusService(ILogger logger) { this.logger = logger; - } + } public Result> GetDevices() { @@ -36,7 +34,7 @@ public class DeviceStatusService : IDeviceStatusService modDevice.IpAddress = device.IpAddress; modDevice.Name = device.Name; - OnDeviceStatusChanged?.Invoke(this, new DeviceStatusChagedEventArgs(device.MacAddress)); + OnDeviceStatusChanged?.Invoke(this, new DeviceStatusChangedEventArgs(device.MacAddress)); return Result.Ok(); } diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EmailService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EmailService.cs new file mode 100644 index 0000000..5ea518a --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EmailService.cs @@ -0,0 +1,43 @@ +using Elektrifikatsiya.Utilities; +using HandlebarsDotNet; +using MailKit.Net.Smtp; +using MailKit.Security; +using Microsoft.Extensions.Options; +using MimeKit; +using MimeKit.Text; + +namespace Elektrifikatsiya.Services.Implementations +{ + public class EmailService : IEmailService + { + private readonly EmailSettings emailSettings; + + public EmailService(IOptions emailSettings) + { + this.emailSettings = emailSettings.Value; + } + + public async Task SendAsync(string to, string subject, string html, string? from = null) + { + from ??= emailSettings.DefaultEmail; + + MimeMessage message = new MimeMessage(); + message.From.Add(MailboxAddress.Parse(from)); + message.To.Add(MailboxAddress.Parse(to)); + message.Subject = subject; + message.Body = new TextPart(TextFormat.Html) { Text = html }; + + using SmtpClient smtp = new SmtpClient(); + await smtp.ConnectAsync(emailSettings.SmtpServer, emailSettings.SmtpPort, SecureSocketOptions.StartTls); + await smtp.AuthenticateAsync(emailSettings.User, emailSettings.Key); + await smtp.SendAsync(message); + await smtp.DisconnectAsync(true); + } + + public Task SendWithTemeplateAsync(string to, string subject, string templateKey, string? from = null, Dictionary? templateParameters = null) + { + string content = emailSettings.CompiledTemplates[templateKey](templateParameters ?? new()); + return SendAsync(to, subject, content, from); + } + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EventService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EventService.cs new file mode 100644 index 0000000..3fa5e9a --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EventService.cs @@ -0,0 +1,55 @@ +using Elektrifikatsiya.Models; +using FluentResults; +using System.Reflection; + +namespace Elektrifikatsiya.Services.Implementations +{ + public class EventService : IEventService + { + private readonly ILogger logger; + public event EventHandler OnEventCalled; + public List Events { get; } = new(); + + public EventService(ILogger logger, IDeviceStatusService deviceStatusService, IDeviceManagmentService deviceManagmentService) + { + this.logger = logger; + List deviceList = deviceManagmentService.GetDevices().ValueOrDefault.Select(x=>x.CopyDevice()).ToList(); + + deviceStatusService.OnDeviceStatusChanged += (_, e) => + { + bool newDevice = true; + Device currentDevice = deviceManagmentService.GetDevice(e.MacAddress).ValueOrDefault; + + for (int i = 0; i < deviceList.Count; i++) + { + if (deviceList[i].MacAddress == currentDevice.MacAddress) + { + PropertyInfo[] properties = typeof(Device).GetProperties(); + + foreach(PropertyInfo property in properties) { + var currentvalue = property.GetValue(deviceList[i], null); + var newvalue = property.GetValue(currentDevice, null); + if(newvalue is not null && !newvalue.ToString().Equals(currentvalue.ToString())) + { + string eventName = $"Plug {deviceList[i].Name} changed: {property.Name}"; + string description = $"Changed {property.Name} of plug [{currentvalue}] to [{newvalue}]"; + DateTime dateTime = DateTime.Now; + + Event newEvent = new Event(eventName, description, dateTime, currentDevice); + Events.Insert(0,newEvent); + OnEventCalled?.Invoke(this, new EventServiceEventArgs(newEvent)); + } + + } + deviceList[i].OverwiteDevice(currentDevice); + newDevice = false; break; + } + } + if (newDevice) + { + deviceList.Add(deviceManagmentService.GetDevice(e.MacAddress).ValueOrDefault); + } + }; + } + } +} diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs new file mode 100644 index 0000000..12c6ff0 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs @@ -0,0 +1,24 @@ +using Elektrifikatsiya.Utilities; + +namespace Elektrifikatsiya.Services.Implementations; + +public class NotifcationService : INotifcationService +{ + public TimeSpan ExecutionRepeatDelay => TimeSpan.FromDays(1); + public DateTime FirstExecutionTime => DateTime.Now.AddDays(0); + private readonly IEmailService emailService; + private readonly ILogger logger; + + public NotifcationService(ILogger logger, IEmailService emailService) + { + this.logger = logger; + this.emailService = emailService; + } + + public async void Update() + { + //logger.LogInformation("Sending Email"); + //await emailService.SendWithTemeplateAsync("manuel.strubegger@htl-saalfelden.at", "AAAA", "DailyNotification", templateParameters: new() { { "yesterday", "10" }, { "yearly", "100" }, { "link", "localhost:5565/yes" } }); + //logger.LogInformation("Done sending"); + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/ServiceScheduler.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/ServiceScheduler.cs new file mode 100644 index 0000000..c430ade --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/ServiceScheduler.cs @@ -0,0 +1,61 @@ +using Elektrifikatsiya.Utilities; + +namespace Elektrifikatsiya.Services.Implementations; + +public class ServiceScheduler : IHostedService +{ + private readonly ILogger logger; + private readonly IEnumerable scheduledServices; + private readonly Dictionary lastExectued; + + private Timer timer = null!; + + public ServiceScheduler(ILogger logger, IServiceProvider serviceProvider) + { + this.logger = logger; + scheduledServices = serviceProvider.GetServices(); + lastExectued = scheduledServices.ToDictionary(x => x, x => x.FirstExecutionTime); + + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + logger.LogInformation("Starting service scheduler..."); + + timer = new Timer(async (_) => await Update(), null, TimeSpan.Zero, Timeout.InfiniteTimeSpan); + + logger.LogInformation("Service scheduler started."); + } + + public Task StopAsync(CancellationToken cancellationToken) + { + logger.LogInformation("Stopping service scheduler."); + + timer.Dispose(); + + logger.LogInformation("Stopped service scheduler."); + + return Task.CompletedTask; + } + + private async Task Update() + { + TimeSpan s = lastExectued.Min(x => (x.Value + x.Key.ExecutionRepeatDelay)) - DateTime.Now; + + if (s < TimeSpan.Zero) + { + s = TimeSpan.FromSeconds(1); + } + + timer.Change(s, Timeout.InfiniteTimeSpan); + + foreach (IScheduledService scheduledService in scheduledServices.Where(s => s.FirstExecutionTime < DateTime.Now)) + { + if (lastExectued[scheduledService] + scheduledService.ExecutionRepeatDelay <= DateTime.Now) + { + lastExectued[scheduledService] = DateTime.Now; + scheduledService.Update(); + } + } + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs index 0a3ef4a..94070e1 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs @@ -8,38 +8,29 @@ using Microsoft.EntityFrameworkCore; namespace Elektrifikatsiya.Services.Implementations; -public class UpdateService : IHostedService, IDisposable +public class UpdateService : IUpdateService { private readonly ILogger logger; private readonly IDeviceStatusService deviceStatusService; - private readonly IServiceScopeFactory serviceScopeFactory; - private Timer? timer = null; public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, IServiceScopeFactory serviceScopeFactory) { this.logger = logger; this.deviceStatusService = deviceStatusService; - this.serviceScopeFactory = serviceScopeFactory; - } - public async Task StartAsync(CancellationToken cancellationToken) - { IServiceScope serviceScope = serviceScopeFactory.CreateScope(); MainDatabaseContext mainDatabaseContext = serviceScope.ServiceProvider.GetRequiredService(); - logger.LogInformation("Starting update service..."); - - foreach (Device device in await mainDatabaseContext.Devices.Include(d => d.User).AsNoTracking().ToListAsync(cancellationToken)) + foreach (Device device in mainDatabaseContext.Devices.Include(d => d.User).AsNoTracking().ToList()) { _ = deviceStatusService.TrackDevice(device); } - - timer = new Timer(async (_) => await Update(), null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); - - logger.LogInformation("Update service started."); } - private async Task Update() + public DateTime FirstExecutionTime { get; } = DateTime.Now.AddSeconds(15); + public TimeSpan ExecutionRepeatDelay { get; } = TimeSpan.FromSeconds(15); + + public async void Update() { Result> getDeviceStatusResult = deviceStatusService.GetDevices(); @@ -61,26 +52,4 @@ public class UpdateService : IHostedService, IDisposable } } } - - public Task StopAsync(CancellationToken cancellationToken) - { - logger.LogInformation("Stopping update service."); - - _ = timer?.Change(Timeout.Infinite, 0); - - logger.LogInformation("Stopped update service."); - - return Task.CompletedTask; - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - timer?.Dispose(); - } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite b/src/Elektrifikatsiya/Elektrifikatsiya/UserDatabase.sqlite deleted file mode 100644 index eeeb96ffa3098bd6e50255479f5d1e5c5a3c0c6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI#%SyvQ6b9hQ)C&|Wf{TEwLsl&$)9D$$NwY!ljvxECM7XY?sN zttn_x+?W5rOft8VnJ=s9Ux$;z(0#s`r3IaeLm{O&BN9SLE)_28aQJ0s-Qef4{a;9N zGCDrsS+e#nY9Cx7AOHafKmY;|fB*y_009U<00Q3xV!7uwo6fLEZ>Pr2r+i5rSu=k& z+1+Nd(oU4G6>0xGRJ1X-o~1L>;+2ipBWK@rUFU6gm2+Ut!mcX$W4*WP^Qc}W4lfvc z6hvBGs)VARrf3j`)b2%no%q~OUfda#E8-;R`pJ+wYDoS-_kxHMcU7cYU#TMAiAP%9 zaF#MtITEMVzT}JXRcar9pV2qgPV!9WPbOQ>;GLA~!_*dG{xHcd(&CR#B>9v_HcwJ* zEbr!g=|?~S0uX=z1Rwwb2tWV=5P$##Ah5*(xc_hQ&&AOo009U<00Izz00bZa0SG_< H0;Rwwql9r3 diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/EmailSettings.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/EmailSettings.cs new file mode 100644 index 0000000..4e53927 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/EmailSettings.cs @@ -0,0 +1,23 @@ +using HandlebarsDotNet; + +namespace Elektrifikatsiya.Utilities; + +public class EmailSettings +{ + public string User { get; set; } + public string DefaultEmail { get; set; } + public string Key { get; set; } + public Dictionary Templates { get; set; } + public string SmtpServer { get; set; } + public int SmtpPort { get; set; } + + public Dictionary> CompiledTemplates = new(); + + public void CompileTemplates() + { + foreach ((string templateName, string templatePath) in Templates) + { + CompiledTemplates.Add(templateName, Handlebars.Compile(File.ReadAllText(templatePath))); + } + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/IScheduledService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/IScheduledService.cs new file mode 100644 index 0000000..7c4e0f7 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/IScheduledService.cs @@ -0,0 +1,9 @@ +namespace Elektrifikatsiya.Utilities; + +public interface IScheduledService +{ + DateTime FirstExecutionTime { get; } + TimeSpan ExecutionRepeatDelay { get; } + + void Update(); +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json b/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json deleted file mode 100644 index 770d3e9..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "DetailedErrors": true, - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/src/Elektrifikatsiya/assets/DailyNotif.html b/src/Elektrifikatsiya/assets/DailyNotif.html new file mode 100644 index 0000000..ab13c0d --- /dev/null +++ b/src/Elektrifikatsiya/assets/DailyNotif.html @@ -0,0 +1,26 @@ +
Daily Notification
Energy Consumption yesterday: {{yesterday}}
Energy Consumption since the start of the year: {{yearly}}
\ No newline at end of file diff --git a/src/Elektrifikatsiya/assets/DailyNotif.mjml b/src/Elektrifikatsiya/assets/DailyNotif.mjml new file mode 100644 index 0000000..a4cfbb6 --- /dev/null +++ b/src/Elektrifikatsiya/assets/DailyNotif.mjml @@ -0,0 +1,49 @@ + + + + + + + @font-face { + font-family: Nunito; + src: url(https://fonts.gstatic.com/s/nunito/v16/XRXV3I6Li01BKofINeaB.woff2) + format('truetype'); + } + + + + + + + + + + Daily Notification + + + + + + + Energy Consumption yesterday: {{yesterday}} + + + + + Energy Consumption since the start of the year: {{yearly}} + + + + + + + + Goto Dashboard + + + + + + + + \ No newline at end of file From 90ffa46b4293bbb229a37236bc0a411847ec3c0f Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Thu, 1 Jun 2023 15:38:10 +0200 Subject: [PATCH 69/85] Create appsettings.Development.json --- .../appsettings.Development.json | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json b/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json new file mode 100644 index 0000000..4e6d4c9 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json @@ -0,0 +1,20 @@ +{ + "DetailedErrors": true, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "EmailSettings": { + "User": "", + "Key": "", + "DefaultEmail": "SMTP_EMAIL_ADDRESS", + "DefaultEmail": "", + "Templates": { + "DailyNotification": "../assets/DailyNotif.html" + }, + "SmtpServer": "", + "SmtpPort": + } +} From 14fa374bb7834b3da4b3b5ffa7d4c8db09be3a75 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 7 Jun 2023 08:50:47 +0200 Subject: [PATCH 70/85] Bouton Actualiser --- src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor | 2 +- .../Elektrifikatsiya/Pages/Dashboard.razor.cs | 4 ++-- src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor | 6 +++--- .../Services/Implementations/UpdateService.cs | 4 ++-- src/Elektrifikatsiya/host/prometheus/prometheus.yml | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index d63777f..6269368 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -127,7 +127,7 @@ - + diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs index 6fb0007..f3e4caa 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs @@ -64,9 +64,9 @@ public partial class Dashboard double energyPrice = MainDatabaseContext.EnergyPriceChanges.OrderByDescending(e =>e.DateTime).FirstOrDefault()?.EnergyPrice ?? 0; PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; - PrometheusDataWrapper? priceData = (await promQueryer.Query($$"""sum(sum_over_time(power{sensor=~"{{plugnames}}"}[1y])*{{energyPrice}})"""))?.Data; + //PrometheusDataWrapper? priceData = (await promQueryer.Query($$"""sum(sum_over_time(power{sensor=~"{{plugnames}}"}[1y])*{{energyPrice}})"""))?.Data; - Console.WriteLine(priceData.VectorTypeToTimestampFloatTuple()); + //Console.WriteLine(priceData.VectorTypeToTimestampFloatTuple()); var r = new Random(DateTime.Now.Millisecond); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 4b68b99..d2aea31 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -92,7 +92,7 @@ Here you can change the name of your plug - +

@@ -171,8 +171,8 @@ { if (hideButtonSettings) { - - MainDatabaseContext.EnergyPriceChanges.Add(new EnergyPriceChange(electricityPrice)); + MainDatabaseContext.ChangeTracker.Clear(); + MainDatabaseContext.EnergyPriceChanges.Add(new EnergyPriceChange(electricityPrice)); await MainDatabaseContext.SaveChangesAsync(); } else if(DeviceCopy is not null && SelectedDevice is not null) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs index 94070e1..e1073c3 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs @@ -27,8 +27,8 @@ public class UpdateService : IUpdateService } } - public DateTime FirstExecutionTime { get; } = DateTime.Now.AddSeconds(15); - public TimeSpan ExecutionRepeatDelay { get; } = TimeSpan.FromSeconds(15); + public DateTime FirstExecutionTime { get; } = DateTime.Now.AddSeconds(10); + public TimeSpan ExecutionRepeatDelay { get; } = TimeSpan.FromSeconds(1); public async void Update() { diff --git a/src/Elektrifikatsiya/host/prometheus/prometheus.yml b/src/Elektrifikatsiya/host/prometheus/prometheus.yml index ea003f0..9ae35f2 100644 --- a/src/Elektrifikatsiya/host/prometheus/prometheus.yml +++ b/src/Elektrifikatsiya/host/prometheus/prometheus.yml @@ -1,6 +1,6 @@ global: - scrape_interval: 15s - evaluation_interval: 15s + scrape_interval: 1s + evaluation_interval: 1s rule_files: # - "first.rules" From b9fed85a8c9c7a442aa80253391177aa4a265429 Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 7 Jun 2023 09:40:11 +0200 Subject: [PATCH 71/85] Toggle Fix --- .../Elektrifikatsiya/Pages/Settings.razor | 18 +++++++++++++++--- .../appsettings.Development.json | 3 +-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index d2aea31..2833c90 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -139,10 +139,13 @@ @code { + ListView deviceList = new ListView(); List plugs = new List(); bool hideButtonSettings = true; + int clicks = 0; + double electricityPrice = 0; Device? SelectedDevice = null; @@ -162,9 +165,18 @@ private void Toggle(Device device) { - hideButtonSettings = !hideButtonSettings; - SelectedDevice = device; - DeviceCopy = device.CopyDevice(); + if (device == SelectedDevice || clicks == 0) + { + hideButtonSettings = !hideButtonSettings; + SelectedDevice = device; + DeviceCopy = device.CopyDevice(); + clicks++; + } + else + { + SelectedDevice = device; + DeviceCopy = device.CopyDevice(); + } } private async void OnSave() diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json b/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json index 4e6d4c9..617c1e4 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json +++ b/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json @@ -10,11 +10,10 @@ "User": "", "Key": "", "DefaultEmail": "SMTP_EMAIL_ADDRESS", - "DefaultEmail": "", "Templates": { "DailyNotification": "../assets/DailyNotif.html" }, "SmtpServer": "", - "SmtpPort": + "SmtpPort": 0 } } From 1824932a5d879f06142d65e981310b2cfa5912ea Mon Sep 17 00:00:00 2001 From: Friend2868 <90833416+Friend2868@users.noreply.github.com> Date: Wed, 7 Jun 2023 10:22:06 +0200 Subject: [PATCH 72/85] Toggle Fix (for real) --- .../Elektrifikatsiya/Pages/Admin.razor | 35 +++++++++++++++---- .../Elektrifikatsiya/Pages/Settings.razor | 17 ++++----- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor index 0cc6258..a0d6fe5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor @@ -112,7 +112,7 @@
- @@ -123,8 +123,8 @@
- -
+ + - - -
@@ -191,12 +191,35 @@ @code { List users = new List() { new User("Silas", "aldjlfasd", Role.Admin), new User("Joe", "qiowruioewjfopa", Role.Admin), new User("Stefan", "adfadsdf", Role.Admin), new User("Manu", "öhöfldaösldf", Role.User) }; + User? SelectedUser = null; + User? UserCopy = null; + + bool hideButtonSettings = true; + bool newpage = true; + private Modal? modalRefDelete; public Admin() { } + private void Toggle(User user) + { + if (user == SelectedUser || newpage) + { + hideButtonSettings = !hideButtonSettings; + } + else + { + if (hideButtonSettings) + { + hideButtonSettings = !hideButtonSettings; + } + } + SelectedUser = user; + newpage = false; + } + private Task ShowModalDelete() { return modalRefDelete!.Show(); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 2833c90..15bd083 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -143,8 +143,7 @@ List plugs = new List(); bool hideButtonSettings = true; - - int clicks = 0; + bool newpage = true; double electricityPrice = 0; @@ -165,18 +164,20 @@ private void Toggle(Device device) { - if (device == SelectedDevice || clicks == 0) + if (device == SelectedDevice || newpage) { hideButtonSettings = !hideButtonSettings; - SelectedDevice = device; - DeviceCopy = device.CopyDevice(); - clicks++; } else { - SelectedDevice = device; - DeviceCopy = device.CopyDevice(); + if (hideButtonSettings) + { + hideButtonSettings = !hideButtonSettings; + } } + SelectedDevice = device; + DeviceCopy = device.CopyDevice(); + newpage = false; } private async void OnSave() From 2b108e09b944dc6e9007a6942f7023250daa28ca Mon Sep 17 00:00:00 2001 From: Aldin296 <99395958+Aldin296@users.noreply.github.com> Date: Wed, 7 Jun 2023 10:25:03 +0200 Subject: [PATCH 73/85] red delete button settings page --- .../Elektrifikatsiya/Pages/Settings.razor | 101 ++++++++++-------- 1 file changed, 55 insertions(+), 46 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 2833c90..fbffc6f 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -52,62 +52,67 @@
- + -
-
+
+
- - + - + @if (DeviceCopy is not null) { - } @code { - List users = new List() { new User("Silas", "aldjlfasd", Role.Admin), new User("Joe", "qiowruioewjfopa", Role.Admin), new User("Stefan", "adfadsdf", Role.Admin), new User("Manu", "öhöfldaösldf", Role.User) }; + List users = new List() { new User("Silas", "aldjlfasd", "funny@gmail.com", Role.Admin), new User("Joe", "qiowruioewjfopa", "fluffmcfluff@hotmail.com", Role.Admin), new User("Stefan", "adfadsdf", "hahababaman@mail.com" , Role.Admin), new User("Manu", "öhöfldaösldf", "megatollermanu69@mail.com", Role.User) }; User? SelectedUser = null; User? UserCopy = null; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs index 69b3ba9..a880860 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/AuthenticationService.cs @@ -120,7 +120,7 @@ public class AuthenticationService : IAuthenticationService return Result.Fail("User name already exists!"); } - User user = new User(name, BC.HashPassword(password), role); + User user = new User(name, BC.HashPassword(password), "", role); _ = mainDatabaseContext.Users.Add(user); return (await Result.Try(() => mainDatabaseContext.SaveChangesAsync())).ToResult(); From 5b8915d7b41eae62ba6008c1bb260e9e5b62d1d4 Mon Sep 17 00:00:00 2001 From: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Wed, 7 Jun 2023 11:59:03 +0200 Subject: [PATCH 75/85] aaahhh git ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a2dcdb0..688c331 100644 --- a/.gitignore +++ b/.gitignore @@ -352,3 +352,4 @@ MigrationBackup/ # Project specific *.sqlite* src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json +/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json~origin_Development From a5ecb430773ef29d4a14e6b3dcf7b18d783b615f Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Tue, 13 Jun 2023 20:56:56 +0200 Subject: [PATCH 76/85] Implement `NotificationService` and `EnergyPriceService` --- .gitignore | 1 + .../Elektrifikatsiya/Pages/Dashboard.razor | 7 +- .../Elektrifikatsiya/Pages/Dashboard.razor.cs | 18 ++-- .../Elektrifikatsiya/Program.cs | 40 +++++---- .../Services/IEnergyPriceService.cs | 13 +++ .../Implementations/EnergyPriceService.cs | 86 +++++++++++++++++++ .../Implementations/NotifcationService.cs | 25 +++--- .../Utilities/PrometheusQuery.cs | 40 ++++----- .../appsettings.Development.json | 19 ---- 9 files changed, 167 insertions(+), 82 deletions(-) create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/IEnergyPriceService.cs create mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EnergyPriceService.cs delete mode 100644 src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json diff --git a/.gitignore b/.gitignore index 688c331..85d8065 100644 --- a/.gitignore +++ b/.gitignore @@ -353,3 +353,4 @@ MigrationBackup/ *.sqlite* src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json /src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json~origin_Development +/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index 6269368..b5149d5 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -12,6 +12,7 @@ @inject IDeviceStatusService DeviceStatusService; @inject IDeviceManagmentService DeviceManagmentService; @inject IEventService EventService; +@inject IEnergyPriceService EnergyPriceService; @inject MainDatabaseContext MainDatabaseContext;
@@ -107,19 +108,19 @@
Daily Cost
- 2 + @($"{EnergyPriceService.DailyEnergyCost:F2}")
Monthly Cost
- 60 + @($"{EnergyPriceService.MonthlyEnergyCost:F2}")
Yearly Cost
- 720 + @($"{EnergyPriceService.YearlyEnergyCost:F2}")
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs index f3e4caa..91b8687 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs @@ -1,22 +1,18 @@ using Blazorise.Charts; +using Elektrifikatsiya.Database; using Elektrifikatsiya.Models; using Elektrifikatsiya.Utilities; -using System.Diagnostics; -using System.Text; -using Elektrifikatsiya.Services.Implementations; -using Elektrifikatsiya.Database; - namespace Elektrifikatsiya.Pages; public partial class Dashboard { + private readonly List labels = new List(); + //TODO: insert new event here if plug produces one private List events = new List() { new Event("Text", "Text", DateTime.Today, null) }; - private List labels = new List(); - //code for graph private LineChart lineChart; @@ -36,11 +32,11 @@ public partial class Dashboard plugs = DeviceStatusService.GetDevices().ValueOrDefault ?? new List(); events = EventService.Events; - EventService.OnEventCalled += (_, e) => + EventService.OnEventCalled += (__, e) => { _ = InvokeAsync(StateHasChanged); }; - DeviceStatusService.OnDeviceStatusChanged += (_, e) => + DeviceStatusService.OnDeviceStatusChanged += (__, e) => { _ = InvokeAsync(StateHasChanged); }; @@ -61,14 +57,14 @@ public partial class Dashboard } plugnames = plugnames[0..^1]; - double energyPrice = MainDatabaseContext.EnergyPriceChanges.OrderByDescending(e =>e.DateTime).FirstOrDefault()?.EnergyPrice ?? 0; + double energyPrice = MainDatabaseContext.EnergyPriceChanges.OrderByDescending(e => e.DateTime).FirstOrDefault()?.EnergyPrice ?? 0; PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; //PrometheusDataWrapper? priceData = (await promQueryer.Query($$"""sum(sum_over_time(power{sensor=~"{{plugnames}}"}[1y])*{{energyPrice}})"""))?.Data; //Console.WriteLine(priceData.VectorTypeToTimestampFloatTuple()); - var r = new Random(DateTime.Now.Millisecond); + Random r = new Random(DateTime.Now.Millisecond); return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => { diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs index 1e0c08d..c2a81dc 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs @@ -10,6 +10,7 @@ using Elektrifikatsiya.Models; using Elektrifikatsiya.Services; using Elektrifikatsiya.Services.Implementations; using Elektrifikatsiya.Utilities; + using HiveMQtt.Client; using HiveMQtt.Client.Options; @@ -30,22 +31,24 @@ builder.Services.AddHostedService(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(s => s.GetRequiredService()); builder.Services.AddSingleton(s => s.GetRequiredService()); +builder.Services.AddSingleton(s => s.GetRequiredService()); builder.Services.AddSingleton(); builder.Services.AddSingleton(); -builder.Services.AddSingleton((provider)=> +builder.Services.AddSingleton((provider) => { - HiveMQClientOptions options = new() - { - Host = "localhost", - Port = 1883, - UseTLS = false, - }; + HiveMQClientOptions options = new() + { + Host = "localhost", + Port = 1883, + UseTLS = false, + }; - HiveMQClient client = new(options); - client.ConnectAsync().ConfigureAwait(false); - return client; + HiveMQClient client = new(options); + _ = client.ConnectAsync().ConfigureAwait(false); + return client; }); builder.Services.AddTransient(); builder.Services.AddScoped(); @@ -56,7 +59,7 @@ builder.Services.AddBootstrapProviders(); builder.Services.AddHttpClient(); builder.Services.AddBlazorise(options => { - options.Immediate = true; + options.Immediate = true; }); AddBlazorise(builder.Services); @@ -66,9 +69,9 @@ WebApplication app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { - _ = app.UseExceptionHandler("/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - _ = app.UseHsts(); + _ = app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. + _ = app.UseHsts(); } app.UseHttpsRedirection(); @@ -80,7 +83,6 @@ app.MapBlazorHub(); app.MapFallbackToPage("/_Host"); app.MapControllers(); - app.Services.GetRequiredService>().Value.CompileTemplates(); IServiceScope serviceScope = app.Services.GetRequiredService().CreateScope(); @@ -92,14 +94,14 @@ IAuthenticationService authenticationService = serviceScope.ServiceProvider.GetR if (!mainDatabase.Users.Any()) { - _ = authenticationService.RegisterUserAsync("admin", "admin", Role.Admin); + _ = authenticationService.RegisterUserAsync("admin", "admin", Role.Admin); } app.Run(); static void AddBlazorise(IServiceCollection services) { - _ = services.AddBlazorise(); - _ = services.AddMaterialProviders(); - _ = services.AddMaterialIcons(); + _ = services.AddBlazorise(); + _ = services.AddMaterialProviders(); + _ = services.AddMaterialIcons(); } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IEnergyPriceService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IEnergyPriceService.cs new file mode 100644 index 0000000..179cce7 --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IEnergyPriceService.cs @@ -0,0 +1,13 @@ +using Elektrifikatsiya.Models; +using Elektrifikatsiya.Utilities; + +namespace Elektrifikatsiya.Services; + +public interface IEnergyPriceService : IScheduledService +{ + public double DailyEnergyCost { get; } + public double MonthlyEnergyCost { get; } + public double YearlyEnergyCost { get; } + + public Task GetEnergyPrice(DateTime startime, DateTime endTime, List plugs, List changes); +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EnergyPriceService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EnergyPriceService.cs new file mode 100644 index 0000000..e81031c --- /dev/null +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EnergyPriceService.cs @@ -0,0 +1,86 @@ +using Elektrifikatsiya.Database; +using Elektrifikatsiya.Models; +using Elektrifikatsiya.Utilities; + +using System.Globalization; + +namespace Elektrifikatsiya.Services.Implementations; + +public class EnergyPriceService : IEnergyPriceService +{ + private readonly MainDatabaseContext mainDatabaseContext; + private readonly PrometheusQuery prometheusQuerier = new("http://127.0.0.1:9090"); + + public TimeSpan ExecutionRepeatDelay { get; } = TimeSpan.FromSeconds(5); + public DateTime FirstExecutionTime { get; } = DateTime.Now.AddSeconds(5); + public double MonthlyEnergyCost { get; private set; } + + public double YearlyEnergyCost { get; private set; } + + public double DailyEnergyCost { get; private set; } + + public EnergyPriceService(IServiceScopeFactory serviceScopeFactory) + { + mainDatabaseContext = serviceScopeFactory.CreateScope().ServiceProvider.GetRequiredService(); + } + + /// + /// Calculate the energy price for the given timespan + /// + /// The timestamp that has the greater value + /// The timestamp that has the lower value + /// + /// + /// + /// + public async Task GetEnergyPrice(DateTime startime, DateTime endTime, List plugs, List changes) + { + string plugnames = ""; + foreach (Device device in plugs) + { + plugnames += $"shellyplug-s-{device.MacAddress}/relay/0|"; + } + plugnames = plugnames[0..^1]; + + if (startime < endTime) + { + throw new ArgumentException("Read the xmlDoc"); + } + + changes = changes.OrderByDescending(x => x.DateTime).ToList(); + + double total = (await prometheusQuerier.Query($$"""sum_over_time(sum(power{sensor=~"{{plugnames}}"})[{{(int)Math.Ceiling((startime - changes.First().DateTime).TotalMinutes)}}m:1s] @ {{((DateTimeOffset)startime).ToUnixTimeSeconds()}}) * {{(changes.First().EnergyPrice / 3600).ToString(CultureInfo.InvariantCulture)}}"""))?.Data?.VectorTypeToTimestampFloatTuple().ValueOrDefault.Item2 ?? 0; + + for (int i = 0; i < changes.Count - 1; i++) + { + bool inMinutes = true; + int duration = (int)Math.Ceiling((changes[i].DateTime - changes[i + 1].DateTime).TotalMinutes); + if (duration > 100000) + { + inMinutes = false; + duration = (int)Math.Ceiling(duration / 1440.0); + } + long timestamp = ((DateTimeOffset)changes[i].DateTime).ToUnixTimeSeconds(); + + double price = changes[i + 1].EnergyPrice; + + total += (await prometheusQuerier.Query($$"""sum_over_time(sum(power{sensor=~"{{plugnames}}"})[{{duration}}{{(inMinutes ? "m" : "d")}}:1s] @ {{timestamp}}) * {{(price / 3600).ToString(CultureInfo.InvariantCulture)}}"""))?.Data?.VectorTypeToTimestampFloatTuple().ValueOrDefault.Item2 ?? 0; + if (changes[i].DateTime < endTime) + { + break; + } + } + + return total; + } + + public async void Update() + { + List plugs = mainDatabaseContext.Devices.ToList(); + List energyPriceChanges = mainDatabaseContext.EnergyPriceChanges.ToList(); + + DailyEnergyCost = await GetEnergyPrice(DateTime.Now, DateTime.Now.AddDays(-1), plugs, energyPriceChanges); + MonthlyEnergyCost = await GetEnergyPrice(DateTime.Now, DateTime.Now.AddMonths(-1), plugs, energyPriceChanges); + YearlyEnergyCost = await GetEnergyPrice(DateTime.Now, DateTime.Now.AddYears(-1), plugs, energyPriceChanges); + } +} \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs index 12c6ff0..b8ddd0c 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs @@ -1,24 +1,29 @@ -using Elektrifikatsiya.Utilities; +namespace Elektrifikatsiya.Services.Implementations; -namespace Elektrifikatsiya.Services.Implementations; - -public class NotifcationService : INotifcationService +public class NotifcationService : INotificationService { + private readonly IEmailService emailService; + private readonly IEnergyPriceService energyPriceService; + private readonly Microsoft.Extensions.Configuration.IConfiguration configuration; + private readonly ILogger logger; public TimeSpan ExecutionRepeatDelay => TimeSpan.FromDays(1); public DateTime FirstExecutionTime => DateTime.Now.AddDays(0); - private readonly IEmailService emailService; - private readonly ILogger logger; - public NotifcationService(ILogger logger, IEmailService emailService) + public NotifcationService(ILogger logger, IEmailService emailService, IEnergyPriceService energyPriceService, Microsoft.Extensions.Configuration.IConfiguration configuration) { this.logger = logger; this.emailService = emailService; + this.energyPriceService = energyPriceService; + this.configuration = configuration; } public async void Update() { - //logger.LogInformation("Sending Email"); - //await emailService.SendWithTemeplateAsync("manuel.strubegger@htl-saalfelden.at", "AAAA", "DailyNotification", templateParameters: new() { { "yesterday", "10" }, { "yearly", "100" }, { "link", "localhost:5565/yes" } }); - //logger.LogInformation("Done sending"); + logger.LogInformation("Sending Email"); + + string url = configuration.GetValue("Url") ?? "https://http.cat/images/404.jpg"; + + await emailService.SendWithTemeplateAsync("stone-red@stone-red.net", "Daily Notification", "DailyNotification", templateParameters: new() { { "yesterday", $"{energyPriceService.DailyEnergyCost:F2}" }, { "yearly", $"{energyPriceService.YearlyEnergyCost:F2}" }, { "link", url } }); + logger.LogInformation("Done sending"); } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs index c952d7f..975cd16 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/PrometheusQuery.cs @@ -1,31 +1,31 @@ -using System.Net; -using System.Net.Sockets; +using Elektrifikatsiya.Models; + +using System.Diagnostics; using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Serialization; -using Elektrifikatsiya.Models; -using FluentResults; namespace Elektrifikatsiya.Utilities; public class PrometheusQuery { - private readonly HttpClient client = new(); + private readonly HttpClient client = new(); - public PrometheusQuery(string connectionString) - { - client.BaseAddress = new Uri(connectionString); - } + public PrometheusQuery(string connectionString) + { + client.BaseAddress = new Uri(connectionString); + } - public Task Query(string query) - { - return client.GetFromJsonAsync($"/api/v1/query?query={UrlEncoder.Create().Encode(query)}", new JsonSerializerOptions() - { - PropertyNameCaseInsensitive = true, - Converters = - { - new JsonStringEnumConverter() - } - }); - } + public Task Query(string query) + { + Debug.WriteLine($"{client.BaseAddress}/api/v1/query?query={query}"); + return client.GetFromJsonAsync($"/api/v1/query?query={UrlEncoder.Create().Encode(query)}", new JsonSerializerOptions() + { + PropertyNameCaseInsensitive = true, + Converters = + { + new JsonStringEnumConverter() + } + }); + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json b/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json deleted file mode 100644 index 617c1e4..0000000 --- a/src/Elektrifikatsiya/Elektrifikatsiya/appsettings.Development.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "DetailedErrors": true, - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "EmailSettings": { - "User": "", - "Key": "", - "DefaultEmail": "SMTP_EMAIL_ADDRESS", - "Templates": { - "DailyNotification": "../assets/DailyNotif.html" - }, - "SmtpServer": "", - "SmtpPort": 0 - } -} From a36b4eafa75a994041349ec44b03c013a3e480d5 Mon Sep 17 00:00:00 2001 From: Friend2868 Date: Tue, 13 Jun 2023 21:22:13 +0200 Subject: [PATCH 77/85] UserSystemUpdate --- .../Elektrifikatsiya/Pages/Admin.razor | 98 +++++++++++-------- .../Elektrifikatsiya/Pages/Settings.razor | 4 +- .../Elektrifikatsiya/Program.cs | 2 +- .../Services/IAuthenticationService.cs | 18 ++-- .../Implementations/AuthenticationService.cs | 19 +++- 5 files changed, 88 insertions(+), 53 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor index a92d666..8aca516 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor @@ -3,8 +3,13 @@ @using Elektrifikatsiya.Models; @using System.Net @using Elektrifikatsiya.Services; +@using Elektrifikatsiya.Services.Implementations; +@using FluentResults; +@inject IDeviceManagmentService DeviceManagmentService +@inject IMessageService MessageService @inject IAuthenticationService AuthenthicationService; +@inject NavigationManager NavigationManager;
@@ -59,7 +64,7 @@ - - - - - - Add User - - - - - User Name - - - - User E-Mail - - - - User Password - - - - - - - - - + + + + + + + + + + + @context.Item.Name + + + + + Name: @context.Item.Name +
+ Rolle: @context.Item.Role +
+ E-Mail: @context.Item.Email +
+
+
+ + + + + + + + + Add User + + + + + User Name + + + + User E-Mail + + + + User Password + + + + + + + + + + +
+
+ + + + + + +
+
+
+
+ + + @if (SelectedUser is not null) + { + + } + +
+
- -
+ + + Bro no! this page is only for admins! 😠 + + @code { List users = new List(); diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor index b5149d5..db23e16 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor @@ -12,6 +12,7 @@ @inject IDeviceStatusService DeviceStatusService; @inject IDeviceManagmentService DeviceManagmentService; @inject IEventService EventService; +@inject IAuthenticationService AuthenticationService; @inject IEnergyPriceService EnergyPriceService; @inject MainDatabaseContext MainDatabaseContext; diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs index 91b8687..56abfce 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor.cs @@ -8,94 +8,94 @@ namespace Elektrifikatsiya.Pages; public partial class Dashboard { - private readonly List labels = new List(); + private readonly List labels = new List(); - //TODO: insert new event here if plug produces one - private List events = new List() { new Event("Text", "Text", DateTime.Today, null) }; + //TODO: insert new event here if plug produces one + private List events = new List() { new Event("Text", "Text", DateTime.Today, null) }; - //code for graph - private LineChart lineChart; + //code for graph + private LineChart lineChart; - //TODO: insert new Device here if user adds one - private List plugs = new List(); + //TODO: insert new Device here if user adds one + private List plugs = new List(); - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await HandleRedraw(); - } - } + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + await HandleRedraw(); + } + } - protected override void OnInitialized() - { - plugs = DeviceStatusService.GetDevices().ValueOrDefault ?? new List(); - events = EventService.Events; + protected override async Task OnInitializedAsync() + { + plugs = DeviceManagmentService.GetDevices((await AuthenticationService.GetUserAsync()).ValueOrDefault).ValueOrDefault ?? new List(); + events = EventService.Events; - EventService.OnEventCalled += (__, e) => - { - _ = InvokeAsync(StateHasChanged); - }; - DeviceStatusService.OnDeviceStatusChanged += (__, e) => - { - _ = InvokeAsync(StateHasChanged); - }; - } + EventService.OnEventCalled += (__, e) => + { + _ = InvokeAsync(StateHasChanged); + }; + DeviceStatusService.OnDeviceStatusChanged += (__, e) => + { + _ = InvokeAsync(StateHasChanged); + }; + } - private async Task> GetData() - { - if (plugs.Count == 0) - { - return new(); - } - PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); + private async Task> GetData() + { + if (plugs.Count == 0) + { + return new(); + } + PrometheusQuery promQueryer = new PrometheusQuery("http://localhost:9090"); - string plugnames = ""; - foreach (Device device in plugs) - { - plugnames += $"shellyplug-s-{device.MacAddress}/relay/0|"; - } - plugnames = plugnames[0..^1]; + string plugnames = ""; + foreach (Device device in plugs) + { + plugnames += $"shellyplug-s-{device.MacAddress}/relay/0|"; + } + plugnames = plugnames[0..^1]; - double energyPrice = MainDatabaseContext.EnergyPriceChanges.OrderByDescending(e => e.DateTime).FirstOrDefault()?.EnergyPrice ?? 0; + double energyPrice = MainDatabaseContext.EnergyPriceChanges.OrderByDescending(e => e.DateTime).FirstOrDefault()?.EnergyPrice ?? 0; - PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; - //PrometheusDataWrapper? priceData = (await promQueryer.Query($$"""sum(sum_over_time(power{sensor=~"{{plugnames}}"}[1y])*{{energyPrice}})"""))?.Data; + PrometheusDataWrapper? deviceData = (await promQueryer.Query($$"""sum(power{sensor=~"{{plugnames}}"})[1h:1m]"""))?.Data; + //PrometheusDataWrapper? priceData = (await promQueryer.Query($$"""sum(sum_over_time(power{sensor=~"{{plugnames}}"}[1y])*{{energyPrice}})"""))?.Data; - //Console.WriteLine(priceData.VectorTypeToTimestampFloatTuple()); + //Console.WriteLine(priceData.VectorTypeToTimestampFloatTuple()); - Random r = new Random(DateTime.Now.Millisecond); + Random r = new Random(DateTime.Now.Millisecond); - return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => - { - labels.Add(DateTimeOffset.FromUnixTimeSeconds(long.Parse($"1{x.Item1}0")).UtcDateTime.ToLocalTime().ToShortTimeString()); - return x.Item2; - }).ToList() ?? new List(); - } + return deviceData?.MatrixTypeToTimestampFloatTuple().ValueOrDefault?.Select(x => + { + labels.Add(DateTimeOffset.FromUnixTimeSeconds(long.Parse($"1{x.Item1}0")).UtcDateTime.ToLocalTime().ToShortTimeString()); + return x.Item2; + }).ToList() ?? new List(); + } - //TODO: insert dataset of current and last voltage usages - private async Task> GetLineChartDataset() - { - return new LineChartDataset - { - Label = "Wattage", - Data = await GetData(), - Fill = true, - PointRadius = 3, - CubicInterpolationMode = "monotone", - }; - } + //TODO: insert dataset of current and last voltage usages + private async Task> GetLineChartDataset() + { + return new LineChartDataset + { + Label = "Wattage", + Data = await GetData(), + Fill = true, + PointRadius = 3, + CubicInterpolationMode = "monotone", + }; + } - private async Task HandleRedraw() - { - labels.Clear(); - await lineChart.Clear(); - await lineChart.AddLabelsDatasetsAndUpdate(labels, await GetLineChartDataset()); - } + private async Task HandleRedraw() + { + labels.Clear(); + await lineChart.Clear(); + await lineChart.AddLabelsDatasetsAndUpdate(labels, await GetLineChartDataset()); + } - private async Task Switch(Device device) - { - device.Enabled = !device.Enabled; - _ = await DeviceManagmentService.UpdateDevice(device); - } + private async Task Switch(Device device) + { + device.Enabled = !device.Enabled; + _ = await DeviceManagmentService.UpdateDevice(device); + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor index 1274419..f6ae112 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Settings.razor @@ -10,6 +10,7 @@ @inject IDeviceManagmentService DeviceManagmentService @inject IMessageService MessageService +@inject IAuthenticationService AuthenticationService @inject MainDatabaseContext MainDatabaseContext
@@ -157,9 +158,9 @@ Device? SelectedDevice = null; Device? DeviceCopy = null; - protected override void OnInitialized() + protected override async Task OnInitializedAsync() { - Result> getDevicesResult = DeviceManagmentService.GetDevices(); + Result> getDevicesResult = DeviceManagmentService.GetDevices((await AuthenticationService.GetUserAsync()).ValueOrDefault); if (getDevicesResult.IsSuccess) { diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs index 764ee22..b372442 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/IDeviceManagmentService.cs @@ -8,17 +8,17 @@ namespace Elektrifikatsiya.Services; public interface IDeviceManagmentService { - public Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default"); + public Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default"); - public Task UnregisterDevice(string macAdress); + public Task UnregisterDevice(string macAdress); - public Result GetDevice(string macAdress); + public Result GetDevice(string macAdress); - public Result> GetDevices(); + public Result> GetDevices(User user); - public Result> GetDevicesInRoom(string room); + public Result> GetDevicesInRoom(string room); - public Result> GetDevicesOfUser(int userId); + public Result> GetDevicesOfUser(int userId); - public Task UpdateDevice(Device device); + public Task UpdateDevice(Device device); } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs index 57f2180..1bbc3c3 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs @@ -15,168 +15,168 @@ namespace Elektrifikatsiya.Services.Implementations; public class DeviceManagmentService : IDeviceManagmentService { - private readonly IServiceScopeFactory serviceScopeFactory; - private readonly IDeviceStatusService deviceStatusService; - private readonly ILogger logger; - private readonly IHiveMQClient hiveMQClient; - private readonly HttpClient httpClient; + private readonly IServiceScopeFactory serviceScopeFactory; + private readonly IDeviceStatusService deviceStatusService; + private readonly ILogger logger; + private readonly IHiveMQClient hiveMQClient; + private readonly HttpClient httpClient; - public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, ILogger logger, IHiveMQClient hiveMQClient, HttpClient httpClient) - { - this.serviceScopeFactory = serviceScopeFactory; - this.deviceStatusService = deviceStatusService; - this.logger = logger; - this.hiveMQClient = hiveMQClient; - this.httpClient = httpClient; - } + public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, ILogger logger, IHiveMQClient hiveMQClient, HttpClient httpClient) + { + this.serviceScopeFactory = serviceScopeFactory; + this.deviceStatusService = deviceStatusService; + this.logger = logger; + this.hiveMQClient = hiveMQClient; + this.httpClient = httpClient; + } - public Result GetDevice(string macAdress) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result GetDevice(string macAdress) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); + Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress); - if (device is null) - { - return Result.Fail("Device does not exist!"); - } + if (device is null) + { + return Result.Fail("Device does not exist!"); + } - return device; - } + return device; + } - public Result> GetDevices() - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevices(User user) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.ToList(); - } + return getDevicesResult.Value.Where(d => d.User.Id == user.Id || user.Role == Role.Admin).ToList(); + } - public Result> GetDevicesInRoom(string room) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevicesInRoom(string room) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.Where(d => d.Room == room).ToList(); - } + return getDevicesResult.Value.Where(d => d.Room == room).ToList(); + } - public Result> GetDevicesOfUser(int userId) - { - Result> getDevicesResult = deviceStatusService.GetDevices(); + public Result> GetDevicesOfUser(int userId) + { + Result> getDevicesResult = deviceStatusService.GetDevices(); - if (getDevicesResult.IsFailed) - { - return getDevicesResult.ToResult(); - } + if (getDevicesResult.IsFailed) + { + return getDevicesResult.ToResult(); + } - return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); - } + return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList(); + } - public async Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default") - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); + public async Task> RegisterDevice(IPAddress ip, User user, string? name = null, string room = "default") + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); - ShellyResponse? shellyResponse = null; + ShellyResponse? shellyResponse = null; - try - { - shellyResponse = await httpClient.GetFromJsonAsync($"http://{ip}/shelly"); - } - catch (Exception ex) - { - logger.LogError("HTTP request failed! {message}", ex.Message); - } + try + { + shellyResponse = await httpClient.GetFromJsonAsync($"http://{ip}/shelly"); + } + catch (Exception ex) + { + logger.LogError("HTTP request failed! {message}", ex.Message); + } - if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") - { - return Result.Fail("Device is not reachable or not a \"SHPLG-S\"!"); - } + if (shellyResponse is null || shellyResponse.Type != "SHPLG-S") + { + return Result.Fail("Device is not reachable or not a \"SHPLG-S\"!"); + } - string mac = shellyResponse.Mac; + string mac = shellyResponse.Mac; - if (!PhysicalAddress.TryParse(mac, out _)) - { - return Result.Fail("Invalid mac address!"); - } + if (!PhysicalAddress.TryParse(mac, out _)) + { + return Result.Fail("Invalid mac address!"); + } - Device device = new Device(mac, name ?? mac, ip, user, room); + Device device = new Device(mac, name ?? mac, ip, user, room); - mainDatabaseContext.Entry(user).State = EntityState.Unchanged; + mainDatabaseContext.Entry(user).State = EntityState.Unchanged; - _ = mainDatabaseContext.Add(device); - Result saveDatabaseChangesResult = await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); + _ = mainDatabaseContext.Add(device); + Result saveDatabaseChangesResult = await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); - if (saveDatabaseChangesResult.IsFailed) - { - return saveDatabaseChangesResult; - } + if (saveDatabaseChangesResult.IsFailed) + { + return saveDatabaseChangesResult; + } - return deviceStatusService.TrackDevice(device); - } + return deviceStatusService.TrackDevice(device); + } - public async Task UnregisterDevice(string macAdress) - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); + public async Task UnregisterDevice(string macAdress) + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); - Result getDeviceResult = GetDevice(macAdress); + Result getDeviceResult = GetDevice(macAdress); - if (getDeviceResult.IsFailed) - { - return getDeviceResult.ToResult(); - } + if (getDeviceResult.IsFailed) + { + return getDeviceResult.ToResult(); + } - Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); + Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress); - if (untrackDeviceResult.IsFailed) - { - return untrackDeviceResult; - } + if (untrackDeviceResult.IsFailed) + { + return untrackDeviceResult; + } - _ = mainDatabaseContext.Remove(getDeviceResult.Value); + _ = mainDatabaseContext.Remove(getDeviceResult.Value); - return await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); - } + return await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); + } - public async Task UpdateDevice(Device device) - { - using IServiceScope scope = serviceScopeFactory.CreateScope(); - MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); + public async Task UpdateDevice(Device device) + { + using IServiceScope scope = serviceScopeFactory.CreateScope(); + MainDatabaseContext mainDatabaseContext = scope.ServiceProvider.GetRequiredService(); - Result getDeviceResult = GetDevice(device.MacAddress); + Result getDeviceResult = GetDevice(device.MacAddress); - if (getDeviceResult.IsFailed) - { - return getDeviceResult.ToResult(); - } + if (getDeviceResult.IsFailed) + { + return getDeviceResult.ToResult(); + } - Result updateDeviceResult = deviceStatusService.UpdateDeviceStatus(device); + Result updateDeviceResult = deviceStatusService.UpdateDeviceStatus(device); - if (updateDeviceResult.IsFailed) - { - return updateDeviceResult; - } + if (updateDeviceResult.IsFailed) + { + return updateDeviceResult; + } - PublishResult res = await hiveMQClient.PublishAsync($"shellies/shellyplug-s-{device.MacAddress}/relay/0/command", device.Enabled ? "on" : "off"); + PublishResult res = await hiveMQClient.PublishAsync($"shellies/shellyplug-s-{device.MacAddress}/relay/0/command", device.Enabled ? "on" : "off"); - device.User = mainDatabaseContext.Users.First(u => u.Id == device.User.Id); + device.User = mainDatabaseContext.Users.First(u => u.Id == device.User.Id); - _ = mainDatabaseContext.Update(device); + _ = mainDatabaseContext.Update(device); - return await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); - } + return await Result.Try(Task () => mainDatabaseContext.SaveChangesAsync()); + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EventService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EventService.cs index 3fa5e9a..d886efb 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EventService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EventService.cs @@ -1,55 +1,53 @@ using Elektrifikatsiya.Models; -using FluentResults; + using System.Reflection; -namespace Elektrifikatsiya.Services.Implementations +namespace Elektrifikatsiya.Services.Implementations; + +public class EventService : IEventService { - public class EventService : IEventService + public event EventHandler? OnEventCalled; + + public List Events { get; } = new(); + + public EventService(IDeviceStatusService deviceStatusService, IDeviceManagmentService deviceManagmentService) { - private readonly ILogger logger; - public event EventHandler OnEventCalled; - public List Events { get; } = new(); + List deviceList = deviceStatusService.GetDevices().ValueOrDefault.Select(x => x.CopyDevice()).ToList(); - public EventService(ILogger logger, IDeviceStatusService deviceStatusService, IDeviceManagmentService deviceManagmentService) + deviceStatusService.OnDeviceStatusChanged += (_, e) => { - this.logger = logger; - List deviceList = deviceManagmentService.GetDevices().ValueOrDefault.Select(x=>x.CopyDevice()).ToList(); + bool newDevice = true; + Device currentDevice = deviceManagmentService.GetDevice(e.MacAddress).ValueOrDefault; - deviceStatusService.OnDeviceStatusChanged += (_, e) => + for (int i = 0; i < deviceList.Count; i++) { - bool newDevice = true; - Device currentDevice = deviceManagmentService.GetDevice(e.MacAddress).ValueOrDefault; - - for (int i = 0; i < deviceList.Count; i++) + if (deviceList[i].MacAddress == currentDevice.MacAddress) { - if (deviceList[i].MacAddress == currentDevice.MacAddress) + PropertyInfo[] properties = typeof(Device).GetProperties(); + + foreach (PropertyInfo property in properties) { - PropertyInfo[] properties = typeof(Device).GetProperties(); - - foreach(PropertyInfo property in properties) { - var currentvalue = property.GetValue(deviceList[i], null); - var newvalue = property.GetValue(currentDevice, null); - if(newvalue is not null && !newvalue.ToString().Equals(currentvalue.ToString())) - { - string eventName = $"Plug {deviceList[i].Name} changed: {property.Name}"; - string description = $"Changed {property.Name} of plug [{currentvalue}] to [{newvalue}]"; - DateTime dateTime = DateTime.Now; - - Event newEvent = new Event(eventName, description, dateTime, currentDevice); - Events.Insert(0,newEvent); - OnEventCalled?.Invoke(this, new EventServiceEventArgs(newEvent)); - } + object? currentvalue = property.GetValue(deviceList[i], null); + object? newvalue = property.GetValue(currentDevice, null); + if (newvalue is not null && !newvalue?.ToString()?.Equals(currentvalue?.ToString()) == true) + { + string eventName = $"Plug {deviceList[i].Name} changed: {property.Name}"; + string description = $"Changed {property.Name} of plug [{currentvalue}] to [{newvalue}]"; + DateTime dateTime = DateTime.Now; + Event newEvent = new Event(eventName, description, dateTime, currentDevice); + Events.Insert(0, newEvent); + OnEventCalled?.Invoke(this, new EventServiceEventArgs(newEvent)); } - deviceList[i].OverwiteDevice(currentDevice); - newDevice = false; break; } + deviceList[i].OverwiteDevice(currentDevice); + newDevice = false; break; } - if (newDevice) - { - deviceList.Add(deviceManagmentService.GetDevice(e.MacAddress).ValueOrDefault); - } - }; - } + } + if (newDevice) + { + deviceList.Add(deviceManagmentService.GetDevice(e.MacAddress).ValueOrDefault); + } + }; } -} +} \ No newline at end of file From 06e011cb830e059a4fba3f14fa2da3a2f693a4ad Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Tue, 13 Jun 2023 22:50:04 +0200 Subject: [PATCH 81/85] Fix warning --- .../Utilities/EmailSettings.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/EmailSettings.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/EmailSettings.cs index 4e53927..46f1575 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/EmailSettings.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Utilities/EmailSettings.cs @@ -4,20 +4,20 @@ namespace Elektrifikatsiya.Utilities; public class EmailSettings { - public string User { get; set; } - public string DefaultEmail { get; set; } - public string Key { get; set; } - public Dictionary Templates { get; set; } - public string SmtpServer { get; set; } - public int SmtpPort { get; set; } + public string User { get; set; } + public string DefaultEmail { get; set; } + public string Key { get; set; } + public Dictionary Templates { get; set; } + public string SmtpServer { get; set; } + public int SmtpPort { get; set; } - public Dictionary> CompiledTemplates = new(); - - public void CompileTemplates() - { - foreach ((string templateName, string templatePath) in Templates) - { - CompiledTemplates.Add(templateName, Handlebars.Compile(File.ReadAllText(templatePath))); - } + public Dictionary> CompiledTemplates { get; } = new(); + + public void CompileTemplates() + { + foreach ((string templateName, string templatePath) in Templates) + { + CompiledTemplates.Add(templateName, Handlebars.Compile(File.ReadAllText(templatePath))); + } } } \ No newline at end of file From 3cf17138b9407dede0dcabb293fe576503262413 Mon Sep 17 00:00:00 2001 From: Friend2868 Date: Tue, 13 Jun 2023 23:40:21 +0200 Subject: [PATCH 82/85] Adminpage --- .../Elektrifikatsiya/Models/User.cs | 9 +- .../Elektrifikatsiya/Pages/Admin.razor | 172 ++++++++++++++---- 2 files changed, 140 insertions(+), 41 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs index 0dbc315..845600e 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/User.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Net.Mail; namespace Elektrifikatsiya.Models; @@ -10,7 +11,7 @@ public class User [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Key] - public int Id { get; private set; } + public int Id { get; set; } public DateTime LastLoginDate { get; set; } @@ -18,7 +19,7 @@ public class User public string Name { get; set; } [Required] - public string PasswordHash { get; private set; } + public string PasswordHash { get; set; } [Required] public string Email { get; set; } @@ -36,4 +37,8 @@ public class User Email = email; Role = role; } + public User CopyUser() + { + return new User(Name, PasswordHash, Email, Role) { Id = Id }; + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor index 05dc402..ea5aea6 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor @@ -1,15 +1,18 @@ @page "/Admin" @using Blazorise.Components; @using Elektrifikatsiya.Models; +@using Elektrifikatsiya.Database; @using System.Net @using Elektrifikatsiya.Services; @using Elektrifikatsiya.Services.Implementations; @using FluentResults; +@using BC = BCrypt.Net.BCrypt; @inject IDeviceManagmentService DeviceManagmentService @inject IMessageService MessageService @inject IAuthenticationService AuthenthicationService; @inject NavigationManager NavigationManager; +@inject MainDatabaseContext MainDatabaseContext;
@@ -95,7 +98,7 @@ - + @@ -126,44 +129,49 @@ - - -
- User Name -
- - Here you can change the name of the User - -
- -
+ + + +
+ User Name +
+ + Here you can change the name of the User + +
+ +
+


- - -
- E-Mail -
- - Here you can change the E-Mail of a User - -
- -
+ + + +
+ E-Mail +
+ + Here you can change the E-Mail of a User + +
+ +
+

- - -
- Password -
- - Here you can change the password of a User - -
- -
- -
+
+ + + +
+ Password +
+ + Here you can change the password of a User + +
+ +
+


@@ -179,14 +187,14 @@ Roles - Admin + Admin - User + User - +
} @@ -199,6 +207,7 @@ List users = new List(); User? SelectedUser = null; + User? UserCopy = null; bool hideButtonSettings = true; bool newpage = true; @@ -207,6 +216,12 @@ private TextEdit? modalAddUserName; private TextEdit? modalAddUserEmail; private TextEdit? modalAddUserPW; + private TextEdit? updateName; + private TextEdit? updateEmail; + private TextEdit? updatePW; + bool admin = false; + + Validation? updateValidation; protected override async void OnInitialized() { @@ -232,6 +247,7 @@ } } SelectedUser = user; + UserCopy = user.CopyUser(); newpage = false; } @@ -271,6 +287,31 @@ StateHasChanged(); } + private async Task OnSave() + { + if (UserCopy is not null && SelectedUser is not null) + { + MainDatabaseContext.ChangeTracker.Clear(); + + UserCopy.Name = updateName.Text.ToString(); + UserCopy.Email = updateEmail.Text.ToString(); + UserCopy.PasswordHash = BC.HashPassword(updatePW.Text.ToString()); + if (admin) + { + UserCopy.Role = Role.Admin; + } + else + { + UserCopy.Role = Role.User; + } + + MainDatabaseContext.Update(UserCopy); + + await Result.Try(Task () => MainDatabaseContext.SaveChangesAsync()); + await MessageService.Success("User updated!"); + } + } + private async Task Delete(User contextItem) { bool succ = await MessageService.Confirm($"Do you really want to delete the User \"{contextItem.Name}\"?"); @@ -284,4 +325,57 @@ NavigationManager.NavigateTo(NavigationManager.Uri, true); } + private void SetRoleAdmin() + { + admin = true; + } + private void SetRoleUser() + { + admin = false; + } + public void ValidateName(ValidatorEventArgs e) + { + string? input = Convert.ToString(e.Value); + + if (string.IsNullOrWhiteSpace(input)) + { + e.Status = ValidationStatus.None; + return; + } + else + { + e.Status = ValidationStatus.Success; + return; + } + } + public void ValidateEmail(ValidatorEventArgs e) + { + string? input = Convert.ToString(e.Value); + + if (string.IsNullOrWhiteSpace(input)) + { + e.Status = ValidationStatus.None; + return; + } + else + { + e.Status = ValidationStatus.Success; + return; + } + } + public void ValidatePW(ValidatorEventArgs e) + { + string? input = Convert.ToString(e.Value); + + if (string.IsNullOrWhiteSpace(input)) + { + e.Status = ValidationStatus.None; + return; + } + else + { + e.Status = ValidationStatus.Success; + return; + } + } } From 9f99c4f72cdcf81fc4bb21f95948932251874bf3 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Wed, 14 Jun 2023 00:06:23 +0200 Subject: [PATCH 83/85] =?UTF-8?q?Fix=20some=20stuff=20(=E2=9D=81=C2=B4?= =?UTF-8?q?=E2=97=A1`=E2=9D=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Layouts/LoginLayout.razor | 46 +- .../Elektrifikatsiya/Pages/Admin.razor | 418 ++++++++---------- 2 files changed, 213 insertions(+), 251 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor index 0055775..0cfd389 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Layouts/LoginLayout.razor @@ -6,37 +6,37 @@ @inherits LayoutComponentBase - - - - - + + + + + - + @code { - private string username = string.Empty; + private string username = string.Empty; private string password = string.Empty; private Color color = Color.Primary; private bool disabled; - private async Task Clicked() - { - color = Color.Primary; - disabled = true; - - Result loginResult = await AuthenticationService.LoginUserAsync(username, password); + private async Task Clicked() + { + color = Color.Primary; + disabled = true; - if (loginResult.IsSuccess) - { - NavigationManager.NavigateTo("/", true); - } - else - { - color = Color.Danger; - disabled = false; - } - } + Result loginResult = await AuthenticationService.LoginUserAsync(username, password); + + if (loginResult.IsSuccess) + { + NavigationManager.NavigateTo("/", true); + } + else + { + color = Color.Danger; + disabled = false; + } + } } \ No newline at end of file diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor index 001e646..9209005 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Admin.razor @@ -14,196 +14,203 @@ @inject IAuthenticationService AuthenthicationService; @inject NavigationManager NavigationManager; @inject MainDatabaseContext MainDatabaseContext; -
- -
- - - - - Users - - - - - - - - - - - - - - - - - - - @context.Item.Name - - - - - Name: @context.Item.Name -
- Rolle: @context.Item.Role -
- E-Mail: @context.Item.Email -
-
+ + +
+ + +
+ + + + + Users - - - - - - - - - Add User - - - - - User Name - - - - User E-Mail - - - - User Password - - - - - - - - - + + + + + + + + + + + + + + + @context.Item.Name + + + + + Name: @context.Item.Name +
+ Rolle: @context.Item.Role +
+ E-Mail: @context.Item.Email +
+
+
+ + + + + + + + + Add User + + + + + User Name + + + + User E-Mail + + + + User Password + + + + + + + + + + +
+
+ + + + + + +
+
+
+
+
+ + @if (SelectedUser is not null) + { + + } + +
+
-
-
- + + + Bro no! this page is only for admins! 😠 + + @code { List users = new List(); @@ -334,49 +341,4 @@ { admin = false; } - public void ValidateName(ValidatorEventArgs e) - { - string? input = Convert.ToString(e.Value); - - if (string.IsNullOrWhiteSpace(input)) - { - e.Status = ValidationStatus.None; - return; - } - else - { - e.Status = ValidationStatus.Success; - return; - } - } - public void ValidateEmail(ValidatorEventArgs e) - { - string? input = Convert.ToString(e.Value); - - if (string.IsNullOrWhiteSpace(input)) - { - e.Status = ValidationStatus.None; - return; - } - else - { - e.Status = ValidationStatus.Success; - return; - } - } - public void ValidatePW(ValidatorEventArgs e) - { - string? input = Convert.ToString(e.Value); - - if (string.IsNullOrWhiteSpace(input)) - { - e.Status = ValidationStatus.None; - return; - } - else - { - e.Status = ValidationStatus.Success; - return; - } - } } From 672236fd7f0fc9ffa1db0d6526384b04e72d5b26 Mon Sep 17 00:00:00 2001 From: Aldin296 <99395958+Aldin296@users.noreply.github.com> Date: Wed, 14 Jun 2023 01:24:54 +0200 Subject: [PATCH 84/85] Hotfix error check david --- .../Services/Implementations/EnergyPriceService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EnergyPriceService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EnergyPriceService.cs index 5a07c66..a893135 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EnergyPriceService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/EnergyPriceService.cs @@ -41,7 +41,7 @@ public class EnergyPriceService : IEnergyPriceService plugnames += $"shellyplug-s-{device.MacAddress}/relay/0|"; } - if(plugnames.Length <= 0) + if(plugnames.Length <= 0 || changes.Count <= 0) { return 0; } From ecf70c4b93c60dd69564d04a3c574b6087ac1122 Mon Sep 17 00:00:00 2001 From: Stefan <32109571+Stefan-5422@users.noreply.github.com> Date: Wed, 14 Jun 2023 08:51:23 +0200 Subject: [PATCH 85/85] Last minute fix fix --- .../Implementations/NotifcationService.cs | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs index b8ddd0c..42f5a78 100644 --- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs +++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/NotifcationService.cs @@ -1,29 +1,39 @@ -namespace Elektrifikatsiya.Services.Implementations; +using Elektrifikatsiya.Database; +using Elektrifikatsiya.Models; + +namespace Elektrifikatsiya.Services.Implementations; public class NotifcationService : INotificationService { - private readonly IEmailService emailService; - private readonly IEnergyPriceService energyPriceService; - private readonly Microsoft.Extensions.Configuration.IConfiguration configuration; - private readonly ILogger logger; - public TimeSpan ExecutionRepeatDelay => TimeSpan.FromDays(1); - public DateTime FirstExecutionTime => DateTime.Now.AddDays(0); + public TimeSpan ExecutionRepeatDelay => TimeSpan.FromDays(1); + public DateTime FirstExecutionTime => DateTime.Now.AddDays(0); + private readonly Microsoft.Extensions.Configuration.IConfiguration configuration; + private readonly IEmailService emailService; + private readonly IEnergyPriceService energyPriceService; + private readonly ILogger logger; + private readonly MainDatabaseContext mainDatabaseContext; - public NotifcationService(ILogger logger, IEmailService emailService, IEnergyPriceService energyPriceService, Microsoft.Extensions.Configuration.IConfiguration configuration) - { - this.logger = logger; - this.emailService = emailService; - this.energyPriceService = energyPriceService; - this.configuration = configuration; - } + public NotifcationService(ILogger logger, IEmailService emailService, IEnergyPriceService energyPriceService, Microsoft.Extensions.Configuration.IConfiguration configuration, IServiceScopeFactory serviceScopeFactory) + { + this.logger = logger; + this.emailService = emailService; + this.energyPriceService = energyPriceService; + this.configuration = configuration; - public async void Update() - { - logger.LogInformation("Sending Email"); + mainDatabaseContext = serviceScopeFactory.CreateScope().ServiceProvider.GetRequiredService(); + } - string url = configuration.GetValue("Url") ?? "https://http.cat/images/404.jpg"; + public async void Update() + { + logger.LogInformation("Sending Email"); - await emailService.SendWithTemeplateAsync("stone-red@stone-red.net", "Daily Notification", "DailyNotification", templateParameters: new() { { "yesterday", $"{energyPriceService.DailyEnergyCost:F2}" }, { "yearly", $"{energyPriceService.YearlyEnergyCost:F2}" }, { "link", url } }); - logger.LogInformation("Done sending"); - } + string url = configuration.GetValue("Url") ?? "https://http.cat/images/404.jpg"; + + await foreach (User user in mainDatabaseContext.Users) + { + await emailService.SendWithTemeplateAsync(user.Email, "Daily Notification", "DailyNotification", templateParameters: new() { { "yesterday", $"{energyPriceService.DailyEnergyCost:F2}" }, { "yearly", $"{energyPriceService.YearlyEnergyCost:F2}" }, { "link", url } }); + } + + logger.LogInformation("Done sending"); + } } \ No newline at end of file