mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-14 07:42:18 -06:00
Compare commits
1 Commits
21050-devi
...
21097-grap
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a54ad24b47 |
16
.github/ISSUE_TEMPLATE/06-deprecation.yaml
vendored
16
.github/ISSUE_TEMPLATE/06-deprecation.yaml
vendored
@@ -1,26 +1,20 @@
|
||||
---
|
||||
name: ⚠️ Deprecation
|
||||
name: 🗑️ Deprecation
|
||||
type: Deprecation
|
||||
description: Designation of a feature or behavior that will be removed in a future release
|
||||
description: The removal of an existing feature or resource
|
||||
labels: ["netbox", "type: deprecation"]
|
||||
body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Deprecated Functionality
|
||||
label: Proposed Changes
|
||||
description: >
|
||||
Describe the feature(s) and/or behavior that is being flagged for deprecation.
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Scheduled removal
|
||||
description: In what future release will the deprecated functionality be removed?
|
||||
Describe in detail the proposed changes. What is being removed?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Justification
|
||||
description: Please provide justification for the deprecation.
|
||||
description: Please provide justification for the proposed change(s).
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
|
||||
20
.github/ISSUE_TEMPLATE/07-feature_removal.yaml
vendored
20
.github/ISSUE_TEMPLATE/07-feature_removal.yaml
vendored
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: 🗑️ Feature Removal
|
||||
type: Removal
|
||||
description: The removal of a deprecated feature or resource
|
||||
labels: ["netbox", "type: removal"]
|
||||
body:
|
||||
- type: input
|
||||
attributes:
|
||||
label: Deprecation Issue
|
||||
description: Specify the issue in which this deprecation was announced.
|
||||
placeholder: "#1234"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Summary of Changes
|
||||
description: >
|
||||
List all changes necessary to remove the deprecated feature or resource.
|
||||
validations:
|
||||
required: true
|
||||
@@ -372,8 +372,8 @@ class IPAddressForm(TenancyForm, PrimaryModelForm):
|
||||
'virtual_machine_id': instance.assigned_object.virtual_machine.pk,
|
||||
})
|
||||
|
||||
# Disable object assignment fields if the IP address is designated as primary or OOB
|
||||
if self.initial.get('primary_for_parent') or self.initial.get('oob_for_parent'):
|
||||
# Disable object assignment fields if the IP address is designated as primary
|
||||
if self.initial.get('primary_for_parent'):
|
||||
self.fields['interface'].disabled = True
|
||||
self.fields['vminterface'].disabled = True
|
||||
self.fields['fhrpgroup'].disabled = True
|
||||
|
||||
@@ -940,13 +940,6 @@ class IPAddress(ContactsMixin, PrimaryModel):
|
||||
_("Cannot reassign IP address while it is designated as the primary IP for the parent object")
|
||||
)
|
||||
|
||||
# can't use is_oob_ip as self.assigned_object might be changed
|
||||
if hasattr(original_parent, 'oob_ip') and original_parent.oob_ip_id == self.pk:
|
||||
if parent != original_parent:
|
||||
raise ValidationError(
|
||||
_("Cannot reassign IP address while it is designated as the OOB IP for the parent object")
|
||||
)
|
||||
|
||||
# Validate IP status selection
|
||||
if self.status == IPAddressStatusChoices.STATUS_SLAAC and self.family != 6:
|
||||
raise ValidationError({
|
||||
|
||||
@@ -3,7 +3,7 @@ from typing import TYPE_CHECKING
|
||||
|
||||
import strawberry_django
|
||||
from strawberry import ID
|
||||
from strawberry_django import FilterLookup
|
||||
from strawberry_django import ComparisonFilterLookup, FilterLookup
|
||||
|
||||
from core.graphql.filter_mixins import ChangeLoggingMixin
|
||||
from extras.graphql.filter_mixins import CustomFieldsFilterMixin, JournalEntriesFilterMixin, TagsFilterMixin
|
||||
@@ -23,7 +23,7 @@ __all__ = (
|
||||
|
||||
@dataclass
|
||||
class BaseModelFilter:
|
||||
id: FilterLookup[ID] | None = strawberry_django.filter_field()
|
||||
id: ComparisonFilterLookup[ID] | None = strawberry_django.filter_field()
|
||||
|
||||
|
||||
class ChangeLoggedModelFilter(ChangeLoggingMixin, BaseModelFilter):
|
||||
|
||||
@@ -232,7 +232,7 @@ VPN_MENU = Menu(
|
||||
label=_('L2VPNs'),
|
||||
items=(
|
||||
get_model_item('vpn', 'l2vpn', _('L2VPNs')),
|
||||
get_model_item('vpn', 'l2vpntermination', _('L2VPN Terminations')),
|
||||
get_model_item('vpn', 'l2vpntermination', _('Terminations')),
|
||||
),
|
||||
),
|
||||
MenuGroup(
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-13 05:05+0000\n"
|
||||
"POT-Creation-Date: 2026-01-08 05:04+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -1822,6 +1822,7 @@ msgid "ASN Count"
|
||||
msgstr ""
|
||||
|
||||
#: netbox/circuits/tables/virtual_circuits.py:64
|
||||
#: netbox/netbox/navigation/menu.py:235
|
||||
#: netbox/templates/circuits/virtualcircuit.html:87
|
||||
#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:72
|
||||
#: netbox/vpn/tables/tunnels.py:59
|
||||
@@ -12189,10 +12190,6 @@ msgstr ""
|
||||
msgid "L2VPNs"
|
||||
msgstr ""
|
||||
|
||||
#: netbox/netbox/navigation/menu.py:235
|
||||
msgid "L2VPN Terminations"
|
||||
msgstr ""
|
||||
|
||||
#: netbox/netbox/navigation/menu.py:241
|
||||
msgid "IKE Proposals"
|
||||
msgstr ""
|
||||
@@ -15941,7 +15938,7 @@ msgstr ""
|
||||
#: netbox/users/forms/model_forms.py:126
|
||||
msgid ""
|
||||
"Tokens must be at least 40 characters in length. <strong>Be sure to record "
|
||||
"your token</strong> prior to submitting this form, as it will no longer be "
|
||||
"your key</strong> prior to submitting this form, as it will no longer be "
|
||||
"accessible once the token has been created."
|
||||
msgstr ""
|
||||
|
||||
@@ -16080,7 +16077,7 @@ msgid "write enabled"
|
||||
msgstr ""
|
||||
|
||||
#: netbox/users/models/tokens.py:72
|
||||
msgid "Permit create/update/delete operations using this token"
|
||||
msgid "Permit create/update/delete operations using this key"
|
||||
msgstr ""
|
||||
|
||||
#: netbox/users/models/tokens.py:76
|
||||
@@ -16129,16 +16126,12 @@ msgstr ""
|
||||
msgid "tokens"
|
||||
msgstr ""
|
||||
|
||||
#: netbox/users/models/tokens.py:217
|
||||
msgid "Unable to save v2 tokens: API_TOKEN_PEPPERS is not defined."
|
||||
msgstr ""
|
||||
|
||||
#: netbox/users/models/tokens.py:222
|
||||
#: netbox/users/models/tokens.py:219
|
||||
#, python-brace-format
|
||||
msgid "Invalid pepper ID: {id}. Check configured API_TOKEN_PEPPERS."
|
||||
msgstr ""
|
||||
|
||||
#: netbox/users/models/tokens.py:235
|
||||
#: netbox/users/models/tokens.py:232
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Expiration time must be in the future. Current server time is {current_time} "
|
||||
|
||||
@@ -123,7 +123,7 @@ class UserTokenForm(forms.ModelForm):
|
||||
token = forms.CharField(
|
||||
label=_('Token'),
|
||||
help_text=_(
|
||||
'Tokens must be at least 40 characters in length. <strong>Be sure to record your token</strong> prior to '
|
||||
'Tokens must be at least 40 characters in length. <strong>Be sure to record your key</strong> prior to '
|
||||
'submitting this form, as it will no longer be accessible once the token has been created.'
|
||||
),
|
||||
widget=forms.TextInput(
|
||||
|
||||
@@ -69,7 +69,7 @@ class Token(models.Model):
|
||||
write_enabled = models.BooleanField(
|
||||
verbose_name=_('write enabled'),
|
||||
default=True,
|
||||
help_text=_('Permit create/update/delete operations using this token')
|
||||
help_text=_('Permit create/update/delete operations using this key')
|
||||
)
|
||||
# For legacy v1 tokens, this field stores the plaintext 40-char token value. Not used for v2.
|
||||
plaintext = models.CharField(
|
||||
@@ -213,9 +213,6 @@ class Token(models.Model):
|
||||
def clean(self):
|
||||
super().clean()
|
||||
|
||||
if self.version == TokenVersionChoices.V2 and not settings.API_TOKEN_PEPPERS:
|
||||
raise ValidationError(_("Unable to save v2 tokens: API_TOKEN_PEPPERS is not defined."))
|
||||
|
||||
if self._state.adding:
|
||||
if self.pepper_id is not None and self.pepper_id not in settings.API_TOKEN_PEPPERS:
|
||||
raise ValidationError(_(
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
from datetime import timedelta
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.test import TestCase, override_settings
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
|
||||
from users.choices import TokenVersionChoices
|
||||
from users.models import User, Token
|
||||
from utilities.testing import create_test_user
|
||||
|
||||
@@ -95,15 +94,6 @@ class TokenTest(TestCase):
|
||||
token.refresh_from_db()
|
||||
self.assertEqual(token.description, 'New Description')
|
||||
|
||||
@override_settings(API_TOKEN_PEPPERS={})
|
||||
def test_v2_without_peppers_configured(self):
|
||||
"""
|
||||
Attempting to save a v2 token without API_TOKEN_PEPPERS defined should raise a ValidationError.
|
||||
"""
|
||||
token = Token(version=TokenVersionChoices.V2)
|
||||
with self.assertRaises(ValidationError):
|
||||
token.clean()
|
||||
|
||||
|
||||
class UserConfigTest(TestCase):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user