Compare commits

...

5 Commits
main ... main

Author SHA1 Message Date
Michael Kinder
4d7aab6541
rocky-fy the theme 2024-08-30 16:55:50 -04:00
ee63b48d87
fix: admin template rebase failure 2024-08-30 15:46:08 -04:00
870ad461ef
fix: need flask_session 2024-08-30 15:40:10 -04:00
90be375161
fix: selinux 2024-08-30 15:35:47 -04:00
e009155a72
fix: use rocky group, cleanup 2024-08-30 15:34:13 -04:00
10 changed files with 11745 additions and 307137 deletions

View File

@ -24,8 +24,11 @@ RUN mkdir -p /opt/mirrormanager2
WORKDIR /opt/mirrormanager2 WORKDIR /opt/mirrormanager2
RUN git clone https://github.com/fedora-infra/mirrormanager2.git . RUN git clone https://github.com/fedora-infra/mirrormanager2.git .
RUN sed -e 's/signed_fpca/signed_rosca/' -i mirrormanager2/perms.py mirrormanager2/auth.py
RUN pip install --prefix=/install . RUN pip install --prefix=/install .
RUN pip install --prefix=/install flask_session
# Stage 2: Final stage with runtime dependencies # Stage 2: Final stage with runtime dependencies
FROM quay.io/fedora/python-312:latest AS runtime FROM quay.io/fedora/python-312:latest AS runtime
LABEL \ LABEL \

View File

@ -44,13 +44,22 @@ THEME_FOLDER = os.environ.get('MM2_THEME_FOLDER', 'fedora')
#MM_AUTHENTICATION = "fas" #MM_AUTHENTICATION = "fas"
OIDC_CLIENT_SECRETS = "/etc/mirrormanager/client_secrets.json" OIDC_CLIENT_SECRETS = "/etc/mirrormanager/client_secrets.json"
OIDC_SCOPES = " ".join(
[
"openid",
"email",
"profile",
"https://id.fedoraproject.org/scope/groups",
"https://id.fedoraproject.org/scope/agreements",
]
)
# If the authentication method is `fas`, groups in which should be the user # If the authentication method is `fas`, groups in which should be the user
# to be recognized as an admin. # to be recognized as an admin.
#ADMIN_GROUP = ["sysadmin-main"] ADMIN_GROUP = ["infrastructure"]
# Email of the admin to which send notification or error # Email of the admin to which send notification or error
ADMIN_EMAIL = "admin@fedoraproject.org" ADMIN_EMAIL = "infrastructure@rockylinux.org"
# Email address used in the "From" field of the emails sent. # Email address used in the "From" field of the emails sent.
# Default: ``nobody@fedoraproject.org``. # Default: ``nobody@fedoraproject.org``.

8
run.py
View File

@ -1,5 +1,13 @@
from werkzeug.middleware.proxy_fix import ProxyFix from werkzeug.middleware.proxy_fix import ProxyFix
from mirrormanager2.app import create_app from mirrormanager2.app import create_app
from flask_session import Session
from cachelib.file import FileSystemCache
import os
application = create_app() application = create_app()
application.debug = os.environ.get("MM2_DEBUG", False)
application.config['SESSION_TYPE'] = "cachelib"
application.config['SESSION_CACHELIB'] = FileSystemCache(cache_dir='/tmp/sessions', threshold=500)
Session(application)
application.wsgi_app = ProxyFix(application.wsgi_app, x_proto=1, x_host=1) application.wsgi_app = ProxyFix(application.wsgi_app, x_proto=1, x_host=1)

19
start-dev.sh Normal file → Executable file
View File

@ -2,13 +2,6 @@ POD=mirrormanager2
podman pod exists $POD || podman pod create -p 5000:5000 -n $POD podman pod exists $POD || podman pod create -p 5000:5000 -n $POD
#podman run \
# --pod $POD \
# --name nginx \
# --replace \
# -v $PWD/nginx.conf:/etc/nginx/conf.d/default.conf:ro \
# -d docker.io/library/nginx:1.13-alpine
test -d tmp || mkdir tmp test -d tmp || mkdir tmp
test -f client_secrets.json || (echo "missing client_secrets" && exit 2) test -f client_secrets.json || (echo "missing client_secrets" && exit 2)
@ -22,11 +15,13 @@ podman run \
-e "MM2_SECRET_KEY=$(openssl rand -hex 32)" \ -e "MM2_SECRET_KEY=$(openssl rand -hex 32)" \
-e "MM2_PASSWORD_SEED=$(openssl rand -hex 32)" \ -e "MM2_PASSWORD_SEED=$(openssl rand -hex 32)" \
-e 'MM2_THEME_FOLDER=rocky' \ -e 'MM2_THEME_FOLDER=rocky' \
-v $PWD/mirrormanager2.cfg:/etc/mirrormanager/mirrormanager2.cfg \ -e 'FLASK_DEBUG=1' \
-v $PWD/client_secrets.json:/etc/mirrormanager/client_secrets.json \ -e 'MM2_DEBUG=1' \
-v $PWD/tmp:/var/tmp:rw \ -v $PWD/mirrormanager2.cfg:/etc/mirrormanager/mirrormanager2.cfg:z,ro \
-v $PWD/static:/usr/lib/python3.12/site-packages/mirrormanager2/static \ -v $PWD/client_secrets.json:/etc/mirrormanager/client_secrets.json:z,ro \
-v $PWD/templates:/usr/lib/python3.12/site-packages/mirrormanager2/templates \ -v $PWD/tmp:/var/tmp:z,rw \
-v $PWD/static:/usr/lib/python3.12/site-packages/mirrormanager2/static:z,ro \
-v $PWD/templates:/usr/lib/python3.12/site-packages/mirrormanager2/templates:z,ro \
-d git.resf.org/infrastructure/mirrormanager2:dev -d git.resf.org/infrastructure/mirrormanager2:dev
# Setup sqlite database # Setup sqlite database

View File

@ -31,7 +31,9 @@ form.icon button {
} }
/* Stealed this from bootstrap */ /* Stealed this from bootstrap */
label, select, button, label,
select,
button,
input[type="button"], input[type="button"],
input[type="reset"], input[type="reset"],
input[type="submit"], input[type="submit"],
@ -41,31 +43,33 @@ input[type="checkbox"] {
} }
.blue { .blue {
color:#0066CC; color: #0066cc;
} }
#matrixtitle { #matrixtitle {
background-color: #2963A6; background-color: #2963a6;
color: #FFFFFF; color: #ffffff;
text-align: center; text-align: center;
} }
#matrixheadings, #matrixheadings th { #matrixheadings,
background-color: #DDDDDD; #matrixheadings th {
border-bottom: 1px solid #BBBBBB; background-color: #dddddd;
border-bottom: 1px solid #bbbbbb;
margin: 0; margin: 0;
color: #333333; color: #333333;
text-align: center;
} }
.matrix_section, .matrix_section td { .matrix_section,
border-bottom: 1px solid #BBBBBB !important; .matrix_section td {
border-bottom: 1px solid #bbbbbb !important;
} }
.matrix_even, .matrix_even td { .matrix_even,
background-color: #F0F0F0; .matrix_even td {
border-bottom: 1px solid #DDDDDD; background-color: #f0f0f0;
border-top: 1px solid #DDDDDD; border-bottom: 1px solid #dddddd;
border-top: 1px solid #dddddd;
} }
.centered { .centered {
@ -76,10 +80,9 @@ input[type="checkbox"] {
} }
.bodycontent { .bodycontent {
min-height:600px min-height: 600px;
} }
table.mm2-table-small { table.mm2-table-small {
width: auto; width: auto;
} }

File diff suppressed because it is too large Load Diff

View File

@ -30,9 +30,9 @@
{% endmacro %} {% endmacro %}
{% macro footer() %} {% macro footer() %}
<div class="footer py-5 text-white"> <div class="footer py-5">
<div class="container"> <div class="container">
<div class="row footerlinks justify-content-center"> <div class="row footerlinks">
<div class="col-sm-3 col-4 mt-3"> <div class="col-sm-3 col-4 mt-3">
<div> <div>
<dl> <dl>
@ -67,17 +67,16 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row footerlinks"> <div class="row footerlinks mt-5">
<div class="col-12 text-center"> <div class="col-12">
<p> © 2024 Rocky Enterprise Software Foundation, and others. </p> <p> © 2024 Rocky Enterprise Software Foundation, and others. </p>
</div> </div>
<div class="col-12 text-center"> <div class="col-12">
{% set noggin_link %} {% set noggin_link %}
<a href="https://github.com/fedora-infra/noggin">noggin</a> <a href="https://github.com/fedora-infra/noggin">noggin</a>
{% endset %} {% endset %}
<p> <p>
<a href="https://github.com/fedora-infra/mirrormanager2/">mirrormanager</a> <a href="https://github.com/fedora-infra/mirrormanager2/">mirrormanager</a>
-- {{version}}
-- <a href="http://mirrormanager.rtfd.org" rel="noopener noreferrer" -- <a href="http://mirrormanager.rtfd.org" rel="noopener noreferrer"
target="_blank">Documentation</a> target="_blank">Documentation</a>
-- <a href="http://mirrormanager.readthedocs.org/en/latest/contributors.html">Authors</a></p> -- <a href="http://mirrormanager.readthedocs.org/en/latest/contributors.html">Authors</a></p>
@ -108,7 +107,6 @@ href="{{ url_for('static', filename='favicon.ico')}}"/>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"
href="{{ url_for('static', filename='mirrormanager2.css') }}"/> href="{{ url_for('static', filename='mirrormanager2.css') }}"/>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='rocky.css') }}"/> <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='rocky.css') }}"/>
<link href="{{ url_for('static', filename='fedora-bootstrap/fedora-bootstrap.min.css') }}" rel="stylesheet" />
<link href="{{ url_for('static', filename='fonts/open-sans.css') }}" rel="stylesheet" /> <link href="{{ url_for('static', filename='fonts/open-sans.css') }}" rel="stylesheet" />
<link href="{{ url_for('static', filename='fonts/font-awesome.css') }}" rel="stylesheet" /> <link href="{{ url_for('static', filename='fonts/font-awesome.css') }}" rel="stylesheet" />
{% endmacro %} {% endmacro %}
@ -124,8 +122,8 @@ href="{{ url_for('static', filename='mirrormanager2.css') }}"/>
{%endmacro%} {%endmacro%}
{% macro nav(is_admin) %} {% macro nav(is_admin) %}
<nav class="navbar navbar-expand-lg navbar-light masthead py-2"> <nav class="navbar navbar-expand-lg navbar-light masthead py-2 container">
<a class="navbar-brand" href="{{url_for('base.index')}}"><img src="{{ url_for('static', filename='mirrormanager-logo.png') }}" alt="Fedora Account System logo" height="40"></a> <a class="navbar-brand" href="{{url_for('base.index')}}"><img src="{{ url_for('static', filename='mirrormanager-logo.png') }}" alt="Fedora Account System logo" height="60"></a>
<ul class="navbar-nav align-items-center ms-auto"> <ul class="navbar-nav align-items-center ms-auto">
<li class="nav-item"> <li class="nav-item">
<a class="nav-link color-white" href="{{url_for('base.list_mirrors')}}">Mirrors</a> <a class="nav-link color-white" href="{{url_for('base.list_mirrors')}}">Mirrors</a>
@ -160,7 +158,7 @@ href="{{ url_for('static', filename='mirrormanager2.css') }}"/>
</div> </div>
</li> </li>
{% else %} {% else %}
<a class="btn btn-primary ml-2" href="{{ url_for('auth.login') }}?next={{request.url}}">Login</a> <a class="btn btn-primary ml-2 py-2 rounded-4" href="{{ url_for('auth.login') }}?next={{request.url}}">Login</a>
{% endif %} {% endif %}
</ul> </ul>
</nav> </nav>

View File

@ -1,6 +1,6 @@
{% extends 'admin/admin_master.html' %} {% extends 'admin/master.html' %}
{% block content %} {% block body %}
<p> <p>
These pages present the admin interface of MirrorManager. These pages present the admin interface of MirrorManager.
</p> </p>

View File

@ -4,7 +4,7 @@
{%block tag %}home{% endblock %} {%block tag %}home{% endblock %}
{% block content %} {% block content %}
<h2>Rocky Public Active Mirrors</h2> <h2 class="h1 mb-4">Rocky Public Active Mirrors</h2>
<p> <p>
Rocky Linux is distributed to millions of systems globally. Rocky Linux is distributed to millions of systems globally.
@ -34,14 +34,8 @@ I2 means both Internet2 and its peer high speed research and development
networks globally. networks globally.
</p> </p>
<table class="table table-sm mt-5">
<table class="table table-sm"> <tr id="matrixheadings">
<tr id="matrixtitle">
<th colspan="{{ arches | length + 2 }}">
Mirror list filtering matrix
</th>
</tr>
<tr id="matrixheadings" >
<th>Projects</th> <th>Projects</th>
<th>Versions</th> <th>Versions</th>
<th colspan="{{ arches | length}}"> <th colspan="{{ arches | length}}">

View File

@ -17,7 +17,7 @@ main {
/* Prose */ /* Prose */
.prose code, .prose code,
.prose strong { .prose strong {
@apply dark:text-gray-300; @apply dark:text-gray-300;
} }
.prose h1, .prose h1,
.prose h2, .prose h2,
@ -25,23 +25,36 @@ main {
.prose h4, .prose h4,
.prose h5, .prose h5,
.prose h6 { .prose h6 {
@apply dark:text-white; @apply dark:text-white;
} }
.prose a { .prose a {
@apply text-green-600; @apply text-green-600;
} }
.prose blockquote { .prose blockquote {
@apply dark:text-white; @apply dark:text-white;
} }
.prose img { .prose img {
@apply rounded-md; @apply rounded-md;
} }
[type='text'], [type='email'], [type='url'], [type='password'], [type='number'], [type='date'], [type='datetime-local'], [type='month'], [type='search'], [type='tel'], [type='time'], [type='week'], [multiple], textarea, select { [type="text"],
@apply [type="email"],
rounded-md bg-gray-100 dark:bg-gray-700 [type="url"],
[type="password"],
[type="number"],
[type="date"],
[type="datetime-local"],
[type="month"],
[type="search"],
[type="tel"],
[type="time"],
[type="week"],
[multiple],
textarea,
select {
@apply rounded-md bg-gray-100 dark:bg-gray-700
dark:border-gray-600 border-gray-300 border-2 dark:border-gray-600 border-gray-300 border-2
py-2 px-3 py-2 px-3
focus:outline-none focus:ring focus:ring-2 focus:border-green-600 focus:ring-green-500 focus:outline-none focus:ring focus:ring-2 focus:border-green-600 focus:ring-green-500
@ -49,15 +62,15 @@ main {
} }
.form-group label { .form-group label {
@apply text-sm font-medium mb-2; @apply text-sm font-medium mb-2;
} }
.form-group .check-box input { .form-group .check-box input {
@apply rounded-md bg-gray-100 dark:bg-gray-700 @apply rounded-md bg-gray-100 dark:bg-gray-700
dark:border-gray-600 border-gray-300 border-2 dark:border-gray-600 border-gray-300 border-2
p-1 checked:bg-green-600 checked:border-transparent p-1 checked:bg-green-600 checked:border-transparent
focus:outline-none focus:ring focus:ring-1 focus:border-green-600 focus:ring-green-500 focus:outline-none focus:ring focus:ring-1 focus:border-green-600 focus:ring-green-500
transition duration-300 ease-in-out; transition duration-300 ease-in-out;
} }
.form-group .check-box label { .form-group .check-box label {
@apply mb-0 ml-2; @apply mb-0 ml-2;
} }