How can I retrieve the APNs before the FCM token in Firebase in Xcode specifically?

Before encountering the error, I was using Xcode which had Firebase installed. At around 12pm today, I began encountering an error that looked like this
APNS device token not set before retrieving FCM Token for Sender ID 'XXXXXXXXX'.Be sure to re-retrieve the FCM token once the APNS device token is set.
Prior to 12pm, I did not encounter the error at all
After tinkering with it for 9 hours, I tried moving methods around, looked up many websites to find the exact error, debugging, and even went to YouTube of all places, but can't figure out where the error is coming from.
If it helps, I am currently using Xcode 16 with Firebase version 10.27.
Here's the code for anyone who thinks they can find the answer
This is in my AppDelegate from constant debugging
For extra context:
I have the app running on my iPhone 15 Pro Max and was running well before the error
I have Background Modes enabled (Background fetch, processing, remote notifications)
In my Firebase Console, I have the APN key in my Cloud Messaging section
I have added the app to my Firebase server
I have the Google Info.plist in my code
I have the app registred for App Attest (AppCheck) and DeviceCheck
import UIKit
import UserNotifications
import Firebase
import FirebaseMessaging
import TabularData
import FirebaseInAppMessaging

class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {

    var window: UIWindow?

    // Configure Firebase when the app launches
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()

        print("1st launch")
        // Set up push notification permissions
        registerForPushNotifications(application)

        // Set the messaging delegate
        print("2nd launch")
        Messaging.messaging().delegate = self

        return true
    }

    // Register for push notifications
    func registerForPushNotifications(_ application: UIApplication) {
        print("3rd launch")
        UNUserNotificationCenter.current().delegate = self
        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { granted, error in
            print("Permission granted: \(granted)")
        }
        application.registerForRemoteNotifications()
    }

    // Called when APNs has assigned a device token to the app
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

        // Forward the APNs token to Firebase
        Messaging.messaging().apnsToken = deviceToken
        print("APNs Token registered: \(deviceToken)")
    }

    // Handle any errors when trying to register for remote notifications
    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
        print("Failed to register for remote notifications: \(error)")
    }

    // Called when Firebase messaging gets a new FCM token
    func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
        guard let fcmToken = fcmToken else { return }
        print("Firebase FCM token: \(fcmToken)")

        // Optionally, send this token to your server
        // sendFCMTokenToServer(fcmToken)
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        handleDailyReportTrigger()
        completionHandler([.banner, .sound, .badge])
    }

    func scheduleDailyReport() {
        print("Scheduling the daily report in scheduleDailyReport...")

        // Schedule the generation of the report
        var dateComponents = DateComponents()
        dateComponents.hour = 16  // Adjust to your preferred time
        dateComponents.minute = 10

        print("At the UserNotificationCenter")

        let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
        let request = UNNotificationRequest(identifier: "DailyReport", content: UNMutableNotificationContent(), trigger: trigger)

        UNUserNotificationCenter.current().add(request) { error in
            if let error = error {
                print("Error scheduling daily report: \(error.localizedDescription)")
            } else {
                print("Daily report scheduled successfully.")
            }
        }

        // Automatically generate and display the report when the scheduled time is reached
        generateDailyReport()
    }

    private func generateDailyReport() {
        let startOfDay = Calendar.current.startOfDay(for: Date())
        let endOfDay = Calendar.current.date(byAdding: .day, value: 1, to: startOfDay)!
        let historyRef = Database.database().reference().child("history")

        let query = historyRef.queryOrdered(byChild: "timestamp")
            .queryStarting(atValue: startOfDay.timeIntervalSince1970)
            .queryEnding(atValue: endOfDay.timeIntervalSince1970)

        query.observeSingleEvent(of: .value) { snapshot in
            var services: [[String: Any]] = []
            for child in snapshot.children {
                if let childSnapshot = child as? DataSnapshot, let serviceData = childSnapshot.value as? [String: Any] {
                    services.append(serviceData)
                }
            }
            // Only proceed with CSV if we have data
            if !services.isEmpty {
                let csvURL = self.createCSVReport(from: services)
                self.displayCSVFile(at: csvURL)

                // Optionally delete the history
                historyRef.removeValue { error, _ in
                    if let error = error {
                        print("Error deleting history: \(error.localizedDescription)")
                    } else {
                        print("History deleted successfully")
                    }
                }
            } else {
                print("No services found for the day.")
            }
        } withCancel: { error in
            print("Error fetching history data: \(error.localizedDescription)")
        }
    }

    private func createCSVReport(from services: [[String: Any]]) -> URL {
        var dataFrame = DataFrame()

        // Create columns
        let customerNames = Column(name: "Customer Name", contents: services.map { $0["customerName"] as? String ?? "N/A" })
        let addresses = Column(name: "Address", contents: services.map { $0["address"] as? String ?? "N/A" })
        let phoneNumbers = Column(name: "Phone Number", contents: services.map { $0["phoneNumber"] as? String ?? "N/A" })
        let driverNames = Column(name: "Driver Name", contents: services.map { $0["driverName"] as? String ?? "N/A" })
        let statuses = Column(name: "Status", contents: services.map { $0["status"] as? String ?? "N/A" })

        let timestamps = Column(name: "Timestamp", contents: services.map { service in
            let timestamp = service["timestamp"] as? TimeInterval ?? 0
            let date = Date(timeIntervalSince1970: timestamp)
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
            return dateFormatter.string(from: date)
        })

        // Add columns to the DataFrame
        dataFrame.append(column: customerNames)
        dataFrame.append(column: addresses)
        dataFrame.append(column: phoneNumbers)
        dataFrame.append(column: driverNames)
        dataFrame.append(column: statuses)
        dataFrame.append(column: timestamps)

        // Export DataFrame to CSV format
        let csvData = try! dataFrame.csvRepresentation()

        // Save to directory
        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        let fileURL = documentsDirectory.appendingPathComponent("Service_Report_\(Date().toFormattedString()).csv")

        try! csvData.write(to: fileURL)
        print("CSV file created at: \(fileURL.path)")
        return fileURL
    }

    private func displayCSVFile(at url: URL) {
        let activityViewController = UIActivityViewController(activityItems: [url], applicationActivities: nil)

        if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
            windowScene.windows.first?.rootViewController?.present(activityViewController, animated: true, completion: nil)
        }
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        let userInfo = response.notification.request.content.userInfo
        print("UserInfo: \(userInfo)")
        handleDailyReportTrigger()
        completionHandler()
    }

    private func handleDailyReportTrigger() {
        let viewModel = AdminDashboardViewModel() // Access your view model here
        viewModel.generateDailyReport()
    }
}

@MainActor
class NotificationManager: ObservableObject{
    @Published private(set) var hasPermission = false
    static let shared = NotificationManager()

    init() {
        Task{
            await getAuthStatus()
        }
    }

    func request() async{
        do {
            try await UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound])
             await getAuthStatus()
        } catch{
            print(error)
        }
    }

    func getAuthStatus() async {
        let status = await UNUserNotificationCenter.current().notificationSettings()
        switch status.authorizationStatus {
        case .authorized, .ephemeral, .provisional:
            hasPermission = true
        default:
            hasPermission = false
        }
    }

    func postNewPickupRequestNotification() {
           NotificationCenter.default.post(name: .newPickupRequest, object: nil)
       }

    @MainActor
    func observeNewPickupRequestNotification(observer: Any, selector: Selector) {
           NotificationCenter.default.addObserver(observer, selector: selector, name: .newPickupRequest, object: nil)
       }
}

extension Notification.Name {
    static let newPickupRequest = Notification.Name("newPickupRequest")
}

@MainActor
class NotificationHandler: NSObject, ObservableObject {
    @Published var newRequestAlert = false

    override init() {
        super.init()
        Task { @MainActor in
            NotificationManager.shared.observeNewPickupRequestNotification(observer: self, selector: #selector(handleNewPickupRequest))
        }
    }

    @objc private func handleNewPickupRequest() {
        newRequestAlert = true
        scheduleLocalNotification(title: "New Pickup Request", body: "A new pickup request has been added.", timeInterval: 1)

        print("handleNewPickupRequest is here!")
        // Dismiss alert after some time (e.g., 3 seconds)
        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
            self.newRequestAlert = false
        }
    }

    private func scheduleLocalNotification(title: String, body: String, timeInterval: TimeInterval) {
        let content = UNMutableNotificationContent()
        content.title = title
        content.body = body
        content.sound = .default

        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterval, repeats: false)
        let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)

        UNUserNotificationCenter.current().add(request)
    }
}

class NotificationDelegate: NSObject, UNUserNotificationCenterDelegate {

    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

        let userInfo = response.notification.request.content.userInfo
        print(userInfo)

        completionHandler()

    }

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.banner, .sound, .badge])
    }
}

The log message you're seeing isn't an error. The APNs token refresh is not guaranteed to occur before FCM generates a token. It just means you need to fetch the FCM token once the APNs token is refreshed.


Prepare release 1.1 for location-verification + README + CHANGELOG

What type of PR is this?

correction
subproject management

What this PR does / why we need it:
Prepare location-verification for r1.1
Some fixes after review
Update README (for the 3 APIs)
Update CHANGELOG (for location-verification + placeholders for the others)
Before creating the r1.1 release we have to:
Merge the pending PRs for geofencing (maybe with the exception of the test plan)
Create a PR for geofencing adjusting versions for r1.1
Merge the PR for location-retrieval for r1.1
Merge this PR for location-verification + README/CHANGELOG for r1.1
Special notes for reviewers:
Same as https://github.com/camaraproject/DeviceLocation/pull/238 which was merged by mistake and reverted

@jlurien related to my comment within #235 would be my proposal to split this PR into two different ones:
a) a PR with the identified changes on location-verification YAML and test definition file, but keeping the version in "wip"
b) a "release PR" for the repository with all there APIs, which will be kept open until all last changes on the APIs are done, that will will set the API Version across all YAMLs.
Doing a) before b) has the purpose that reviewers can see the final content which will be released in main and there are no side effects on code by the release PR.

I will save CHANGELOG and README for the final PR for r1.1.

@maxl2287 please review and eventually approve this, as Ludovic is already on holidays. I applied last @hdamker suggestions to separate the latest changes in location-verification from the PR fo r1.1, which I'll prepare once we have the assets for the 3 APIs ready


Inconsistent Exceptions

Writing more documentation and I noticed this. There are a couple different exceptions for "this dockable doesn't exist". The DockingState class uses DockableNotFoundException but DockingInternal.getDockable and DockingInternal.getWrapper use DockingRegistrationFailureException. DockingRegistrationFailureException is used other places which make sense (like failing to register a root panel or dockable).
DockingInternal.getDockable and DockingInternal.getWrapper should throw DockableNotFoundException.

DockingComponentUtils.rootForWindow throws DockingRegistrationFailureException too, but it's not a failure to register, just a failure to find.


Logic bug

Dear developer:

I have used cboard to show kylin data, but the data seems exhibit with logic bug, as the pic shows, "199407-" before "199401-", while I have ordered by year-month, this really confused me, please tell me why? And I changed a sql, there still exists this logic bug.
Thank you for your help!

Use dimension order function provider in CBorder widget designer


Potential Conflict with YouTube - Investigating

I'm investigating a potential issue where YouTube videos endlessly load.
Please comment below if you experience this with a recent version of the AIO list.

Seems to have resolved itself in a new update.


Fixes #258 & remove redundant dispose code

This should fix that issue and the current networking code is an over complication
in my opinion.

Looks good. Mandatory question: have you ever read any decompiled code from official Minecraft software?

Nope.

Cool, thanks!


Workaround for https://issues.jboss.org/browse/SWARM-1689

This is a workaround to solve https://issues.jboss.org/browse/SWARM-1689 until Jandex is upgraded to 2.0.4
A similar patch was applied to the fraction plugin, but this issue is different: https://github.com/wildfly-swarm/wildfly-swarm-fraction-plugin/pull/43/files

[x] Have you followed the guidelines in our Contributing document?
[x] Have you created a JIRA and used it in the commit message?
[x] Have you checked to ensure there aren't other open Pull Requests for the same issue?
[x] Have you built the project locally prior to submission with mvn clean install?

Can one of the admins verify this patch?

Can one of the admins verify this patch?

ok to test


Please add this function which can convert a dictionary to a dataframe.

please add my code for a dictionary to dataframe conversion.
@Techiral

first star this repo
Given a star

Can you please give a lable to this submission.
“hacktoberfest-accepted” label.
@Techiral


Data table rows don't always display with pagination and searching

Bug Report
Copy from https://github.com/Teradata/covalent/issues/366
With pagination enabled on a data table, if you page and then start searching and it returns less items that can fit on a page, it says there are no results.  But there are just no results on the page you currently are on.  It should flip you back to page 1 so you can see your search results.
To reproduce:

Go to the following quickstart: https://teradata.github.io/covalent-quickstart/#/product/stats
In the Product Stats table sort the product table in ascending order.
Page to the 2nd page.
Search for Logs.
It says there are no results, but the results are on page 1.  Confusing for the end user.

Not valid anymore since we are repurposing the repo.


etcdmain: fix proxy srv lookup

Proxy should not do srv lookup when there is an existing cluster file.
Fix #3753
@raoofm

lgtm.


Duplicated markers

Hello,
Animaker shows duplicated markers on map
one of 'em changes when location changed, the second one fixed
When i run markers.length the result is 1

Hello, for anyone face this issue,
There's nothing wrong with the package,
I'm using BottomNavigationBar so i'm initializing BottomNavigationBar with three screen duplicating SupervisorMapView,
      children: const [
        SupervisorMapView(),
        SupervisorMapView(),
        SupervisorMapView(),
      ],

So I realized that  SupervisorMapView initialized three times..
Thats was my bad :'(


Encourage adding operator's name on power supports in France

Dear maintainers,
As required for a national project, we're currently assigning the appropriate operator=* on a great amount of power poles/towers on French distribution power grids.
https://www.openstreetmap.org/user/InfosReseaux/diary/396044
119 companies operate their part of this distribution grid and a lot of time is needed to catch up on existing features to complete them with appropriate value of operator=* depending on their location.
In the same time, other mappers add new poles on their own and forget about operator=* which require regular cleanups.
Is it possible to raise a warning in case of power=pole,tower located in France without operator=* on them please?
JOSM already has this quality check. It reduces a lot the amount of operator-unknown features and iD now remains the main editor encouraging this.
Best regards

Is it possible to raise a warning in case of power=pole,tower located in France without operator=* on them please?

It would probably be bad to have a warning if there's no operator since it's technically not an error. As operator isn't a required tag for utility poles.

Did you read the linked diary?
Such a tool won't take care of poles lacking operator value for instance.
https://enedis.openstreetmap.fr/
It's not possible to make a proper usage of data as we're not able to get the responsible operator for a given damaged pole (for instance)
JOSM already warns for lacking operator and data quality is improving quickly thanks to mappers seeking for this information

Did you read the linked diary?

Yes, but so what? Any random person can write a diary entry and say whatever they want in it. That doesn't mean it's authoritative or that their suggestion should be automatically implemented without question though.

It's not possible to make a proper usage of data as we're not able to get the responsible operator for a given damaged pole (for instance)

I mean, it would be if you add the operator tag yourself after the pole is mapped right? It's pretty easy to do a OverPass Turbo search for poles that don't have the operator tag. It's not worth having a warning for something that's not wrong tagging just because you don't want to out the effort though.
Otherwise, it's kind of a slippery slope. Should we have warnings for buildings without addresses? Businesses with empty name fields? Benches without the backrest tag? Between you and me, I don't like adding most of those just because who ever mapped the future originally didn't like doing it, but none of them are actually mapping errors that warrant warning someone about.

I mean, mappers aren't necessary aware this information is important and it's necessary to spend days to complete changesets that could be done correctly at first.

Did you ever think that maybe it's either not important to them, they don't have information, or might be planning on adding it later? People aren't required to add every possible tag to an object. In the meantime, just mapping a power pole without any extra tags is a "complete changesets. If you think more information should be added, cool. Then add it, but it's not the fault of the original mapper or an "incomplete changeset" just because you think other things should be added to the map.

BTW, I'm pretty sure there's already Name-Suggestion-Index presets for power infrastructure. If you want people nudged to add specific operator information that's probably the place to request it. This is repository is more about what tags Id Editor should support and it already supports the operator tag. So it's really not the proper venue for the question.

I mean, it would be if you add the operator tag yourself after the pole is mapped right?

We're dealing with 11 millions features + 8 millions for telecommunication networks.
I already spent days since 2021, January 1 to complete existing ones. As people add more poles, there are more objects to complete and everyone's volunteering time is limited. Currently the gap is wider than when it all began, so no it won't be ok.
This particular request allow the whole community to access free accurate imagery and make OSM visible in businesses that use to ignore it before, though the partnership the diary is about.
I wouldn't ask it if it doesn't worth it.

I'm pretty sure it's something that could be done on the Name-Suggestion-Index's side though.

To me NSI only provides links between labels, wikidata and osm names. How would we specify a possible nudge for operator on man_made=utility_pole features there?

We're dealing with 11 millions features + 8 millions for telecommunication networks.

That's slightly hyperbolic isn't it? There isn't 19 million power poles in France. Outside of that I'm not sure what telecommunication networks have to do with this issue since it's about power poles.

As people add more poles, there are more objects to complete and everyone's volunteering time is limited. Currently the gap is wider than when it all began, so no it won't be ok.

That goes for everything though. Including the person who your expecting to dig through government websites to find the operator of a power pole just so they can add it to the map without a warning. Why is your limited volunteer time more important then theirs?

This particular request allows the whole community to access free accurate imagery and makes OSM visible in businesses that use to ignore it before

Sorry, but I don't see the connection between tagging implementing a warning to tag operators on power poles and the community having access to free accurate imagery. Let alone why power poles having operator tags would make OSM more visible businesses. Perhaps you can enlighten me though?

I wouldn't ask it if it doesn't worth it.

I'm not really debating "worthiness" of implementing this since it's rather subjective. What I care about is if it's something that warrants a warning or not and IMO it doesn't because leaving out the operator tag isn't an error or bad tagging. Since that's warnings are for. To aid in fixing errors. Which I'm going to stick to unless you can convivence me otherwise.

To me NSI only provides links between labels, wikidata and osm names. How would we specify a possible nudge for operator on man_made=utility_pole features there?

Because if there is an entry for the operators of the power poles in the Name-Suggestion-Index then Id Editor will ask the user to "upgrade" the tags by automatically adding them with the preset.

That's slightly hyperbolic isn't it? There isn't 19 million power poles in France.

yes there are. 18 millions remains to be mapped and the point is to make editors the most efficient for that.

Sorry, but I don't see the connection between tagging implementing a warning to tag operators on power poles and the community having access to free accurate imagery

It's the point of the partnership between the French OSMF local chapter and the mainland power distribution operator. We all (including operator's staff) map poles and they provide us with 5cm imagery.
It's very important to identify the operator of each pole as to allow him to use osm data (with all due respect to odbl terms).
I once again recommend to reread the diary entry.

the person who your expecting to dig through government websites

Where did we expect that?
What about local signage, opendata and everyone's knowledge?

Because if there is an entry for the operators of the power poles in the Name-Suggestion-Index then Id Editor will ask the user to "upgrade" the tags by automatically adding them with the preset

It has slightly been improved since the last time I looked at it.
I'll be thinking about adding them there, thank you.

yes there are. 18 millions remains to be mapped and the point is to make editors the most efficient for that.

I meant currently mapped. Not how many there might or might not be mapped eventually. Since the purpose of warnings is to warn someone of a current issue.

We all (including operator's staff) map poles and they provide us with 5cm imagery.

Sure, but they are going to provide the imagery regardless of if Id Editor has a warning to add operator tags or not.

Where did we expect that?
What about local signage, opendata and everyone's knowledge?

I assume the "opendata" your referencing would be on a government website. Seriously, everyone doesn't magically have the knowledge of who the operator is. It's also not just out there in the ether and magically appears when the mapper thinks about it either. The person has to get the information from somewhere.

It has slightly been improved since the last time I looked at it.
I'll be thinking about adding them there, thank you.

At least something useful come out of the discussion

Point of this request is to improve editors to encourage mappers to add operator=* on the yet un-mapped poles they create as to get nodes with power=pole+operator=* from the first version.
We'll have an increasing flow of such creations until we reach ~11 millions power and 8 millions telecom poles.
It already began: https://taginfo.openstreetmap.org/tags/operator=Enedis#chronology
Existing poles without operator's name will be caught by time consuming clean up campaigns I mention upside. In some French districts or counties there already had 2 or 3 cleanup done since January 1.
The only mean I thought about was to nudge contributors, asking them for operator's name at the moment on they create those poles as to reduce the amount of feature that will have to be completed later, in addition to numerous informal communication, explanations, and so on...

Sure, but they are going to provide the imagery regardless of if Id Editor has a warning to add operator tags or not.

They would recall it at a shorter term if we conclude on too few poles were added or with lacking information.

Seriously, everyone doesn't magically have the knowledge of who the operator is

First of all it's written on the pole itself (as to not confuse technicians at first)
Secondly operators group themselves in a consortium to publish such knowledge in a user friendly fashion.

Existing poles without operator's name will be caught by time consuming clean up campaigns I mention upside.

That will be the case either way. It sounds like a better way to deal with outside of a warning is through a mapping party or MapRoulette challenge. The burden shouldn't be on random mappers who are adding power poles based on imagery in Id Editor to find or add the information though. Especially if it's not something they are already adding or want to.

They would recall it at a shorter term if we conclude on too few poles were added or with lacking information.

Do a mapping party or MapRoulette challenge then. Like I said though, I don't think it's on the average armchair user to add the information.

First of all it's written on the pole itself (as to not confuse technicians at first)
Secondly operators group themselves in a consortium to publish such knowledge in a user friendly fashion

I'm aware of where the information is. Surely though you get the difference between the information being on the pole or in a database and someone at home who's actually doing the mapping and getting the warning knowing it. I ask because for some reason you seem to have a serious disconnect about it.

Mapping parties require to meet people on a very local area, which is nice by the way. However here, there are ~15 new people each month I don't even have time to contact (and I definitely shouldn't).
Maproulette could be a thing, like osmose currently is, but still rely on a very few maintainers versus an increasing population of contributors.
Between armchair and ground contributors, there are people like me who take pictures on the ground and contribute from my desktop.
I'd be happy to be nudged once and get informed of an additional useful information to seek for the next time.
There are no better media for that than directly in the editor, especially when beginners come at iD first.

Mapping parties require to meet people on a very local area

Not really. I've been involved in a few that were global over Zoom myself. So they don't have to be. It really depends on who you want doing the mapping and what your wanting to map. You could easily do an online France wide mapatahon if it's that important. Sure, it might take time to contact people, but there's ways you can automate that and from what you've said it sounds like the alternative is more time consuming.
Look it's mostly about balancing the pros and cons of each option. I don't personally think a warning is the best way to get what you want done, as there's no guarantee people won't just ignore it. With a mapathon or Maproulette you can at least link people to them and track how many edits they have made. Which if your worried about the French government taking away the images sounds like something you'd be interested in. Compared to telling them they should continue to let us use the images because you adding a warning to iD Editor that has zero way to track and probably won't be effective. That's just my opinion though.

There are no better media for that than directly in the editor, especially when beginners come at iD first.

I don't personally think adding operators to power poles is a good task for beginners. Especially if you care about quality. At least not without the operator information already built into iD Editor as a preset. Which it currently isn't. Otherwise, the rate of mistakes are likely to be so high you'll just have more in the long-term trying to clean it up. At least that's been my experience with similar projects.

We're dealing with 11 millions features + 8 millions for telecommunication networks.
I already spent days since 2021, January 1 to complete existing ones.

It does not automatically mean that it is worth treating it as an error and raise warning.
At most, have a field making easier to fill it.

It sounds we have different approach about this particular topic.
We've been testing this on JOSM for 3 months now without problems (and a few discussions with people looking to get the information).
Maproulette and remote sessions will be barely possible at short term due to lack of time. We'll see later.
Thank you for time involved here, this issue can now be closed.

Hi all
I've gave Maproulette a try on a single French administrative region with this not yet discoverable challenge
https://maproulette.org/browse/challenges/22038
Experience isn't so great regarding this particular cleaning work.
Main issue is it's a bulk edit work and Maproulette requires to review every node independently.
Many clicks are needed to solve one single point while I'm able to fix many more points in a very less time with overpass+josm.
That doesn't mean Maproulette isn't a valuable tool in other contexts, it's not necessary to prove it's usefulness.
In this particular topic, asking for more people's time (to spread the clicking work on many more workers) to make a cleanup that could be avoided from the very beginning actually challenges my understanding.

Main issue is it's a bulk edit work and Maproulette requires to review every node independently.

That's probably a good thing. Otherwise your doing a mass edit. That said, wouldn't it be the same way with a warning in iD Editor though? I.E. People would still have to be in the area, click the individual nodes, add the information Etc. Etc...The benefit of Maproulette is that it's at least organized around a central system and people won't have to just wonder randomly to the power pole to know it needs the tag.

In this particular topic, asking for more people's time (to spread the clicking work on many more workers) to make a cleanup that could be avoided from the very beginning actually challenges my understanding.

Same thing here. An iD Editor warning would have the same issue. If you want to do the work yourself and not involve other people then I really don't get what your aiming at here. Just skip the iD Editor warning or whatever and do an import.

We're confusing many things here.
Grouping edits doesn't prevent to visually and independently check every feature we're about to edit.
The MapRoulette issue is an UX one, 3 clicks to edit a single feature, not an OSM etiquette issue.

I.E. People would still have to be in the area, click the individual nodes, add the information

An editor warning you from the few first features you create without an important information expected for a national project is less time consuming than completing more than 10 000 nodes each weeks.
People don't have to be in the area, in the France case at least.

If you want to do the work yourself and not involve other people then I really don't get what your aiming at here

I'm asking for the opposite.
I want to inform many people I can't reach for on other channels that an important tag is expected as to prevent others including me to be forced to make a costly cleanup afterwards.
I don't get what is you exact point here. This warning is live in JOSM and most of incomplete nodes come from iD, we don't have this issue with other editors.

warning is live in JOSM and most of incomplete nodes come from iD

Is JOSM really complaining with warning level about any power=pole/power=tower without operator tag?

Yes in France only.
https://josm.openstreetmap.de/wiki/Rules/FranceSpecificRules?action=diff&version=62
https://josm.openstreetmap.de/ticket/21010

Is it possible to raise a warning in case of power=pole,tower located in France without operator=* on them please?
JOSM already has this quality check. It reduces a lot the amount of operator-unknown features and iD now remains the main editor encouraging this.

We’re a bit off-topic for this repository. id-tagging-schema only holds the presets that go into iD and some other tools. Validator rules are still maintained in the iD repository.

This warning is live in JOSM and most of incomplete nodes come from iD, we don't have this issue with other editors.

The built-in validator is designed for things most mappers can reasonably be expected to resolve themselves without specialized knowledge, which is probably a more limited scope than JOSM’s validator. Unlike JOSM warnings, ignored iD warnings are perceived to count against users in HDYC profiles, just like ignored Osmose warnings. That could explain why your JOSM request was accepted with not much discussion but it has met with more skepticism now in the context of iD. A lay person faced with this warning would be inclined to suppress it by simply coping the operator from the power line, but that may raise some eyebrows and would probably be incorrect in urban areas where utility poles are shared with other utilities. A mobile editor such as StreetComplete or Go Map!! would have users who are less likely to take such shortcuts.
iD also integrates with ImproveOSM, KeepRight, and Osmose for more thorough warnings aimed at mappers who are more dedicated to quality control. There are a lot of warnings supported by these validators but not by the one built into iD. If missing operator tags poses a significant practical problem for long-term maintenance of the database or for typical data consumers, then one of these QA tools may be better suited to the proposed warning. As it is, iD doesn’t even warn users about missing operator tags on things that are much more likely to be tagged with operator, such as public_transport features, 25% of which are tagged operator. It should probably be stated somewhere that not every project is important enough for the kind of real estate being requested here.

If missing operator tags poses a significant practical problem for long-term maintenance of the database or for typical data consumers, then one of these QA tools may be better suited to the proposed warning.

Osmose imports JOSM warnings already (though not checked is it doing it with France-specific ones).

but if someone would enable it in Poland I would definitely treat it as unwanted spam (annoying to map, requires survey, little benefit if any).

yes, but it's not "someone which enabled it", it's a long time project with lot of discussion in french community.

yes, but it's not "someone which enabled it", it's a long time project with lot of discussion in French community.

It was definitely "someone" who enabled it on JOSMs side. My guess is that the French community didn't do the code, merge it, or have anything to do with the warning being implemented outside of asking the maintainers of JOSM to enable it.

My guess is that the French community and their lots of discussion didn't do the coding, merge it, or have anything else to do with the warning

If you read it correctly, I'm the one who make this revision upon the advice of JOSM maintainers in the ticket.
https://josm.openstreetmap.de/wiki/Rules/FranceSpecificRules?action=diff&version=62
The background point is local community can control local context without disturbing anyone in other countries.
Obviously, I'm not asking for this warning to be rolled out worldwide, it would require further discussion. It's only about France here.

Author is francois.lacombe not Klumbumbus.

I guess what's they get for using a 20 year old issue tracker. Anyway, I think my point still stands. "The French community" didn't do the PR. You did, sure your a part of the community, but for a universal warning like this there would have to be way more buy in from French mappers IMO. I know personally that as a mapper in Northern California if "the community"  in Southern California decide to force a warning on me for something like this I'd probably take the same stance @matkoniecz would about it if there was a similar warning in Poland..
 I know the NSI can with tag recommendations, but has it been applied to other things in Id Editor besides presets?

Is JOSM really complaining with warning level about any power=pole/power=tower without operator tag?
Yes in France only.

Please correct me if I'm wrong, but I think one manually needs to enable the "France specific rules" in the "Data validator" preferences dialog (see screenshot below) for this to actually happen. At least for me these rules were not active by default when mapping in France. This would mean that a "regular" mapper, mapping using JOSM in France will not get a warning about the missing operator tag on power poles and towers. Only experienced users who are aware of the special extra validation rules would be able to see them.

Since iD doesn't support custom optional validation rules, this is not something I can implement easily on iD right now.

Only experienced users who are aware of the special extra validation rules would be able to see them.

And only ones willing to enable them and keep them enabled would get this kind of warning.


[http-client] Expose more client attributes / Enhance @Path Annotation

Adds methods to retrieve more request data for request interception.

adds methods to retrieve the method, URI, etc.
Can define path via @Client
Can use @Path annotation on package/module files to set a package/module wide path prefix

@rbygrave yeah, I'm good with this


Should only enable flag when php is loaded

When using fpm, this gives errors! There should be a ifmodule section before the php_value insertion ;)
Enable the short tags for PHP scripts
php_value short_open_tag 1

I'm not sure how to reproduce this, can you elaborate?
from my first impression, short tags should be enable manually by configuring your php environment before attempting to run this project.


Get-RsDeploymentConfig doesn't check for NULL values

I'm not that familiar with powershell but when I try to run Get-RsDeploymentConfig on my SSRS project file I'm getting the following error:
Get-Content : Cannot bind argument to parameter 'Path' because it is null.
At line:1 char:29
+ [XML]$rptproj = Get-Content $RsProjectFile
+                             ~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-Content], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.GetContentCommand

I think that this is because some of the items in $Deployment are null, so it is failing to construct the $RSConfig object.
I think if you switch to something like the following it would work without error, or at least it does on my project files:
$RSConfig = [pscustomobject]@{
    FullPath               = $Deployment.FullPath
    OverwriteDatasets      = $Deployment.OverwriteDatasets
    OverwriteDataSources   = $Deployment.OverwriteDataSources
    TargetReportFolder     = if ($null -eq $Deployment.TargetReportFolder) { $null } else { ($Deployment.TargetReportFolder).Trimend("/") }
    TargetDatasetFolder    = if ($null -eq $Deployment.TargetDatasetFolder) { $null } else { ($Deployment.TargetDatasetFolder).Trimend("/") }
    TargetDatasourceFolder = if ($null -eq $Deployment.TargetDatasourceFolder) { $null } else { ($Deployment.TargetDatasourceFolder).Trimend("/") }
    TargetReportPartFolder = if ($null -eq $Deployment.TargetReportPartFolder) { $null } else { ($Deployment.TargetReportPartFolder).Trimend("/") }
    TargetServerURL        = $Deployment.TargetServerURL
    RsProjectFolder        = Split-Path -Path $RsProjectFile
}

@SQLvariant that might be able to help

@selsine How are you expecting the subsequent command Publish-RsProject should handle a Null config?  For example, if the -TargetDatasetFolder parameter is NULL/not provided, what should Publish-RsProject function do if it finds Datasets in the -RsProjectFolder specified?
Should the Publish-RsProject function try to deploy the Datasets to the same location as the -TargetReportFolder?
Or should the Publish-RsProject function just skip deploying Datasets if any are found?
I think the current behavior of Publish-RsProject is that if you didn't anything for the -TargetDatasetFolder parameter it would probably attempt drop any Datasets it finds into the root of the catalog /.

Thanks for the replies, I'm honestly not sure how this should behave in that situation. I inherited this project and that was they way that they original developers had it setup. I'm just trying to use this PowerShell module to automate the deployment process on Azure.
In general I would expect it to function in the same way that Visual Studio does when you publish using it, since the settings in the project file are valid, which I think is your first option.

To me, if a value is not specified in the Target properties, the intent is have them deployed in the root folder, e.g., TargetDatasetFolder is null and the project has datasets, the datasets would be deployed into the root folder specified by TargetServerUrl.
In this case, whether it makes most sense to default to null, empty string or , depends on what is easies for consuming in Publish-RsProject.
Also, I am not sure how FullPath plays into this.

I'm not that familiar with powershell but when I try to run Get-RsDeploymentConfig on my SSRS project file I'm getting the following error:
Get-Content : Cannot bind argument to parameter 'Path' because it is null.
At line:1 char:29
+ [XML]$rptproj = Get-Content $RsProjectFile
+                             ~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-Content], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.GetContentCommand

I think that this is because some of the items in $Deployment are null, so it is failing to construct the $RSConfig object.
I think if you switch to something like the following it would work without error, or at least it does on my project files:
$RSConfig = [pscustomobject]@{
    FullPath               = $Deployment.FullPath
    OverwriteDatasets      = $Deployment.OverwriteDatasets
    OverwriteDataSources   = $Deployment.OverwriteDataSources
    TargetReportFolder     = if ($null -eq $Deployment.TargetReportFolder) { $null } else { ($Deployment.TargetReportFolder).Trimend("/") }
    TargetDatasetFolder    = if ($null -eq $Deployment.TargetDatasetFolder) { $null } else { ($Deployment.TargetDatasetFolder).Trimend("/") }
    TargetDatasourceFolder = if ($null -eq $Deployment.TargetDatasourceFolder) { $null } else { ($Deployment.TargetDatasourceFolder).Trimend("/") }
    TargetReportPartFolder = if ($null -eq $Deployment.TargetReportPartFolder) { $null } else { ($Deployment.TargetReportPartFolder).Trimend("/") }
    TargetServerURL        = $Deployment.TargetServerURL
    RsProjectFolder        = Split-Path -Path $RsProjectFile
}

Thanks for the feedback.  A new version of the module is available in the PowerShell Gallery with 3/4ths of the changes you suggested.
I did not implement the $null logic on TargetReportFolder because SSRS projects that deploy Datasets and/or DataSources without Reports are kind of rare.  I also don't think the Publish-RsProject function would know what to do in that scenario.
If you are deploying an SSRS project which deploys Datasets and/or DataSources without Reports please tell me more about your scenario, so I can try to make the Publish-RsProject function handle things properly.

Thanks for the update, I've tested this and I am now able to get the config using Get-RsDeploymentConfig without issue. I am however having problems further down the chain with Publish-RSProject. Publish-RSProject may not work for us either way because we need to use a proxy, but here are the errors:
WARNING: Folder / does not exist
New-RsRestFolder : Cannot bind argument to parameter 'FolderName' because it is an empty string.
At C:\Program Files\WindowsPowerShell\Modules\ReportingServicesTools\<IP_ADDRESS>\Functions\Common\MakeDeploymentFolders.ps1:14 char:93
+ ... rtPortalUri $ReportPortal -RsFolder $Base -FolderName $Folder -Verbos ...
+                                                           ~~~~~~~
    + CategoryInfo          : InvalidData: (:) [New-RsRestFolder], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,New-RsRestFolder

WARNING: Folder /Local does not exist
VERBOSE: Making call to https://localhost/Reports/api/v2.0/me to create a session...
Failed to create a new session to https://localhost/Reports/api/v2.0/me : The remote server returned an error: (401) Unauthorized.
At C:\Program Files\WindowsPowerShell\Modules\ReportingServicesTools\<IP_ADDRESS>\Functions\Utilities\New-RsRestSession.ps1:125 char:9
+         throw (New-Object System.Exception("Failed to create a new se ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], Exception
    + FullyQualifiedErrorId : Failed to create a new session to https://localhost/Reports/api/v2.0/me : The remote server returned an error: (401) Unauthorized.

For the first warning I think you can avoid it with something like the following in Publish-RsProject line 94
$TargetReportFolder, $TargetDatasourceFolder, $TargetDatasetFolder |
    Sort-Object -Unique |
    ForEach-Object {
        if($_ -ne '/'){
            MakeDeploymentFolders -RsFolder $_ -ReportPortal $ReportPortal
        }

    }

But the second issue for us I think is related to the fact that we are using custom authentication and SSRS.  I can write out our reports using Write-RsFolderContent because I can pass a proxy with the proper authentication but I can't see how to do it with Publish-RSProject.
For our project (and I'm not an expert in SSRS in any way) we have TargetDatasetFolder and TargetReportPartFolder blank. So we don't have any datasets or report parts, but we are deploying reports.
I will try to handle it manually using Write-RsFolderContent, but I did want to update you on what I encountered.


Network logging fixes

Great work indeed, I believe it is a step into the right direction.
One thing that remains and I am concerned about is that we still have hard dependency to the logger module in the networking headers. It's still not possible to simply include networking header - we need to create a logger instance first (see for example http_get sample which creates logger only to avoid compilation errors).
The reason for that is that we use logger macros within some of the networking headers (mostly through the NET_ASSERT, there's also a lone NET_INFO call in net_analyze_stack in net_core.h. The most obvious way to solve that would be to move implementations into the source files, but perhaps there is a better way to solve that? @nordic-krch Any ideas?
Or we can just accept it as it is and live with that if we agree it's not a big deal. I just wanted to raise the issue to make sure we make a conscious decission here.

see for example http_get sample which creates logger only to avoid compilation errors

Well, that's awful. samples/net/sockets/http_get is a POSIX sample, and it should move into the direction of not having #ifndef __ZEPHYR__ at all.
So, that thing is another regression introduced by new logging, and should be resolved.

@rlubos regarding logging in headers. There are 2 options:

move those functions to c file
declare module in header file (see https://docs.zephyrproject.org/latest/subsystems/logging/logger.html#usage) like:

static inline void foo(void)
{
     LOG_MODULE_DECLARE(foo, CONFIG_FOO_LOG_LEVEL);

     LOG_INF("foo");
}

move those functions to c file

This might be the best option here.

declare module in header file (see https://docs.zephyrproject.org/latest/subsystems/logging/logger.html#usage) like:

In practice this is not really feasible, as the header cannot really know the used log level in .c file. Unless we hard code it to some specific value. I will investigate this more too.

@nordic-krch I tried to reach you at IRC, my question is that if I do LOG_MODULE_REGISTER(foobar, MY_LOG_LEVEL); will the macro set LOG_LEVEL to value of MY_LOG_LEVEL

@jukkar i don't start irc these days but you can reach me on slack.
Macro do not set LOG_LEVEL.

Macro do not set LOG_LEVEL.

Could it set it if LOG_LEVEL is not set already? The reason being that then each .c file would then know the current log level set. Also it would avoid the messy NET_LOG_LEVEL settings you see in my commits.

Various updates according to comments.

Codecov Report

Merging #11768 into master will decrease coverage by 3.28%.
The diff coverage is 0%.

@@            Coverage Diff             @@
##           master   #11768      +/-   ##
==========================================
- Coverage   48.29%   45.01%   -3.29%
==========================================
  Files         280      246      -34
  Lines       43333    35127    -8206
  Branches    10375     8027    -2348
==========================================
- Hits        20929    15812    -5117
+ Misses      18252    16307    -1945
+ Partials     4152     3008    -1144

Impacted Files
Coverage Δ

subsys/net/lib/websocket/websocket.c
16.74% <ø> (ø)
:arrow_up:

subsys/net/ip/nbr.c
28.75% <ø> (-53.75%)
:arrow_down:

subsys/net/ip/net_if.c
26.33% <ø> (-36.57%)
:arrow_down:

subsys/net/l2/dummy/dummy.c
94.73% <ø> (-5.27%)
:arrow_down:

subsys/net/ip/ipv6_fragment.c
25.58% <ø> (ø)
:arrow_up:

subsys/net/lib/app/client.c
33.18% <ø> (-16.26%)
:arrow_down:

subsys/net/lib/http/http.c
23.36% <ø> (ø)
:arrow_up:

subsys/net/lib/http/http_server.c
52.06% <ø> (+0.41%)
:arrow_up:

subsys/net/ip/ipv6.c
21.54% <ø> (-32.69%)
:arrow_down:

include/net/net_core.h
0% <ø> (ø)

... and 77 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update a127984...0d6abb6. Read the comment docs.

And what about the NET_ASSERT usage in the headers? It's the final dependency to the logger.  Shall we move functions calling it as well? I've identified a few headers that use it:

net_context.h
trickle.h
net_if.h
net_offload.h

Fixed merge conflict and converted new sample/net/syslog_net to use generic macros.


Rocket.Chat grey after starting Video Call

Hey,
#Setup

Operating System: Windows 10
App Version: 3.0.7
Installation type: msi
[X] I have tested with the latest version
[X] I can simulate the issue easily

Description
When I start a new video call (there is a Jitsi-Meet instance behind) the Rocket.Chat window becomes gray and no information is visible. After reload (ctrl+R) everything is visible again. This bug is new with V3.x.x . Older versions (2.x.x) work proper.

Rocket.Chat window:

Current Behavior
Content in Rocket.Chat window is not visible after video call is started
Expected Behavior
Content in Rocket.Chat window should be visible after starting a video call

fixed in https://github.com/RocketChat/Rocket.Chat.Electron/pull/1902

thanks for quick comment. I'll close that issue.


[feature][pulsar-broker-common]Move additional servlet module to pulsar broker common module

Motivation

Currently, after merging this or https://github.com/apache/pulsar/pull/8067, the pulsar-proxy module already supports loading custom web routes, which is also needed in the pulsar-broker and pulsar-function modules, so consider moving this functionality to the pulsar-broker-common module as a generic module.

Modifications

Update the class name to remove the proxy prefix
Move to the a module

How to use this generic module

add configuration additionalServletDirectory and additionalServlets to the configuration file
Call the following code

          Collection<AdditionalServletWithClassLoader> additionalServletCollection =
                    service.getProxyAdditionalServlets().getServlets().values();
            for (AdditionalServletWithClassLoader servletWithClassLoader : additionalServletCollection) {
                servletWithClassLoader.loadConfig(config);
                server.addServlet(servletWithClassLoader.getBasePath(), servletWithClassLoader.getServletHolder(),
                        Collections.emptyList(), config.isAuthenticationEnabled());
                log.info("proxy add additional servlet basePath {} ", servletWithClassLoader.getBasePath());
            }

If yes was chosen, please highlight the changes

Dependencies (does it add or upgrade a dependency): (yes / no)
The public API: (yes / no)
The schema: (yes / no / don't know)
The default values of configurations: (yes / no)
The wire protocol: (yes / no)
The rest endpoints: (yes / no)
The admin cli options: (yes / no)
Anything that affects deployment: (yes / no / don't know)

Documentation

Does this pull request introduce a new feature? (yes / no)
If yes, how is the feature documented? (not applicable / docs / JavaDocs / not documented)
If a feature is not applicable for documentation, explain why?


Please clarify License

Hi,
This is a really great project but I would be hesitant to use (and help maintaining) it due to license uncertainty. On top of that, https://pkg.go.dev/github.com/ssttevee/go-av is also refusing to index it.
Would you be able to clarify the license you intend to use?
Thanks,
Dim

Thanks for letting me know, I've added a license
The docs doesn't seem to have updated right away, but it should work soon


google-c-style.el should require cc-mode for proper statement-cont line break indentation

I don't believe that the Google C++ Style Guide ever explicitly spells out any rules for indenting line breaks for long arithmetic expressions, but I suspect that the formatting is supposed to follow the recommendations for Function Calls and Function Declarations and Definitions:

wrap the arguments at the parenthesis, or start the arguments on a new line indented by four spaces and continue at that 4 space indent.

The Emacs google-c-style conditionally defines the association list c-offsets-alist in a way that suggests this intent:
https://github.com/google/styleguide/blob/6271f3f473ceb3a7fef99388a3040903b1a145f1/google-c-style.el#L118-L124
When loaded with a minimal
(require 'google-c-style)
(add-hook 'c-mode-common-hook 'google-set-c-style)

The alist element evaluates to (statement-cont nil nil ++) because  (fboundp 'c-lineup-assignments) is nil. So, Emacs indents a long arithmetic expression as follows:
double x = 7.9
    + 3.0;

The c-lineup-assignments function is defined after CC-mode is loaded, but is not provided by cc-defs, as far as I know. Adding (require 'cc-mode) to the top of google-c-style.el results in (statement-cont nil c-lineup-assignments ++), which then indents arithmetic operations with line breaks similarly to function calls and declarations:
double x =
    7.9 + 3.0;

double x = 7.9
           + 3.0;

Is this the intended outcome?


GUI hangs forever on Windows when selecting song (media controls)

OS & Version
Windows x64.
Festival GUI v1.0.0 to v1.3.3.
Bug
Festival GUI hangs (stops responding) on song selection on certain Windows builds.
It is most likely blocking on souvlaki, where it is attempting to connect to the OS media controls API.
This can be confirmed by running:
.\Festival.exe --disable-media-controls

where it runs fine.
Either all of Windows 10 machines or specific machines with outdated drivers may be affected.
Steps
Steps to reproduce the behavior:

Start Festival (no queue)
Start playback on any song
Hang forever

It is hanging on this line exactly:
https://github.com/Sinono3/souvlaki/blob/384539fe83e8bf5c966192ba28e9405e3253619b/src/platform/windows/mod.rs#L188
It might have to do with the custom dummy window used.
Passing the HWND from Festival GUI is a solution, but it does not fix festivald, since it doesn't have a window.


Updated the code

Updated the code so that the created wordlist.txt file can be in use to this code. I have created the wordlist.txt file in the same directory. @shaddygarg sir, It will definitely improve the recon.
Checklist

[X] I have followed the Contributor Guidelines.
[X] I have added the relevant documentation.
[X] My branch is up-to-date with the Upstream master branch.

Changes proposed in this pull request
Your development environment

OS: Linux
OS Version: Ubuntu
Python Version: 3.x

 Here is an overview of what got changed by this pull request:

Issues
======
- Added 1

Clones removed
==============
+ lib/scan/dir/engine.py  -2

See the complete overview on Codacy

 Here is an overview of what got changed by this pull request:

Clones removed
==============
+ lib/scan/dir/engine.py  -2

See the complete overview on Codacy

Hey @aman566, this will require a wordlist.txt to be there in the same directory. I don't think that it is suitable and please fill out your PR column by agreeing to the terms and specifying the OS and python version you tested your changes on.

 Here is an overview of what got changed by this pull request:

Clones removed
==============
+ lib/scan/dir/engine.py  -2

See the complete overview on Codacy

@Ali-Razmjoo, do we want to do this kind of thing when we already support custom wordlists and all?

Sir the custom wordlist is not sufficient. This wordlist will give larger attack surface. Please check and let me know for any issues :)

@shaddygarg Sir the custom wordlist is not sufficient. This wordlist will give larger attack surface. Please check and let me know for any issues :)

it's always good to have a bigger wordlist, but we don't keep such a thing in the tool since we have this feature.
  --method-args METHODS_ARGS
                        enter methods inputs, example: ftp_brute_users=test,ad
                        min&ftp_brute_passwds=read_from_file:/tmp/pass.txt&ftp
                        _brute_port=21

you can simply add --method-args dir_scan_list=read_from_file:/tmp/directories.txt and load your files. I think it's unnecessary, and that short array is just default values from modules...

Totally agreeing with you but we can have it as a default wordlist, meaning if someone don't want to have its own that nettacker will search with thos one :). Any suggestions?

Closing this PR for clean commit history, as fixed in #272


"Split video" pop up makes me unable to upload the video.

If I click the "not now" button, the file uploads sucessfully, but without any interaction the program fails. Could someone help me fix this?
Thank you in advance

Yes, you are correct.

Similar to #57


pip 19 breaks install

Because of https://github.com/pypa/pip/issues/4187 --process-dependency-links is not supported anymore and installation fails. Use pip3 install --upgrade pip==18.0.0 to install it.

I actually forgot about --process-dependency-links when I was re-creating my environment with pip v19.3.1. I noticed that I get a build error about failing remove htmldiff's build directory:
ERROR: Failed cleaning build dir for htmldiff

... but that the tests pass just fine, as they also do on Travis (which doesn't do --process-dependency-links).
So I wonder if we can remove that part of the diffengine documentation?

I failed to install it via pip3 install --process-dependency-links diffengine on osx 10.14.6  and python 3.7.5. (And I guess travis does not use the latest pip version.) Shall I investigate further?

Sorry, I guess I wasn't clear. Try without the --process-dependency-links.

That didn't work either.

Oh, I was actually doing a pip install -r requirements.txt which is what Travis does as well. But this isn't useful for people who don't have a git clone of the repo--which is most people.

Maybe this is tilting at windmills, but the solution I'd like to aim for here is to get htmldiff in shape so it can be installed properly.

Tell me how I can help you to fix htmldiff.

diffengine usings python3 and there was a small problem with htmldiff that prevented it from running on python3 a2ae66bbb952272d5f18be8b5c4c7b38588acd6e
If that problem has been fixed upstream diffengine's requirements can just be pointed at that, and I believe --process-dependency-links can go away. Would you be willing to check on that?

@mitsuhiko can you release a new version to the PyPi repo https://pypi.org/project/htmldiff/ ? @edsu I guess this would fix the problem?

Yes, it does look like the python3 support was merged, but it was never pushed to PyPI. I guess I can open a ticket on the htmldiff repository to ask for a new release. I'm not sure @mitsuhiko will notice it here...

@edsu how about integrate the htmldiff source directly? For the license check https://github.com/mitsuhiko/htmldiff/blob/master/LICENSE

Still broken, fyi.

@weitzman it would be helpful if you could also comment over on https://github.com/mitsuhiko/htmldiff/issues/7 to try to move this along without us forking or copying the code.

This has gone on long enough. I guess we'll just fork it.


b  value shown as 0 in name (%eq) when b value is very low (e.g. 0.000026 is shown as 0)

In the %eq y=bx+c, b value is always shown as 0 if it is very low (e.g. 0.000026 is shown as 0)
please refer the attached image - I am trying to display the equation using %eq unde graph.
The decimal value property doesn't effect the %eq value.
Kindly suggest if I am missing something.

I gave a quick look into your code and the following transforms the value to 0 in the %eq :

    var string = 'y = ' + Math.round(gradient * 100) / 100 + 'x + ' + Math.round(intercept * 100) / 100;

instead of fixed rounding, can we use dynamic function like below, which rounds considering the nearest non zero values -
function roundOff(n) {
return parseFloat(n.toExponential(Math.max(1,2+Math.log10(Math.abs(n)))));
}
roundOff(0.000025) = 0.000025

Yes, its rounding to units.
I would add a new option for precision on the formula, in order to avoid
affecting current users.
Thanks for your contribution
El mié., 19 jun. 2019 a las 13:59, Nikhil Choudhry (<
<EMAIL_ADDRESS>escribió:

I gave a quick look into your code and the following transforms the value
to 0 in the %eq :
var string = 'y = ' + Math.round(gradient * 100) / 100 + 'x + ' + Math.round(intercept * 100) / 100;

instead of fixed rounding, can we use dynamic function like below, which
rounds considering the nearest non zero values -
function roundOff(n) {
return parseFloat(n.toExponential(Math.max(1,2+Math.log10(Math.abs(n)))));
}
roundOff(0.000025) = 0.000025
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/streamlinesocial/highcharts-regression/issues/94?email_source=notifications&email_token=AAP5GLTLR47QGVVG7TN7VS3P3JQYVA5CNFSM4HZIMTK2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODYCQHOA#issuecomment-503645112,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAP5GLT2I6DPHVTLQFRWM23P3JQYVANCNFSM4HZIMTKQ
.


builtin function "type" shadowed as a parameter in many locations

In multiple places (but primarily in mapdl_functions.py), the parameter name type is used. type is otherwise a builtin function in Python and PEP8 recommends that a trailing underscore be added in these instances to prevent overwriting the function.
"

single_trailing_underscore_: used by convention to avoid conflicts with Python keyword, e.g.
tkinter.Toplevel(master, class_='ClassName')

"
It's relatively straightforward to go through and do a find-and-replace, but this would be a major breaking change and so probably requires some more discussion regarding how to proceed.
The files affected are
mapdl/core/mapdl_functions.py
mapdl/core/geometry_commands.py
mapdl/core/math.py

There has always been a balance between maintaining backwards compatibility with MAPDL and being PEP8 compliant.  In this case, since keyword arguments aren't even possible within MAPDL, I think this is a fix we should take.
I'll refactor this and have you review the PR.

All fixed now!

Thanks!  Only 35 issues to go...


Can't open browser when using heroku open / webpack-dev-server --open

How can I allow external packages to open the browser from within Bash?
For example, with webpack-dev-server --open I get: "Unable to open browser. If you are running in a headless environment, please do not use the open flag."

Use Firefox under VcXsrv in WSL, or launch a Windows browser with interop like here.

Thanks @therealkenc!
For anyone else who has the same issue, I added export BROWSER=/mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe (your path may vary) to my .bashrc file. This set the default browser to be Chrome, which opens with Interop flawlessly.
Reference: https://askubuntu.com/a/16626


#315: Fix frozen process after global tool installation with msiexec

Fixes: #315
This PR adds an argument for msiexec to install msi files. With /qb the installation requires no user interaction, but there is still a UI to see the progress of the installation. This way the process no longer freeze
This PR change the installation process of global tools so that they are run in the background.
Affected tools: docker, pgadmin

Pull Request Test Coverage Report for Build<PHONE_NUMBER>2
Details

0 of 0   changed or added relevant lines in 0 files are covered.
10 unchanged lines in 1 file lost coverage.
Overall coverage increased (+0.04%) to 66.544%

Files with Coverage Reduction
New Missed Lines
%

com/devonfw/tools/ide/process/ProcessContextImpl.java
10
75.27%

Totals

Change from base Build<PHONE_NUMBER>8:
0.04%

Covered Lines:
6128

Relevant Lines:
8869

💛  - Coveralls

If the installation process of global tools should happen in the background, then this implementation doesn't make sense, does it?  We are waiting for an exit code to proceed but if the setup is done by the user in the background, the IDE should output something like Setup of <tool> started. without any success or error output. But what are we doing with postInstall(). Is it even necessary for a global tool when the user is handling the entire installation?
https://github.com/devonfw/IDEasy/blob/54a8b476ffbcc12f64041fadf2fe3a571e03662b/cli/src/main/java/com/devonfw/tools/ide/tool/GlobalToolCommandlet.java#L134-L147

But what are we doing with postInstall()

https://github.com/devonfw/IDEasy/blob/071e732e6c74aed7b12ccc1d522faf1c4a015dad/cli/src/main/java/com/devonfw/tools/ide/tool/GlobalToolCommandlet.java#L142-L144


[DO NOT MERGE] Move to Vortice.Direct3D11 and Vortice.Direct3D12

Move to latest DirectX bindings for Direct3D11 and Direct3D12.

Thanks for the contribution!
It's a good idea to move on from the deprecated SharpDX.
However, it might be good to discuss plans before you go further with the port (the latest discussion consensus was to switch to Silk.NET for D3D11/12 to have struct-like lower-level bindings).

Thanks for the contribution!
It's a good idea to move on from the deprecated SharpDX.
However, it might be good to discuss plans before you go further with the port (the latest discussion consensus was to switch to Silk.NET for D3D11/12 to have struct-like lower-level bindings).

Ok, will close PR, ping me in case.
Thanks

Ok, will close PR, ping me in case.
Thanks


How to keep project source code from ohif to local

Hi @dannyrb And everyone,
We see this project is not stable now, We want to keep your code but we want to code directly in this source code to change the UI and somethings.
We forked to our local, but when you have something update, we pull them but have lots of conflict.
Do you have any ideal for us?

@trung1704ptit, it depends on what your customization goals are for the viewer. We version the platform/viewer project, which is what 90% of our users consume, based almost entirely on it's application configuration file. It's a fully featured application, so we can't make any promises to our users that every change to it's internals won't break some tacked on functionality, or we would need to author a major version for, well, every change.
Some guidance:

If you encounter bugs or defects, report the issue and contribute a fix in a PR. This benefits the entire community, and makes maintaining a fork easier.
If there is some functionality that is not yet supported by extensions, consider reaching out so that we can expand what we do support, and decrease the likelihood that you will need to maintain a fork. We don't always have the bandwidth to author these changes, but can approve, provide guidance, and review PRs that expand support.

Each project is independently versioned and provides different ways to extend and configure its behavior. If you find yourself mucking about in the internals, you're probably doing something that is "brittle" and inherently prone to breaking. Help us identify these missing extension points, and consider authoring changes that make it less likely that updates to a project will leave you in a tough spot squinting at a 30,000 line merge commit.
Our goals for OHIF, from an extensibility/forking stand-point:

That @ohif/viewer and the progressive web application built by OHIF can support > 90% of our users with only simple configuration file changes
That most users that would normally fork the project are able to avoid doing so by packaging custom logic into simple OHIF extensions
That when users need truly custom UI and experiences, they can override one or more projects in the monorepo so they can leverage the bulk of the application logic contained in other packages, but still achieve the level of customization they require

We intend to develop and deliver a new concept that expands our current extensibility through "modes". Think "install-able and shareable workflows" that will further decrease the need to fork. We are working at the pace our current grant affords us the ability to.

I have a similar position to this. Currently maintaining a custom clone, but will also contribute back anything I can to help the project.
The main reasons for a custom repo are mostly UI/Cosmetic, but I couldn't find a way to do them without modifying code:

Removing the header on mobile to give more screen space to images.
Removing extra buttons not required on mobile (zoom, pan etc..) - had to just remove them in the cornerstone toolbar extension directly (maybe forking just the extension is the way to go here?)
Whitelabel features (I think this is fixed now with the config file)

I am sure there is probably easier ways to do this - but I am not familiar enough yet with the extensions architecture, and would rather not just 'display:none' everything in CSS but still compile them - bundle size is important!

I do wish we had the funding to offer better support for mobile resolutions. It feels silly that all of our Viewports support touch and pointer interactions, but our limiting factor for mobile are a few CSS rules and regression testing costs. FWIW, there are some design changes coming that make it easier to accommodate mobile, but we're still not 100% there.

Removing extra buttons not required on mobile (zoom, pan etc..) - had to just remove them in the cornerstone toolbar extension directly (maybe forking just the extension is the way to go here?)

Today, extensions kind of just glom everything in them into the Viewer route. Moving forward, we're working on a concept called modes that lets you choose and configure which parts of extensions should be leveraged by one or more viewing routes. This makes it easier to reuse and share functionality without the need to fork an extension.

Whitelabel features

The logo feature did receive a recent fix. Use of color variables could be better / reviewed.

Removing the header on mobile to give more screen space to images

If there's a good breakpoint to apply this change, and it looks okay, more than happy to accept a PR.

Perhaps better understanding of the extension system would help here?

After the modes changes are completed, next on the docket is revising our docs and providing some high level training via video courses at https://ohiftraining.com

Thanks for the info @dannyrb. Great to know the project is continuously moving forward. The training site looks awesome.
I'll see if I can do a small PR for the mobile header.


Various seemingly unrelated errors when trying to update internal description field

Hello,
I ran the app in our Sandbox on 50 e-collections only to append something to the internal description field and have a few issues to report from one run of the app, which I'll try to separate into different issues.
Out of the 50, 11 gave errors. 9 of the errors are in this form: "ID<PHONE_NUMBER>0001701 could not be updated: Electronic collection group proxy enable valid values: [1,2,0]". However, the 9 collections with errors about group proxy values actually did update the internal description field.
Two errors are different. One is about interface name valid values, and one is about license valid values (I've attached a copy of the error log it displayed). These two collections did not update at all. I created a set of just the two that didn't update and re-ran the append function and got the same errors.
Thanks,
Martin Patrick (University of Minnesota)
umn_cloud_app_errors.txt

Thanks for your report @martinpatrick . We're looking into it.

Hi @martinpatrick - looks like this is bringing up some problems with your data. Can I ask you to have a support case opened and let us know here what the case number is? Then we can work with you on the data issues.
Thanks.

Closing - please reopen if there's still an issue.


Fix Unicode support in hgettext utility

Previously, the hgettext utility used show function to escape strings in the generated PO file. This lead to Unicode characters being incorrectly escaped, for example, … became \8230 instead of \x2026.
This tripped up xgettext command, especially when used with --join-existing option.
According to gettext documentation, the strings use C syntax so we are using functions for escaping C strings.

Ping

I've merged this... it was about time :-)


Fix infinite recursion in config endpoint

The bidirectional relationship between PlatformDeployment and LtiContext led to an infinite recursion in the JSON output from the GET config endpoint, making the output difficult to read, making it take longer, and preventing the entire set of PlatformDeployment configurations from being retrievable via this endpoint. Removing the context field from this JSON output has resolved those three issues.
Pagination was added to the GET config endpoint so that when the configuration database table grows to be large, its entirety is not fetched at once when the GET config endpoint is called, leading to slow requests. Pagination can be used by adding ?page=1 to the end of the request.

Cool. I thought that infinite loop was solved, but maybe some changes reverted it.  Good to have it solved
And the pagination thing is a good improvement!


Unexected Error: Please restart to continue

Describe the bug
Since updating to v1.6.0, Maestral has paused syncing and is displaying an Unexpected Error notification. Restarting Maestral and system restarts have not solved the issue. Something to note is the account Maestral is syncing is a Dropbox Business Account.
Error Log
2022-03-23 10:17:31 daemon INFO: Starting daemon
2022-03-23 10:17:31 manager INFO: Connected
2022-03-23 10:17:32 manager ERROR: Unexpected error
Traceback (most recent call last):
  File "Contents/Resources/app_packages/maestral/manager.py", line 805, in _handle_sync_thread_errors
  File "Contents/Resources/app_packages/maestral/manager.py", line 752, in startup_worker
  File "Contents/Resources/app_packages/maestral/client.py", line 521, in get_space_usage
  File "Contents/Resources/app_packages/maestral/client.py", line 1538, in convert_space_usage
AttributeError: 'TeamSpaceAllocation' object has no attribute 'usage'
2022-03-23 10:17:32 manager INFO: Shutting down threads...
2022-03-23 10:17:32 sync INFO: Sync aborted
2022-03-23 10:17:32 manager INFO: Paused

System:

Maestral version: GUI v1.6.0, daemon v1.6.0
Python version: 3.8.5
OS: macOS Monterey 12.3

Additional context
Screenshot of the notification shown:

I have the same issue, same configuration.

I am seeing the same error in the logs. M1 Mac with a Dropbox Business account.

Apologies for this, v1.6.1 is now out with a fix. This was an error when querying the space usage for Team accounts.

Confirmed fixed on my end. Thanks, @samschott !

Thank you!

@samschott
I'm on 1.6.1 but still get this error
the daemon pauses and if I try "resume syncing" I get this "restart" error

Never mind, I got confused by not having the version of the GUI app available but the daemon's.
Please consider exposing the GUI version too

@ubidefeo Would you expand on your comment? I'm getting this error, but when I do "Check for updates…" Maestral says it's up to date (1.6.1).


Testing with Zombienet

A means of initializing a Zombienet chain in the same env in which it is to be utilized.
const node = await C.zombienet({
  // ...config
});

node.url; // use this to instantiate an RPC client

node.close();

paritytech/zombienet#259

#143 serves as a better tracking issue for this.


SVG loading issue in react native WebView (iOS)

Tools used

D3 js: v4.11.0
react-native: v0.60.3
react-native-webview: v9.3.0

Previously I was using react-native 0.59.8 and I was using WebView from react-native, in this version WebView was working fine, SVG was also loading perfectly, but after upgrading react native to 0.60.3, I also have to take WebView from react-native-webview,
React Native WebView :-

<WebView
scrollEnabled = {true}
originWhitelist={["*"]}
javaScriptEnabled={true}
source={{ uri: isAndroid ? "file:///android_asset/widget/index.html" : "./widget/index.html" }}
// useWebKit={false}
allowUniversalAccessFromFileURLs={true}
allowFileAccess={true}
scalesPageToFit={true}
onMessage={this.getSelectedSeat}
ref={component => (this.webview = component)}
style={{ width: deviceWidth, height: deviceHeight }}/>

Calling:

this.webview.postMessage("data");

Capturing in HTML:

this.window.addEventListener("message", data => {
}

Loading SVG in HTML :-

function loadSVG(svgURL) {
d3.xml(
svgURL,
function (xml) {
if (xml != null) {
var importedFile = document.importNode(xml.documentElement, true);
d3.select("#layout")
.node()
.append(importedFile);
}
},
err => {
alert('error')
}
);
}

svgURL example: http:///assets/ta/SM/LAYOUT/SVG/FT1stFloor.svg
In android same code is working fine, but not in iOS, every time xml is null, but it was fine in the older version of WebView where I was taking WebView from react-native, I don't know what I'm missing, may be some property. Please Help.
Update:
I'm getting error message: {"isTrusted":true}, I think this is Cross-Origin related issue, is there any way to disable this in iOS WKWebView?

This fixed the issue, thanks.


284 activation

This PR implements some of the features required in #284. Specifically

New packages pkg/launch and pkg/launch/os are added to implement launch a normal os binary via os exec, which is specified in a configuration json (the command and args required to start the process)
A new verb for infrakit plugin to start a list of named plugins.
A new config JSON that maps the plugin names to the 'how' in starting up the process
Added a new version of the tutorial_test to show case how to start the plugins in one CLI invocation.

TODO

Incorporate plugin activation in the manager so that manager will be able to launch plugins dynamically based on the config input.
Implement other executors -- such as plugins implemented as Docker containers or engine plugins.

Please sign your commits following these rules:
https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work
The easiest way to do this is to amend the last commit:
$ git clone -b "284-activation" git@github.com:chungers/infrakit.git somewhere
$ cd somewhere
$ git rebase -i HEAD~842353934280
editor opens
change each 'pick' to 'edit'
save the file and quit
$ git commit --amend -s --no-edit
$ git rebase --continue # and repeat the amend for each commit
$ git push -f

Amending updates the existing PR. You DO NOT need to open a new one.

Current coverage is 51.36% (diff: 66.19%)

Merging #356 into master will decrease coverage by 13.35%

@@             master       #356   diff @@
==========================================
  Files            39         11     -28
  Lines          1993        512   -1481
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
- Hits           1290        263   -1027
+ Misses          570        219    -351
+ Partials        133         30    -103

Powered by Codecov. Last update fd5894e...5b02c04


fix minor bug

There was a syntax error in the preprocess_ssv2.py file which has now been fixed.

Thank you for the PR :).


Test: Temporarily disable all visual tests and SCSS loading

We need this because everything is broken now.
The plan is to slowly uncomment/unignore everything as we transform components into new tokens.
Description

Additional context

Issue reference

I think you also want to exclude the branch from the CI runs:
on:
  push:
    branches:
      - '!bc/variables-*'

I think you also want to exclude the branch from the CI runs:
on:
  push:
    branches:
      - '!bc/variables-*'

I fixed the build, do you still think I need it? Now I don't see why, but maybe I miss something :)

I fixed the build, do you still think I need it? Now I don't see why, but maybe I miss something :)

I thought that you did not want to run in on CI in this case. 🤷

coverage: 79.191%. remained the same
when pulling c71b4a4409e199789c09401fe6586af4338f750a on fix/disable-tests-and-scss
into 3619639a910a9187856193fd60735f18bbe6b343 on bc/v3-tokens.


merge from arlac77/npm-package-template

package.json

chore(package<EMAIL_ADDRESS>chore(scripts): cover@#overwrite c8 -x 'tests/**/*.mjs' --temp-directory build/tmp ava && c8 report -r lcov -o build/coverage --temp-directory build/tmp
chore(package): set $.ava.require='esm' as in template
chore(package): set $.ava.files='tests/*-test.mjs' as in template
chore(package): set $.ava.extensions='mjs' as in template

:tada: This PR is included in version 8.4.2 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[FEATURE REQ] Connecting to Azure-AD via proxy

Is your feature request related to a problem? Please describe.
We want to use Azure-AD authentication in a Spring Boot application as shown here:
https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/azure-spring-boot-starter-active-directory/README.md
Our system is in a private cloud and only allowed to connect to internet via proxy. Using Azure-AD oauth the application receives an token via redirect after login and that token needs to be validated. For this validation http-requests are sent to Azure-AD and for those requests there is no possibility to configure a http-proxy.
At least for this use case I could identify 2 (or maybe also 3) usages of Spring's RestTemplate to connect to Azure-AD:

Request to fetch the token: For this one can add this code to the configuration class (extending AADWebSecurityConfigurerAdapter) but that needs to duplicate code from DefaultAuthorizationCodeTokenResponseClient#DefaultAuthorizationCodeTokenResponseClient():

    protected OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> accessTokenResponseClient() {
        final var result = super.accessTokenResponseClient();
        if (result instanceof DefaultAuthorizationCodeTokenResponseClient) {
            ((DefaultAuthorizationCodeTokenResponseClient) result)
                    .setRestOperations(oauth2ClientRestOperations());
        }
        return result;
    }

    @Bean
    public RestOperations oauth2ClientRestOperations() {
        final var restTemplate = new RestTemplate(
                Arrays.asList(new FormHttpMessageConverter(),
                new OAuth2AccessTokenResponseHttpMessageConverter()));
        restTemplate.setErrorHandler(new OAuth2ErrorResponseErrorHandler());
        if (StringUtils.isNotBlank(proxyHost)
                && (proxyPort != -1)) {
            restTemplate.setRequestFactory(proxyAwareRequestFactory());
        }
        return restTemplate;
    }

    private ClientHttpRequestFactory proxyAwareRequestFactory() {
        return new HttpComponentsClientHttpRequestFactory(
                HttpClientBuilder.create().setProxy(new HttpHost(proxyHost, proxyPort, "http")).build());
    }

Request(s) for validating the token: For this I could find two places in which RestTemplates are created without any possibility to customize them:
https://github.com/Azure/azure-sdk-for-java/blob/2cd30e97440042b17a94db3438865ed530fb4c08/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADIssuerJWSKeySelector.java#L73
https://github.com/Azure/azure-sdk-for-java/blob/2cd30e97440042b17a94db3438865ed530fb4c08/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/aad/AADJwtDecoderProviderConfiguration.java#L26

Describe the solution you'd like
There should be one easy and centralized configuration for all RestTemplates used for Azure-AD authentication. There are two possibilities for RestTemplate customization (see https://www.baeldung.com/spring-rest-template-builder). Anyone is fine and should be predefined like this:
public abstract class AADWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
    protected RestTemplateBuilder azureAdRestTemplateBuilder() {
        return new RestTemplateBuilder();
    }

This Builder needs to be used by the code mentioned above and can be overwritten by the deriving class like this:
@Configuration
public class AzureAdOAuth2Configuration extends AADWebSecurityConfigurerAdapter {
    @Value("${azure.activedirectory.proxyHost:}")
    private String proxyHost;
    @Value("${azure.activedirectory.proxyPort:-1}")
    private int proxyPort;

    protected RestTemplateBuilder azureAdRestTemplateBuilder() {
        return super.azureAdRestTemplateBuilder()
                  .requestFactory(proxyAwareRequestFactory());
    }

    private ClientHttpRequestFactory proxyAwareRequestFactory() {
        return new HttpComponentsClientHttpRequestFactory(
                HttpClientBuilder.create().setProxy(new HttpHost(proxyHost, proxyPort, "http")).build());
    }

Describe alternatives you've considered
As an alternative I tried to use System properties http.proxyHost and http.proxyPort but that didn't work.
Additional context
No additional context.
Information Checklist
Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report

[x] Description Added
[x] Expected solution specified

Hi, @stephanpelikan , thanks for reaching out.
Added this issue into backlog. We will consider to implement it in the future.

@stephanpelikan  I'm in the same boat as you in this topic, and my springboot application is unable to access AzureAD over proxy. Could you please explain how you went about achieving this?

As mentioned in the description there are different situations in which requests are sent to Azure-AD. Unfortunately, only for one is a possibility to set a proxy by adding some code (see bullet-point 1 in the description). For the others (bullet-point 2) it is not possible to adopt the RestTemplate. Therefore I didn't achieve to get access via proxy. Unless the proposed solution or something similar is implemented it is not possible to do authentication via Azure-AD behind a proxy.

Thanks for the information @stephanpelikan .  I tried all the possible ways override but no luck so far. I hope, AzureSDK team will add this feature soon.

Until this issue is resolved, maybe this helps: Using these JVM parameters I could use Azure-AD login:

-Dhttps.proxyHost=<IP_ADDRESS> -Dhttps.proxyPort=3128  -Dhttp.proxyHost=<IP_ADDRESS> -Dhttp.proxyPort=3128 -DproxySet=true

Of course you need to adopt this to your proxy's IP address and port.
This is only a workaround for testing Azure-AD login. Other http(s) connections of your application will also use that proxy and therefore might fail. For me it is crucial to be able to set proxy configuration for each http-client of my application independently.

I create a PR for this https://github.com/Azure/azure-sdk-for-java/pull/30456 issue @stephanpelikan would you please take a look, thanks

Reopen this issue, because of https://github.com/Azure/azure-sdk-for-java/pull/30456#issuecomment-1236470413

Closing in favor of https://github.com/Azure/azure-sdk-for-java/pull/30786

Link to PR of updating reference doc: https://github.com/Azure/azure-sdk-for-java/pull/30882

It's really great that the proxy issue will be resolved. Would there any more information available about how to implement the  RestTemplateCustomizer bean?
I wonder if customzing the RestTemplate will also help for carrying out the authorization code flow. In Azure SDK 4.2.0, during token validation, the class com.azure.spring.cloud.autoconfigure.aad.implementation.graph.GraphClient is used to verify the user's groups. This class doesn't use the RestTemplate but a java.net.HttpURLConnection for access the Microsoft Graph service.

Hi, @HNE74

Would there any more information available about how to implement the RestTemplateCustomizer bean?

Here is an example about how to configure a RestTemplateCustomizer bean:
    @Configuration
    static class RestTemplateProxyCustomizerConfiguration {

        static final SimpleClientHttpRequestFactory FACTORY = createProxyFactory();

        static SimpleClientHttpRequestFactory createProxyFactory() {
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 8080));
            SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
            factory.setProxy(proxy);
            return factory;
        }

        @Bean
        public RestTemplateCustomizer proxyRestTemplateCustomizer() {
            return (RestTemplate restTemplate) -> restTemplate.setRequestFactory(FACTORY);
        }
    }

@HNE74

class com.azure.spring.cloud.autoconfigure.aad.implementation.graph.GraphClient is used to verify the user's groups. This class doesn't use the RestTemplate but a java.net.HttpURLConnection for access the Microsoft Graph service.

Good point. I missed that one. I'll try to use RestTemplate instead of HttpURLConnection in GraphClient .

Great, many thanks for providing the configuration example 👍

@HNE74

class com.azure.spring.cloud.autoconfigure.aad.implementation.graph.GraphClient is used to verify the user's groups. This class doesn't use the RestTemplate but a java.net.HttpURLConnection for access the Microsoft Graph service.

Good point. I missed that one. I'll try to use RestTemplate instead of HttpURLConnection in GraphClient .

Reopen this issue. Need to replace all HttpURLConnection by RestTemplate used in Azure AD related http requests.

Closing this issue in favor of https://github.com/Azure/azure-sdk-for-java/pull/31048

Closing this issue because It's fixed in spring-cloud-azure 4.4.0. https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/spring/CHANGELOG.md#440-2022-09-26

Hi, @martfol
Thanks for reaching out.

not sure if this is the right place for my question but we're currently really struggling with connecting our spring boot application to azure AD via proxy

In this case, my suggestion is to create a new issue.

I was following this tutorial and I also found this list of global properties, which apparently also contain some proxy-relevant settings.

Sorry to make you confused. Currently, the global properties didn't work for Azure AD. To enable the proxy function, you should config a bean described in this tutorial .

java.lang.ClassCastException: class org.springframework.security.authentication.UsernamePasswordAuthenticationToken cannot be cast to class org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationToken

I'm not sure why this happened. If the problem still exists after you used the method described this tutorial , please provide a simple project to reproduce this problem.

what's the difference between the functionality of the spring.cloud.azure.proxy.* properties versus the functionality of the proxyRestTemplateCustomizer bean?

Currently, spring.cloud.azure.proxy.* didn't take effect for all features provided by spring-cloud-azure-starter-active-directory. Please use proxyRestTemplateCustomizer instead.

Hi @chenrujun , thanks for your quick reply! Maybe we're able to solve this with just one more comment :-) As I've mentioned, we need to provide a username/password for the proxy server. I tried adding it to the resttemplate using a ClientHttpRequestInterceptor, however it does not seem to work. The Azure AD Login works fine, but when redirected back to the application, the following response is shown:
Login with OAuth 2.0
[authorization_request_not_found]
Here's our current code:
@Configuration
public class AzureConfig {

  @Bean
  public RestTemplateCustomizer proxyRestTemplateCustomizer() {
    return (RestTemplate restTemplate) -> {
      Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_HOST, PROXY_PORT));
      SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
      requestFactory.setProxy(proxy);
      restTemplate.setRequestFactory(requestFactory);
      restTemplate.setInterceptors(Collections.singletonList(new ProxyAuthHeaderReqeustInterceptor()));
    };
  }

  class ProxyAuthHeaderReqeustInterceptor implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body,
        ClientHttpRequestExecution execution) throws IOException {
      HttpHeaders headers = request.getHeaders();
      headers.add(HttpHeaders.PROXY_AUTHORIZATION,
          "Basic " + Base64.getEncoder().encodeToString((PROXY_USER + ':' + PROXY_PW).getBytes(
              StandardCharsets.UTF_8)));
      return execution.execute(request, body);
    }
  }

}

Could you please provide some official preferred/recommended way for your proxyRestTemplateCustomizer solution to implement also a username/password for the proxy server? (Maybe extending the reference documentation with this could also help others in the future.)
Thanks a lot in advance!

UPDATE - this solution worked for us to establish a connection to Azure AD via proxy using username/password: https://stackoverflow.com/questions/31273236/spring-resttemplate-and-proxy-auth
(thanks @chenrujun for you time)


Add vote proposal card UI

https://app.clickup.com/t/2dfqce3

ready for the review except for one thing: https://ankr.slack.com/archives/C036GDU0YCW/p1653991624611809

Desktop view looks good, just one small thing: the div containing the labels in the top left corner as well as the voting status of the user for that proposal in the top right corner needs to be given the css prop align-items: center so that these elements are vertically aligned.
On the mobile view, there's one issue with the vote progress bars: